Saya mencoba menggunakan ArcGIS 10.2 untuk membuat buffer poin berdasarkan area yang telah ditentukan (misalnya 400 km persegi). Lebih jauh dari itu, penyangga dari beberapa titik dekat dengan garis pantai yang mengharuskan penyangga terpotong di garis pantai dan masih memiliki area yang sama dengan yang ada di daratan (400 km persegi).
Adakah yang tahu bagaimana ini bisa dilakukan dengan Model Builder atau Arcpy?
Saya memiliki keterampilan terbatas dengan Arcpy dan R tetapi akan senang bekerja pada beberapa skrip untuk mendapatkan solusi untuk ini.
Silakan lihat gambar di bawah ini yang menunjukkan representasi grafis dari apa yang saya coba capai
arcpy
arcgis-10.2
r
buffer
Funkeh-Monkeh
sumber
sumber
Jawaban:
Area buffer sirkular adalah fungsi peningkatan jari-jari buffer secara monotonik (pada sistem koordinat planar). Jadi strategi pencarian yang sederhana dapat menemukan jari
R
- jari sedemikian rupa sehingga daerah penyangga jari-jari yangR
terpotong pada wilayah poligonA
adalah (hingga toleransi)s
.Algoritma pencarian paling sederhana hanya akan menjadi pencarian biner. Mulailah dengan dua jari, satu sangat kecil dan satu sangat besar, sehingga area yang Anda inginkan berada di antara area buffer yang terpotong dari jari-jari tersebut. Kemudian ambil saja titik tengahnya dan hitung daerah penyangga, dan cari tahu apakah jari-jari yang Anda inginkan berada di atas atau di bawah titik tengah. Perbarui batas radius Anda dan ulangi sampai Anda mendapatkan toleransi di area yang Anda inginkan.
Menulis pencarian biner dengan Python dan menggunakan ArcGIS Python API terdengar seperti cara yang bagus untuk belajar! Saya cukup yakin saya sudah melakukan ini di R, tahun lalu ...
Ini beberapa kode R:
Pemakaian:
Pertama-tama mengatur wilayah poligon UK sederhana:
Sekarang tentukan satu poin:
Maka Anda hanya:
Ini adalah daftar dengan dua komponen,
b
adalah buffer:dan memiliki area yang tepat:
dan
r
merupakan output dariuniroot
, yang mencakup nilai radius buffer.Jadi dalam hal ini lebar buffer sedikit di bawah 64 km.
Satu-satunya hal untuk mengutak-atik di sini adalah nilai awal yang lebih rendah dan atas - Saya kira Anda dapat intuisi radius yang lebih rendah karena
sqrt(A/pi)
dan atas tidak begitu penting karena algoritma pencarian akan meningkatkannya sampai menangkap interval.Algoritme pencarian mungkin gagal jika jari-jari maks awal benar-benar terlalu besar, karena Anda mungkin melindungi seluruh wilayah Anda dengan jari-jari besar, dalam hal ini mengubah jari-jari tidak akan mengubah area ... Tetapi batas yang masuk akal harus menghentikan hal ini terjadi.
sumber
rgeos
paket dan yanggBuffer
fungsi, kemungkinan besar ...R
kode adalah (a) memisahkan perhitungan GIS dari logika pencarian dan (b) memanfaatkan algoritma pencarian (dalamuniroot
) yang telah dioptimalkan dan diuji - Anda tidak perlu menulis satu diri Anda sendiri (dan kemungkinan itu bukan yang paling efisien).Itu hampir mustahil, karena posisi poin. Anda dapat membuat buffer 400 km 2 , tetapi poin yang lebih dekat ke garis pantai akan selalu memiliki area yang lebih kecil dibandingkan dengan yang lebih jauh (> 400 km 2 ).
Satu-satunya hal yang dapat Anda lakukan adalah melakukan analisis buffer pada poin dan klip buffer yang dibuat dengan fitur garis pantai sesudahnya.
sumber