Obliczanie okrągłości / zwartości wielokąta?

14

Próbuję znaleźć sposoby na ilościowe opisanie kształtów różnych wielokątów. W moim projekcie te wielokąty reprezentują jeziora, rzeki, laguny i parki. Mogą więc mieć prawie dowolny kształt. Jedną łatwą miarą jest obliczenie obwodu względem powierzchni, co w najlepszym razie jest tylko nieznacznie użyteczną miarą. Ale bardzo chciałbym móc powiedzieć coś o „okrągłości” wielokąta. Lub jak „zwarty” jest kształt na mapie.

Jedynym sposobem, w jaki mogę to zrobić z łatwością, jest obliczenie pola każdego wielokąta w stosunku do ramki granicznej dla tego wielokąta (który już mam). Ale to wydaje się złym rozwiązaniem.

Więc teraz myślę o czymś takim - weź środkową część wielokąta, dodaj serię buforów rosnących obszarów (powiedzmy 50%, 100%, 150%), a następnie porównaj, jak wiele zachodzi na siebie między poszczególnymi buforami i oryginalny wielokąt. Idealne koło będzie idealnie zachodzić na 100%, a ja mogę użyć buforów 50% i 150%, aby ocenić, jak bardzo i w jaki sposób każdy wielokąt się różni.

Ale nawet to wydaje się nieporęczne i jak kiepskie obejście tego, co ktoś inny prawdopodobnie już wymyślił o wiele lepiej.

Dla porównania, będę musiał przynajmniej spojrzeć na wynikowe wskaźniki kształtu różnych wielokątów i umieć zgadnąć, co do ich źródła (rzeka? Zbiornik o kształcie dendrytycznym? Jezioro / Laguna? Park) ?)

użytkownik25201
źródło
2
Zdecydowanie zapoznaj się z artykułem Wikipedia Roundness, aby głębiej przemyśleć ten temat. Dlaczego po prostu nie utworzyć bufora wokół środka ciężkości, który jest dokładnie tym samym obszarem, co wielokąt, a następnie zmierzyć obszar poza buforem, aby utworzyć pewnego rodzaju wynik? Czy próbujesz uzyskać względną okrągłość tylko obiektów w tym zestawie danych, czy też musi to być absolutna okrągłość, aby można je było porównać z innymi wielokątami poza tym zestawem danych?
Taylor H.
Dzięki za odpowiedź, to zdecydowanie pomaga. Jednym z moich wyzwań jest to, że samo porównywanie obszarów nie wystarczy - podłużna elipsoida może mieć taki sam „wskaźnik okrągłości” jak kształt dendrytyczny przy użyciu tego wskaźnika. Być może użycie tego wskaźnika okrągłości w połączeniu z relacją obwodu / obszaru będzie w stanie uchwycić również te różnice, wcześniej nie przeprowadzałem tego rodzaju analiz, więc muszę to przemyśleć. Na koniec będę musiał porównać kształty tylko w jednym zestawie danych, ale jest on dość duży (1000s wielokątów)
25201
To prawda, ale możesz filtrować te wyniki za pomocą metryki powierzchni w stosunku do obwodu, aby przynajmniej posortować kształty od prostych do złożonych. Kształt dendrytyczny będzie miał stosunkowo niższy stosunek powierzchni do obwodu (idealny okrąg ma stosunek 1, kwadrat ma stosunek 0,5 itd.) Zdecydowanie nie jest to łatwy problem! Będziesz musiał użyć kilku metryk, które wyobrażam sobie, aby osiągnąć solidny „wynik okrągłości”.
Taylor H.
Dzięki za wkład - myślę, że od tego momentu muszę wypróbować te wskaźniki i zobaczyć, jakie wyniki mogę zarządzać. Może wrócę z bardziej świadomym pytaniem o dalszą pomoc, jeśli zajdzie taka potrzeba. Szanuję Twój czas!
user25201
Należy pamiętać, że wewnętrzne pierścienie (dziury) i wiele części sprawią, że porównanie obszaru-v-obwodu będzie bezużyteczne. Do wygenerowania metryki można użyć tylko zewnętrznych pierścieni, ale wartości wagowe z poszczególnych części mogą stanowić wyzwanie.
Vince

Odpowiedzi:

18

Zwartość obiektu można zmierzyć za pomocą testu Polsby-Popper , określając wynik Polsby-Popper (PP). Wynik PP jest określany przez pomnożenie obszaru wielokąta przez 4pi i podzielenie przez kwadrat do kwadratu. Używając tego, okrąg będzie miał wynik 1, a każdy inny kształt geometryczny ma mniejszy współczynnik.

dysk: (4 * PI) * PI * R² / 4PI²R² = 1

kwadrat: (4 * PI) * C² / 16 * C² = PI / 4 ~ = 0,78

Innym przydatnym indeksem może być długość / szerokość najmniejszego otaczającego prostokąta (patrz narzędzie do minimalizacji geometrii ograniczającej ). Ale w tym przypadku kwadrat i okrąg są do siebie podobne, a wklęsłość jest ignorowana.

