Jak podzielić dwa przeplatające się wielokąty według średniego liniowania wspólnego obszaru (foremne QGIS / python)

9

Mam dwa wielokąty,

POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLYGON ((1 1, 1 7, 7 7, 7 1, 1 1))

i chcę je równomiernie podzielić. Wynik powinien być podzielony wzdłuż czerwonej zaznaczonej linii.

Używam qgis / python zgrabnie i chcę to zrobić za pomocą python.

LINESTRING (1 5,5 1)

OLS
źródło
4
Jak ogólny jest twój problem? Najwyraźniej zamierzasz zastosować rozwiązanie do więcej niż tylko tych dwóch wielokątów. Jakie rodzaje wielokątów rozważasz? Co dokładnie rozumiesz przez „równomiernie”? Czy podział musi być wzdłuż odcinka linii, czy może wzdłuż pewnego nieliniowego łuku? Co powinno się stać, jeśli przecięcie wielokąta składa się z wielu elementów lub nie jest po prostu połączone? Jaką formę powinien przyjąć wynik - czy powinien on przeciąć przecięcie, czy każdy z wielokątów, czy może po prostu linię podziału?
whuber
1
Pracuję z wielokątami nieregularnymi i chcę mieć dwa nie przecinające się wielokąty. w tym przypadku oryginalne wielokąty, jak wspomniano, a pożądanym rezultatem jest POLYGON ((- 5 -5, -5 5,1 5,5 1,5 -5, -5 -5)) POLYGON ((1 5, 1 7, 7 7, 7 1,5 1,1 5))
OLS,
1
Problem jest trudny, gdy jeden lub oba wielokąty mogą mieć pierścienie (to znaczy nie można ich po prostu połączyć).
whuber

Odpowiedzi:

5

Kiedyś użyłem podejścia z wielokątami voronoi. Zrobiłem to własnoręcznie. Mam niejasne wyobrażenie o tym, jak można to zrobić zgrabnie, ale oto jak to wygląda.

Najpierw wyodrębnisz wierzchołki każdego nakładającego się wielokąta i utworzysz z nich wielokąty Voronoi (wektor> narzędzia geometrii> wyodrębnij węzły i wektor> narzędzia geometrii> vononoi). Dzięki uzyskanemu kształtowi możesz narysować linię, która dzieli dokładnie obszar nakładania się na dwie części. (Jasna zielona linia) voronoi

Przycinasz warstwę voronoi nakładającym się wielokątem i usuwasz zakładkę z oryginalnych kształtów, a następnie wklejasz przycięty wielokąt voronoi z oryginalnymi kształtami. Wybierz, scal, voilà!

Teraz wygląda trochę prymitywnie, ponieważ moje są naprawdę prostymi kształtami. Ale jeśli go zagęścisz (wektor> narzędzia geometrii> geometrie gęstości) i dodasz około 20 węzłów między każdym istniejącym wierzchołkiem, możesz to zrobić:

densigy_voronoi

Co jest znacznie lepsze. Łatwo, jeśli masz tylko niewielką liczbę kształtów do zmodyfikowania.

fgcartographix
źródło
To jest dobry pomysł. Ale skąd pochodzi ta jasnozielona linia i skąd wiesz, że dzieli region na dwie równe części?
whuber
jak inny jest ten proces niż „SELECT astext (przecięcie (geomFromText („ POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) ”, 4326), geomFromText („ POLYGON ( (1 1, 1 7, 7 7, 7 1, 1 1)) ”, 4326))); astext -------------------------------- POLYGON ((1 5,5 5,5 1,1 1,1 5 ) '?
OLS
Pochodzi z właściwości wielokąta voronoi. Dzieli przestrzeń równomiernie między punktami. Dlatego musisz zagęścić wielokąty, ponieważ w przeciwnym razie „środkowa” linia nie będzie przekraczać granic. Jeśli chodzi o jasną linię, rysuję ją ręcznie, aby zilustrować, gdzie jest środek ... Jeśli chodzi o polecenie PostGIS (jestem nowicjuszem w PostGIS), myślę, że wybierze tylko przecinający się obszar, a nie go podzieli.
fgcartographix
1
Powiedziawszy to, nie powiedziałem, że będzie to równa część. Ta metoda służy do znalezienia linii środkowej rzeki. Jeśli masz zatokę w rzece, środkowa linia zostanie przyciągnięta do niej. ale nie wejdzie do niego, więc mimo to będzie „wyśrodkowany”.
fgcartographix