Agreguj linie na podstawie odległości między segmentami

12

Mam mapę bazową VectorTile , którą optymalizuję (pracuję nad zmniejszeniem wielkości poszczególnych kafelków), głównym kawałkiem wielkości kafelków są dane drogowe (geometria i atrybuty). Pracuję nad uproszczeniem poszczególnych geometrii dróg w oparciu o poziom powiększenia i agregacją dróg również w oparciu o poziomy powiększenia.

Drogi są przechowywane w tabeli Postgis (osobna tabela dla każdego poziomu powiększenia) i chcę agregować drogi na podstawie poziomu powiększenia, przy którym będą wyświetlane. Na przykład w tabeli Zoom Level 5 chcę agregować drogi znajdujące się w pewnej odległości od siebie i utworzyć jedną linię dla odcinków drogi: wprowadź opis zdjęcia tutaj

Ponieważ nie można rozróżnić poszczególnych dróg na tym poziomie powiększenia: wprowadź opis zdjęcia tutaj

Jak mogę agregować geometrię drogi na podstawie odległości między odcinkami drogi?

PS: Pracuję nad PostGIS i QGIS w systemie Linux, ale jestem otwarty na rozwiązania wykorzystujące dowolną platformę lub technologię Open Source

Hasan Mustafa
źródło
Czy drogi mają wspólny identyfikator, np. Dwa pasy na poziomie powiększenia 5 na A50 są reprezentowane przez dwie linie, ale na poziomie 4 przez jedną linię i wszystkie mają atrybut „A50”?
AnserGIS
Są reprezentowane przez dwie linie na wszystkich poziomach powiększenia. Autostrady i autostrady będą miały wspólny atrybut, taki jak „M-2” dla autostrad.
Hasan Mustafa

Odpowiedzi:

5

Możesz spróbować poszukać w tej opcji systemu operacyjnego, Skeletron , to:

uogólnia zbiory linii do określonego poziomu powiększenia sferycznego merkatora i precyzji pikseli, używając bufora wielokątów i diagramu voronoi

Opiera się na pracy Alnoora Ladaka i Roberto B. Martineza z 1996 r., „Zautomatyzowane wyprowadzanie centrów dróg o wysokiej dokładności Thiessen Polygons Technique”

Wymagane są pewne zależności:

Wymagane zależności:
- qhull binary ( http://www.qhull.org )
- foremna 1.2+ ( http://pypi.python.org/pypi/Shapely )
- pyproj ( http://code.google.com/p / pyproj )
- networkx 1.5+ ( http://networkx.lanl.gov )
- StreetNames 0.1+ ( https://github.com/nvkelso/map-label-style-manual/tree/master/tools/street_names )

Uwaga: jest to starszy model / narzędzie, które można zastosować, jako odniesienie do zbadania.

whyzar
źródło
1
Myślę, że skeletron może być dobrym rozwiązaniem, ale twoja odpowiedź to po prostu kopia przeszłości pliku readme, a link do strony internetowej esri jest martwy. Oto link do pokazania, co robi z mapami: kartographie.geo.tu-dresden.de/downloads/ica-gen/workshop2004/… . wyglądają naprawdę świetnie, ale kiedy próbuję go użyć, nie wiedziałem, jak go używać. Nie znalazłem dokumentacji oprócz niektórych łapówek za pomocą komendy use lub setup.py --help ... Jeśli ktoś wyjaśni, jak korzystać z tej biblioteki, daję mu nagrodę.
Hugo Roussaffa - GeoDatup
Również wykorzystuje drogi OSM, ponieważ o ile widzę, chcę rozwiązania, które może działać na każdym rodzaju linii. Mimo to uwielbiam naukę, która za tym stoi, chciałbym zastosować to również w innych scenariuszach.
Hasan Mustafa
Zaktualizowałem swój wpis, aby odzwierciedlić twoje komentarze, dziękuję za opinie.
whyzar
4

ArcGIS jest najprostszy, jeśli w ogóle jest opcją. Wiem, że OP określa system operacyjny, ale wspominam o tym, ponieważ opcje systemu operacyjnego po prostu nie wyglądają bardzo pomocne w porównaniu do: http://resources.arcgis.com/en/help/main/10.1/index.html#/Merge_Divided_Roads/00700000000w000000 /

Odpowiedzi na to pytanie dają kilka opcji Open Source: Jak połączyć / zwinąć pobliskie i równoległe linie drogowe (np. Dwujezdniową) w jedną linię?

Jeśli kodujesz, możesz obliczyć średnią pozycję współrzędnych na podstawie wierzchołków, jeśli nie, to:

  1. buforuj drogi za pomocą opcji „scal wszystko” na wyjściu.
  2. Uzyskaj środkową linię wielokąta
  3. Podziel linie na skrzyżowaniach za pomocą JUMP Split Lines na przecięciu innych linii
  4. Przestrzenne Dołącz ponownie atrybuty

Wydaje się, że nie ma dobrego systemu operacyjnego równoważnego z narzędziem ArcGIS „Polygon to Center line”. Mogę zasugerować:

za. Utwórz diagram voronoi i weź szkielet.
b. Utwórz euklidesowy raster odległości i wyodrębnij środkową wartość i przekonwertuj na linię

... prawdopodobnie także inni.

Wreszcie, w zależności od skali i zastosowania ... warto też po prostu usunąć jedną z dwóch linii - czy niedokładność ma znaczenie?

AnserGIS
źródło
Opcja ArcGIS wygląda dobrze, dam jej szansę, ale wolałbym rozwiązanie systemu operacyjnego. Obliczanie średniej pozycji współrzędnych na podstawie wierzchołków to moja strategia rezerwowa. Wypróbuję wszystkie wymienione przez Ciebie metody i zobaczę, czy one działają dla mnie, dzięki!
Hasan Mustafa
Narzędzie ArcGIS, „Merge Divided Roads (Cartography)”, jest dokładnie tym, czego szukam, ale cały proces, który wykonuję, odbywa się w systemie Linux, przy użyciu Postgres i QGIS, aby użyć narzędzia, którego potrzebuję, aby przejść do systemu Windows .
Hasan Mustafa