Lagi

Bagaimana cara membuat buffer dalam proporsional yang mengurangi ukuran berdasarkan persentase, ke titik tertentu?

Bagaimana cara membuat buffer dalam proporsional yang mengurangi ukuran berdasarkan persentase, ke titik tertentu?


Saya bekerja di ArcGIS dan saya memiliki 75 poligon cekungan dan fitur titik (disebut titik asal) di dalam setiap poligon. (Tidak harus di tengah poligon). Saya ingin membuat 100 poligon di dalam poligon cekungan mulai dari jarak asal dari 1%, 2% dll hingga 100% poligon cekungan. Jadi poligon 1% akan memiliki batas 1% dari titik asal. Poligon 100% akan menjadi poligon cekungan asli.

Saya merasa harus ada fungsi untuk ini.

Buffer bagian dalam tidak berfungsi karena didasarkan pada jarak daripada persentase dan tidak memperhitungkan bahwa saya ingin 'menyusutkan' poligon kembali ke titik asal.

Saya telah melihat orang menyarankan QGIS tetapi apakah ini akan berhasil jika saya ingin poligon 'menyusut secara proporsional' kembali ke titik tertentu?

Saya telah mencoba:

  1. mengubah poligon cekungan menjadi simpul.
  2. melakukan analisis dekat untuk menghitung jarak simpul ke titik asal dan menambahkan koordinat X/Y
  3. Membuat garis xy dari asal ke setiap simpul menciptakan pola seperti bintang.
  4. Saya kemudian membagi garis dengan 100% dan akan mengonversi ke simpul dan bergabung dengan simpul untuk membuat baris baru.

Masalahnya adalah karena poligon cekungan tidak teratur, garis terkadang keluar dari poligon dan masuk kembali membuat metode ini tidak berfungsi.

Saya berharap untuk melakukan ini tanpa coding.


Seperti yang bisa dilihat dari gambar

tugas memiliki solusi untuk bentuk yang sama dengan lambung cembung mereka sendiri. Jika tidak demikian, posisi titik dan poligon yang 'tidak cembung' dapat menciptakan artefak. Output dapat sedikit ditingkatkan dengan menggunakan pohon rentang minimum poin, tetapi curang dan terlalu banyak untuk hari ini.

import arcpy, traceback, os, sys from arcpy import env.overwriteOutput = True try: def showPyMessage(): arcpy.AddMessage(str(time.ctime()) + " - " + message) mxd = arcpy.mapping.MapDocument ("CURRENT") lapisan = titik arcpy.mapping.ListLayers(mxd), catchments="centres","subcatchments" pointsLr = arcpy.mapping.ListLayers(mxd,points)[0] catchmLR = arcpy.mapping.ListLayers(mxd ,catchments)[0] dDest=arcpy.Describe(pointsLr) SR=dDest.spatialReference g = arcpy.Geometry() pointsList=arcpy.CopyFeatures_management(pointsLr,g) pgonsList=arcpy.CopyFeatures_management(catchmLR,g) persen=range( 10,100,10) gList=[] nPoints=len(pointsList) untuk i dalam rentang(nPoints): bigList=[] pCentre=pointsList[i].firstPoint pGon = pgonsList[i] outLine=pGon.boundary() outPoints=outLine .getPart(0) untuk p di titik keluar: smalList=[] array = arcpy.Array([pCentre,p]) ray=arcpy.Polyline(array,SR) crosses=ray.intersect(outLine,1) lMax=ray. panjang untuk pnt dalam persilangan: lCur=ray.measureOnLine(pnt) jika lCur<=lMax: pNearest=pnt;lM ax=lCur array = arcpy.Array([pCentre,pNearest]) short=arcpy.Polyline(array) untuk persen dalam persen: theP=short.positionAlongLine (float(perc)/100,True) theP=theP.firstPoint smalList. append(theP) bigList.append(smalList) m=0 untuk perc dalam persen: array = arcpy.Array() untuk smalList dalam bigList: p=smalList[m] array.add(p) web=arcpy.Polyline(array) arcpy.AddMessage(web.length) gList.append(web) m+=1 outp=r"d:out.shp" arcpy.CopyFeatures_management(gList,outp) kecuali: message = "
*** PYTHON ERRORS ** * "; showPyMessage() pesan = "Info Pelacakan Python: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage() pesan = "Info Kesalahan Python: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "
"; tampilkanPyMessage()

Saya akan merekomendasikan skrip ini karena Anda akan menghemat banyak waktu… tetapi Anda dapat melakukannya dengan menambahkan bidang ke bidang atribut dan menjalankan analisis untuk menghasilkan nilai jarak proporsional dari titik ke tepi cekungan.

Apakah Anda ingin menyangga jarak dari titik ke tepi cekungan atau dari tepi cekungan ke titik?

Dengan data ini Anda kemudian dapat menghitung jarak penyangga baik yang berasal dari tepi cekungan ke titik atau dari titik ke tepi cekungan.

Saya berasumsi Anda memiliki Lisensi Lanjutan ArcGIS karena Anda telah menyebutkan alat Dekat

Berikut adalah contoh lari dari titik ke tepi cekungan. Diakhiri dengan menjepit penyangga ke tepi cekungan…

  1. Hitung jarak per titik pusat ke tepi cekungan terdekat menggunakan alat Near.
  2. Ambil nilai jarak linier (pastikan Anda menjalankan perhitungan dengan CRS yang diproyeksikan) tambahkan itu ke tabel atribut database poin.
  3. Kemudian hitung jarak proporsi, menggunakan Kalkulator Lapangan, dari titik ke tepi cekungan 100 kali dengan kelipatan 1 per titik. Setiap poin akan berakhir dengan 100 bidang (yaitu untuk setiap persentase).
  4. Analisis dengan cincin multi-buffer, Anda akan menambahkan 100 nilai jarak secara manual ke alat penyangga untuk setiap titik.
  5. Kemudian klip buffer ke poligon baskom (satu per satu memilih baskom sebelum kliping).

Hanya untuk meringkas bagaimana pengkodean akan menyamakan waktu Anda, dan jari-jari Anda pada mouse… langkah ketiga saja memiliki 100 operasi penambahan bidang dan 100 operasi selanjutnya untuk menambahkan perhitungan persentase secara manual untuk setiap bidang.


Tonton videonya: PEMBUATAN BUFFER