Mam zestaw wielokątów reprezentujących duże obszary, powiedzmy dzielnice miast. Chcę zidentyfikować duże nakładające się obszary między nimi.
Ale jest problem: czasami wielokąty zachodzą na siebie na obwodzie (ponieważ zostały narysowane z małą precyzją). Spowoduje to generowanie długich i wąskich nakładek, na których mnie nie obchodzi.
Ale innym razem będą istnieć duże nakładki solidnych wielokątów, co oznacza duże obszary, w których wielokąt sąsiedztwa nakłada się na inny. Chcę wybrać tylko te.
Zobacz zdjęcie poniżej nakładających się na siebie. Wyobraź sobie, że chciałem wybrać tylko niebieski wielokąt w lewym dolnym rogu.
Mogłem patrzeć na obszary, ale czasami wąskie są tak długie, że ostatecznie mają obszary tak duże jak niebieski wielokąt. Próbowałem zrobić stosunek powierzchni do obwodu, ale to również dało mieszane wyniki.
Próbowałem nawet użyć ST_MinimumClearance
, ale czasami duże obszary będą miały przymocowaną wąską część lub dwa bardzo bliskie wierzchołki.
Jakieś pomysły na inne podejścia?
Ostatecznie najlepiej działało mi użycie bufora ujemnego, jak sugerują poniższe @Cyril i @FGreg.
Użyłem czegoś takiego jak:
ST_Area(ST_Buffer(geom, -10)) as neg_buffer_area
W moim przypadku jednostkami były metry, więc 10 m bufor ujemny.
W przypadku wąskich wielokątów obszar ten zwrócił zero (geometria byłaby pusta). Następnie użyłem tej kolumny do odfiltrowania wąskich wielokątów.