Bagaimana Cara Membagi Poligon Cekung Menjadi Poligon Cembung di Arcpy?

20

Saya mencari alat atau algoritme untuk mendeteksi poligon cekung dan membaginya menjadi poligon cembung. Seperti dijelaskan dalam gambar, poligon biru dipecah menjadi poligon A dan B

Saya menggunakan Arcpy di bawah Arcgis 10.1

perpecahan poligon

geogeek
sumber
15
Mungkin Anda bisa menjelaskan mengapa Anda melakukan ini? Lagi pula, (a) deteksi mudah: poligon cekung akan memiliki area lebih sedikit daripada cembung cembungnya; dan (b) setiap triangulasi poligon secara otomatis membaginya menjadi poligon cembung, karena semua segitiga adalah cembung. Ini menunjukkan Anda memiliki fleksibilitas dalam memilih di antara banyak solusi yang mungkin.
whuber
2
Toolset ini akan memungkinkan Anda untuk melihat apa yang Bill bicarakan tentang resources.arcgis.com/gallery/file/geoprocessing/… konversi poligon menjadi poin kemudian jalankan opsi Delaunay
1
Ada jawaban untuk ini pada Stack Overflow: stackoverflow.com/a/6686842/1300519 Algoritma yang dijelaskan seharusnya tidak terlalu sulit untuk ditulis menggunakan arcpy.
Snorfalorpagus
1
@ snorf Itu tampaknya menjawab pertanyaan yang sedikit, tetapi penting, berbeda. Solusinya tampaknya melibatkan kombinasi "poligon" dan "lubang" , yang biasanya tidak dimaksudkan dengan "pemecahan". Paling tidak, jawaban itu perlu penjabaran lebih lanjut agar bermanfaat di sini. (BTW, jawaban Anda diubah menjadi komentar karena referensi silang ke solusi lain di Web, tanpa penjelasan tambahan, tidak dianggap sebagai jawaban di sini di SE.)
whuber
2
Menilai dari komentar di sini dan tidak ada jawaban yang muncul, rekomendasi saya adalah mengedit pertanyaan Anda untuk memasukkan umpan balik itu dan mempertimbangkan untuk menawarkan hadiah.
PolyGeo

Jawaban:

1

berikut adalah beberapa langkah untuk mengidentifikasi simpul dari bagian cekung:

dengan parcel: geometri pembatas minimum (lambung) -> parcelHull

dengan parcel: FeatureVerticesToPoint -> parcelPoints

dengan parcelHull: FeatureVerticesToPoint -> parcelHullPoints

dengan parcelPoint dan parcelHullPoint: symmetrical Diff -> concavePoints

berdasarkan titik-titik tersebut, Anda dapat menggambar bissectrice untuk memotong poligon Anda (jarak bantalan ke garis), pilih tepi segitiga Voronoï yang memotong titik Anda tetapi tidak berbagi segmen dengan batas parsel Anda (pilih berdasarkan lokasi setelah membagi segitiga) garis pada titik), pilih titik pada situs yang berlawanan dan buat garis (titik ke garis), pilih titik terdekat di tepi berlawanan dan buat garis (titik ke garis) ...

Pada akhirnya, gunakan garis pilihan Anda dan paket asli dengan "fitur untuk poligon" untuk membagi poligon.

radouxju
sumber