Jako ostatnia rekomendacja, jeśli pracujesz na obwodzie, przydatne jest „wygładzenie” obiektu przed obliczeniem wskaźników, aby uniknąć efektu „fraktali” (szczególnie jeśli twoje wielokąty pochodzą z konwersji rastra na wielobok)

radouxju
źródło
To pomaga, dzięki. Moje wielokąty nie pochodzą od rastrów, ale to doskonały punkt, którego nawet nie wziąłem pod uwagę! Na pewno to zrobię.
user25201
Źródło formuł?
Taylor H.
Przepraszam, nie pamiętam: - ~. Prawdopodobnie w artykule o ekologii krajobrazu. Użyłem go po raz pierwszy dawno temu i dodałem „normalizację” dla większej wygody.
radouxju
3
@Taylor Jest to jedna z wielu możliwych cech „zwartości”. Typowe metody porównują powierzchnię obiektu do miary krętości lub zasięgu przestrzennego. Te ostatnie środki mogą obejmować nie tylko obwód, ale także średnicę i rozmiary elementów ograniczających (takich jak ramka ograniczająca obszar minimalny, elipsa ograniczająca obszar minimalny i okrąg). Bardziej egzotyczne obejmowałyby obszary o różnych buforach i szacowany wymiar fraktalny. Wyzwanie w większości sytuacji nie polega na obliczeniu tych środków, ale na podjęciu decyzji, która z nich jest najbardziej odpowiednia dla aplikacji.
whuber
4

Miałem do czynienia z podobnym problemem i rozwiązałem równanie zarówno obwodu, jak i pola koła, aby stały się równe:

2 * pi * r = c <=> r = c / 2 * pi pi * r ^ 2 = a <=> r = sqrt (a / pi)

c / 2 * pi = sqrt (a / pi) <=>

sqrt (a / pi)

-------------- = 1

c / 2 * pi

Indeks ten wynosi od 0 do 1, gdzie 1 jest idealnym kołem. Nie wiem, czy jest to ustalona metoda, ale chciałbym usłyszeć od każdego, kto widziałby ją gdzie indziej.

JohanOlsen
źródło
Niezły rozwój od zera. to jest uzasadnienie Polby-Poppera, o którym wspomniałem w moim poście, z wyjątkiem tego, że wziąłeś pierwiastek kwadratowy. w zasadzie nie zmieni to rankingu, jeśli
wyprostujesz
3

Oprócz formuły okrągłości przedstawionej przez radouxju w jego odpowiedzi i innych, takich jak stosunek powierzchni wielokąta do obszaru jego minimalnego okręgu ograniczającego - ST_Area(geom)/(ST_Area(ST_MinimumBoundingCircle(geom)) as rnd_checkw PostGIS: często pomagam sprawdzić liczbę wierzchołków / punktów w „podejrzana” geometria - ST_NPoints(geom)w PostGIS.

Rzeczy, które robię, różnią się od tego, co opisujesz, ale uważam, że filtr NPoints pomaga odróżnić działki nieruchomości (które mogą być rzeczywiście długie i chude, oczywiście) od rzek i innych długich, chudych cech naturalnych. Istnieje dziwna długa, chuda działka, która graniczy z rzeką, ale sprawdzanie anomalii jest powodem, dla którego otrzymujemy duże pieniądze (HA!): Zawsze niezmiennie mają jedną stronę (przynajmniej) prostą na znaczną część długości obiektu, więc praca skończona.

Poza tym (w moim przepływie pracy) rzadko zdarza się, że nie ma jakiegoś identyfikatora przestrzennego, którego nie można by wprowadzić w życie, a w każdym razie duża część mojej pracy jest skonfigurowana tak, abyśmy analizowali „deltę” (zmiany w czasie) więc jeśli dane przy T = 0 są czyste i nikt nie wprowadził „ujemnych ulepszeń” dla T ∈ [0, t-1], to delta dla całego stanu T=t|t-1może być wykonana w ciągu pół dnia.

Mnóstwo punktów w rzeczy, która jest długa i chuda i nie ma żadnej linii, która ... prawdopodobnie jest rzeką.

Zbiornik o kształcie dendrytycznym z pewnością podważyłby to przypuszczenie, ale jest prawdopodobne, że filtrowanie na całej długości kształtu może dać wyniki, jeśli cała rzeka jest jednym wielokątem (powinniśmy mieć tyle szczęścia) - lub znaleźć liczbę ścieżek od „wąski” koniec do końca grubego (liczba gałęzi).

Jezioro vs parku ... chciałbym spróbować to zrobić przez zdjęć lotniczych / satelitarnych, biorąc pod uwagę moje druthers: to drogę łatwiejszą problemu używać lądowego / klasyfikator wody, w których region być sprawdzany jest znana, nie stara się zidentyfikować i ekstrakt region wodny na obrazie, na którym lokalizacja wody nie jest znana.

Uznałem również, że ta odpowiedź (na inne pytanie) jest bardzo przydatna do rozróżniania długich, chudych funkcji.

GT.
źródło