Mam plik kształtu linii środkowej drogi, który dzieli drogi na każdym skrzyżowaniu. Chciałbym jednak dołączyć LINESTRING, które mają wspólny zestaw atrybutów, w jeden LINESTRING. Tak długo, jak nazwa, ograniczenie prędkości itp. Się nie zmienią, chcę je połączyć. Ma to na celu ostateczne połączenie z OpenStreetMap.
Oprogramowanie ArcGIS dla komputerów stacjonarnych Esri wydaje się na to pozwalać za pomocą polecenia Dissolve i opcji UNSPLIT_LINES.
Znalazłem również polecenie Rozpuszczanie w QGIS, ale wydaje się, że działa tylko na wielokątach i pojedynczych polach.
Zakładając, że nic nie istnieje w QGIS, czy ktoś wie, jak to zrobić w PostGIS lub GRASS?
postgis
openstreetmap
grass
dissolve
joshdoe
źródło
źródło
Odpowiedzi:
Interesujące pytanie. Nie uważam się za guru PostGIS, ale zastanawiałem się nad twoim problemem i wymyśliłem następujące zapytanie, które rozpuszcza
LINESTRING
rekordy autostrady wMULTILINESTRING
rekordy, gdy mają one wspólne wartości w wielu polach (w moim zestawie danych dopasowałem polaname
istate
). Użyłem OGR do wypchnięcia pliku kształtu autostrady (przemianowanego na ushwys) do PostGREsql; więc moje pole geometrii nazywa sięwkb_geometry
. Spróbuj zhakować to zapytanie, aby dostosować dane i warunki terenowe:Jeśli to zadziała, możesz użyć ogr2ogr do wykonania tego zapytania i wyeksportować wyniki w dowolnym preferowanym formacie wektorowym, takim jak plik kształtu, GML, CSV lub inny. Aby uzyskać informacje na temat wywoływania zapytań SQL z ogr2ogr, zapoznaj się z dokumentacją OGR SQL .
Jako odniesienie zapoznałem się z instrukcją PostGIS ST_Collect , a także z tą witryną, która pokazuje grupowanie na wielu polach.
Jeśli zauważysz, że redakcje tego zapytania nie działają, daj mi znać, a ja znajdę odpowiedź, aby nie pozostała w tyle i nie dezorientowała ludzi.
PS Jeśli nie znasz się na używaniu ogr2ogr do wypychania geodanych do PostGIS, użyłem następującego skryptu ogr2ogr, aby wykonać import danych ( strzeż się kopiowania z Internetu i wklejania bezpośrednio do okna poleceń ogr2ogr, ponieważ znalazłem formatowanie strony wprowadza podział wierszy i podstawianie czcionek / znaków dla podwójnych cudzysłowów, które łamią skrypt ogr ):
[Aktualizacja]
Chciałem zobaczyć, jak to „wyglądało” w QGIS po uruchomieniu tego zapytania, więc zmodyfikowałem zapytanie, aby zastosować tę
WHERE
klauzulę (która daje mi wszystkie warianty US Highway 65 w stanie Missouri):Następnie użyłem QGIS i wtyczki QuickWKT do wizualizacji wszystkich ośmiu (8) moich wynikowych
MULTILINESTRING
rekordów autostrad . Jak widać na zrzucie ekranu, końcowe wyniki zabierają Hwy 65 z północnej granicy Missoui z Iowa aż do jej południowej granicy z Arkansas:Dla mnie ta wizualizacja pokazuje, że moje zapytanie nie spowodowało nieoczekiwanego powielenia lub wyeliminowania funkcji. Następnie zastanawiałem się: „ok, rozpuszczenie zwróciło osiem elementów, ale ile elementów w oryginalnej tabeli faktycznie reprezentuje Hwy 65 w Missouri?” Moje następne zapytanie odpowiedziało na to pytanie. Wygląda na to, że oryginalny zestaw danych używa trzydziestu ośmiu (38) funkcji do reprezentowania Hwy 65 w Missouri:
W końcowej analizie zapytanie zredukowało trzydzieści osiem (38) elementów do ośmiu (8) elementów, które dzielą wartości w polach nazwy i stanu. W tym momencie jestem stosunkowo pewien, że to zapytanie jest przydatne i odpowiednie do rozpuszczania geometrii jednoczęściowych w geometrie wieloczęściowe, gdy zadanie rozpuszczania musi uwzględniać wiele pól.
Twoje zdrowie. :)
źródło
W PostGIS dostępna jest dedykowana funkcja do łączenia linii
http://www.postgis.org/docs/ST_LineMerge.html
źródło
W GRASS GIS spójrz na v.build.polilines
źródło