Jest to proste i dość powszechne pytanie, które zostało już zadane w różnych celach (patrz ten link i to też , na przykład), tutaj jednak szukamy nie pakietu oprogramowania, ale algorytmy , które moglibyśmy spróbować wdrożyć powiedzmy w Python .
Tak więc, jak pokazano poniżej, zmapowany jest zestaw linii (są już przycięte, BTW).
Algorytmy / pomysły do generowania wielokątów (jak pokazano na czerwono) ?
algorithm
polygonize
geometry-conversion
Deweloper
źródło
źródło
Odpowiedzi:
Cóż, podajemy tutaj odpowiedź, która nie jest pełną odpowiedzią na nasze pytanie, tzn. Pytanie pozostanie „ otwarte na udzielenie odpowiedzi ”. Jest to jednak rozwiązanie problemu w pytaniu. Oto sztuczka, której użyliśmy:
Najpierw zobaczmy wyniki :
Więc podane linie w
left
zbudowanych wielokątach pokazane wmiddle
. Są to prawdziwe wielokąty, jak pokazano wright
;)Dla podanego poniżej algorytmu użyliśmy
Shapely
pakietu w Pythonie .MultiLineString
{:: M}buffer
, powiedzeps
{:: MB}Polygon
{:: P} (region to kwadrat)P.difference(MB)
{powstałe wielokąty}Zauważ , że działa szybko cicho. Jednak brakującym punktem jest to, że algorytm nie jest oryginalną metodą budowania wielokąta z linii . Niemniej jednak zadziałało idealnie w przypadku problemu, który mieliśmy w ręku.
źródło
Pakiet JTS Topology Suite ma klasę Polygonizer, która prawie to robi.
Możesz rzucić okiem na kod źródłowy, dostępny tutaj i przekonwertować go na Python.
źródło
Możesz rzucić okiem na pakiet Python Shapely, szczególnie polygonize ()
źródło
from shapely.ops import polygonize
), używa GEOS.Polygonize z GEOS . To jest link, w którym znajduje się link do linku ...: |polygonize
w ogóle się nie udały. Jednak dziękuję za przypomnienie,Shapely
dzięki któremu możemy znaleźć rozwiązanie (w rzeczywistości sztuczkę) w formie zamieszczonej jako odpowiedź.Oto inne rozwiązanie, które możemy znaleźć.
Dla Pythona jest pakiet {tutaj} . Jest to niewielka implementacja z kilkoma błędami. Niemniej jednak przy pewnym wysiłku można go wykorzystać do rozwiązania tego problemu. Zwróć również uwagę na następujące etapy:
Etap wstępnego przetwarzania, w którym znajdują się wszystkie przecięcia między liniami. Następnie odpowiednio wszystkie linie są dzielone na segmenty w punktach interakcji. Lista punktów przecięcia i lista powiązanych krawędzi są potrzebne do DCEL.
źródło
difference
używana jest operacja.