Jestem raczej nowy w świecie GIS, a zwłaszcza PostGIS, więc przepraszam, jeśli odpowiedź wydaje się oczywista ...
Chciałbym przeprowadzić analizę szeregu budynków. Interesuje mnie ich powierzchnia elewacji wraz z odpowiednią orientacją. Jak pokazano na poniższym obrazku, chciałbym mieć długość i (normalną) orientację wszystkich krawędzi w szeregu wielokątów. W przykładzie wyróżniłem tylko jedną powierzchnię.
Tabela wyników może wyglądać następująco:
building_id | edge_id | orientation | edge_length
-------------------------------------------------
1 | 1 | 315 | 10.0
1 | 2 | 45 | 7.0
1 | ... | ... | ...
Nie jestem jednak pewien, czy jest to inteligentny sposób na przechowywanie wyników do dalszego przetwarzania (np. Oblicz odległość od krawędzi do następnego budynku itp.). Więc moje pytanie jest dwojakie:
- Czy istnieje skuteczna funkcja PostGIS, która może analizować krawędzie wielokąta? W przypadku, gdy nie ma natywnej funkcji PostGIS, alternatywnie byłbym zainteresowany podejściem opartym na języku Python.
- Jaki byłby inteligentny sposób przechowywania wyniku w tabeli PostGIS, ponieważ wielokąty mogą mieć różną liczbę krawędzi?
Odpowiedzi:
Wczoraj nie miałem czasu na szczegółowe tworzenie ... Zobacz moje rozwiązanie w 4 krokach:
Ostatnie zapytanie daje identyfikatory budynku z łączeniem przestrzennym za pomocą st_touches. Mam nadzieję, że to pomoże. Aktualizacja - w qgis rozwiązanie wygląda następująco:
źródło
UPDATE
powinno wystarczyć . Jeszcze raz dziękuję za to świetne rozwiązanie. Poczekam jeszcze kilka dni, jeśli pojawią się inne odpowiedzi, zanim zaakceptuję.ST_ForceRHR
? Ta odpowiedź wydaje się w porządku.ST_ForceRHR
rozwiązanie, ale nie udało się. Byłbym wdzięczny za podpowiedzi ... PróbowałemST_Dump(ST_Boundary(ST_ForceRHR(the_geom)))