Nie udało mi się znaleźć „nazwy” algorytmu, który pozwoliłby na konwersję linii na wielokąty. Ponieważ zagadnienie to przecina GIS oraz dziedziny geometrii obliczeniowej i informatyki. Nie jestem pewien, co jeszcze dodać do miksu. Nie chcę podawać listy tego, czego szukałem, ponieważ chciałbym również wiedzieć, co inni ludzie uznaliby za swój pierwszy wybór kryteriów wyszukiwania.
Scenariusz ... Mam linie (dwa punkty potrzebne do zbudowania linii) ... każda linia jest połączona z co najmniej jedną inną linią. Przestrzeń pośrednia między połączonymi liniami tworzy wielokąt. Najprostszym scenariuszem byłby trójkąt ... prostokąt ... i można przejść dalej do funkcji wielosegmentowych.
Przepraszam za jakiekolwiek niejasne opisy, ale jak powiedziałem, nie chcę kierować możliwymi rozwiązaniami ścieżką, którą już odwiedziłem, ponieważ interesuje mnie „pierwsza myśl”, a nawet ostateczne rozwiązanie.
źródło
Odpowiedzi:
Może „wypełnienie obszaru”? Zobacz tutaj i tutaj .
Edytować
Inną możliwością jest ograniczona triangulacja . (Łącze prowadzi do apletu Java, który pozwala narysować wykres za pomocą myszy, a następnie ilustruje algorytm przemiatania płaszczyzny w celu triangulacji.) Wynik takiej triangulacji, bez względu na sposób jej przeprowadzenia, można łatwo przetworzyć utwórz pożądane wielokąty: po prostu połącz wszystkie sąsiednie trójkąty, które mają nowo utworzoną krawędź.
Przykład
Oryginalny wykres:
Wykres trójkątny:
źródło
W teorii grafów operacja ta nazywana jest obliczeniem powierzchni . Jest to związane z obliczeniem podwójności danego wykresu.
Na przykład w bibliotece GeOxygène java na wykresie (o nazwie CarteTopo ) znajduje się metoda getFaces w celu pobrania jej powierzchni .
Nazywa się to poligonizacją w JTS
źródło
Oprogramowanie hosta RepRap konwertuje listę segmentów linii (w nieznanej losowej kolejności) na listę wielokątów, która brzmi podobnie do tego, co próbujesz zrobić.
W szczególności algorytm „dopasowywania końca” RepRap obsługuje wiele przypadków patologicznych.
Niestety, oprogramowanie RepRap zakłada, że każdy narożnik ma do niego parzystą liczbę krawędzi - 2 linie przechodzące do narożnika na normalnym obiekcie; 4 linie idące razem, gdy róg jednego obiektu styka się z rogiem innego obiektu itp. Nie wiem, jak trudno byłoby dostosować ten algorytm do obsługi diagramów voronoi, które zwykle mają 3 krawędzie przechodzące do każdego rogu.
źródło
czy sprawdziłeś bazę kodu GRASS, aby znaleźć rozwiązanie swojego problemu? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html
źródło
main.c
wv.type
źródle, wszystko, co się dzieje, to to, że funkcje są ponownie oznaczane jako granice: rzeczywiste przetwarzanie nie występuje. Z perspektywy czasu nie jest to zbyt zaskakujące: jeśli (nie jestem pewien) funkcje są utrzymywane z pełną informacją topologiczną 2D, wówczas wszystkie obliczenia w celu zidentyfikowania regionów wielokątnych odbywają się automatycznie podczas tworzenia lub importu obiektów i są zachowywane przez cały czas wszystkie operacje geoprzetwarzania.Halo
Nie sądzę, że to, czego szukasz, to określony algorytm. Zadanie może być dość trudne lub bardzo proste w zależności od zestawu danych.
Powinieneś podzielić problem na co najmniej 2 części. 1) jest bardziej problemem sieciowym, jak znaleźć zamknięte pierścienie z liniami. 2) wyrazić zamknięty znacznik liniowy jako wielokąt
Druga część, czyli „konwersja linii na wielokąty”, zależy bardziej od formatu niż reprezentacja wielokąta / oznaczenia linii. Mam na myśli przejście z:
LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1 1)
na:
POLYGON ((1 1,2 2,2 1,1 1))
przekształca linię w wielokąt, ale chyba nie o tym mówisz. Trudniejsza część jest pierwsza. Jeśli masz spaghetti linii, jak zamówić je jako zamknięte linie.
Wydaje mi się, że odpowiedź na to pytanie zależy od wielu zbiorów danych. Jak pyta Kirk, czy linie mogą przekroczyć problem jest znacznie większy. Jeśli wiesz, że wszystkie „kolekcje linii” są częścią zamkniętego oznaczenia linii, staje się łatwiejsze. Następnie możesz złapać dowolną linię i przejść się ścieżką, dopóki nie wrócisz, a następnie przejdź do kroku drugiego powyżej.
Chodzi mi o to, że stan zestawu danych określa wszystkie zasady dotyczące tego, jak to zrobić. Jeśli chcesz znaleźć wszystkie możliwe wielokąty w spaghetti z liniami liniowymi, zakładam, że będzie musiało być wiele różnych algorytmów, aby umieścić punkty wierzchołków na wszystkich skrzyżowaniach, przeszukać wszystkie możliwe ścieżki i tak dalej.
W PostGIS funkcja nazywa się ST_Polygonize. Ta funkcja tworzy wszystkie możliwe wielokąty z podanych linii.
Jest to wykonywane przez GEOS, dzięki czemu można znaleźć algorytmy zarówno w kodzie GEOS, jak i JTS.
Tylko kilka myśli
/ Nicklas
źródło
Możesz spróbować poszukać algorytmu „Forward Star”. Powiedziano mi, że jest ogólna, ale jedyne dyskusje na ten temat, które kiedykolwiek czytałem, zawsze dotyczyły arkgis. Może zajrzyj do odniesień cytowanych w tych notatkach do wykładu dotyczących gwiazdy naprzód.
źródło