Jak podzielić wklęsły wielokąt na wypukłe wielokąty w Arcpy?

20

Szukam narzędzia lub algorytmu do wykrywania wklęsłych wielokątów i dzielenia ich na wypukłe wielokąty. Jak wyjaśniono na rysunku, niebieski wielokąt jest podzielony na wielokąty A i B.

Korzystam z Arcpy pod Arcgis 10.1

podzielone wielokąty

geogeek
źródło
15
Być może mógłbyś wyjaśnić, dlaczego to robisz? W końcu (a) wykrywanie jest łatwe: wklęsły wielokąt będzie miał mniejszą powierzchnię niż wypukły kadłub; oraz (b) każda triangulacja wielokąta automatycznie dzieli go na wypukłe wielokąty, ponieważ wszystkie trójkąty są wypukłe. To pokazuje, że masz pewną elastyczność w wyborze spośród wielu możliwych rozwiązań.
whuber
2
Ten zestaw narzędzi pozwoli ci zobaczyć, co Bill mówi o zasobach
1
Odpowiedź na to pytanie znajduje się na stronie Przepełnienie stosu: stackoverflow.com/a/6686842/1300519 Opisane algorytmy nie powinny być zbyt trudne do napisania przy użyciu arcpy.
Snorfalorpagus,
1
@ snorf To wydaje się odpowiadać na nieco, ale co ważne, inne pytanie. Rozwiązanie najwyraźniej obejmuje kombinację „wielokątów” i „dziur” , co zwykle nie oznacza „dzielenia”. Przynajmniej ta odpowiedź wymaga dalszego dopracowania, aby była użyteczna w tym przypadku. (BTW, twoja odpowiedź została zmieniona na komentarz, ponieważ odniesienia do innych rozwiązań gdzie indziej w Internecie, bez żadnego dodatkowego wyjaśnienia, nie są uważane tutaj za odpowiedzi na SE.)
whuber
2
Sądząc po komentarzach tutaj i bez odpowiedzi, zalecam edycję pytania, aby uwzględnić tę informację zwrotną i rozważyć zaoferowanie nagrody.
PolyGeo

Odpowiedzi:

1

Oto kilka kroków, aby zidentyfikować wierzchołki z części wklęsłych:

z działką: minimalna geometria graniczna (kadłub) -> parcelHull

z paczką: FeatureVerticesToPoint -> parcelPoints

with parcelHull: FeatureVerticesToPoint -> parcelHullPoints

z parcelPoint i parcelHullPoint: symetryczne Zróżnicowane -> wklęsłe punkty

na podstawie tych punktów możesz narysować bissectrice, aby wyciąć wielokąt (odległość namiaru do linii), wybrać krawędzie trójkąta Voronoï, które przecinają twój punkt, ale nie dzielą segmentu z twoją granicą działki (wybierz według lokalizacji po podzieleniu trójkąta linii na wierzchołkach), wybierz wierzchołek po przeciwnej stronie i utwórz linię (punkty do linii), wybierz najbliższy punkt na przeciwległej krawędzi i utwórz linię (punkty do linii) ...

Na koniec użyj preferowanych linii i oryginalnych paczek z „funkcją do wielokąta”, aby podzielić wielokąty.

radouxju
źródło