Aggregierte Linien basierend auf dem Abstand zwischen Segmenten


12

Ich habe eine VectorTile-Grundkarte , die ich optimiere (bei der Reduzierung der Größe einzelner Kacheln). Der Hauptteil der Kachelgröße sind Straßendaten (Geometrie und Attribute). Ich arbeite daran, die einzelnen Straßengeometrien basierend auf der Zoomstufe zu vereinfachen und die Straßen auch basierend auf Zoomstufen zu aggregieren.

Die Straßen werden in einer Postgis-Tabelle gespeichert (individuelle Tabelle für jede Zoomstufe), und ich möchte die Straßen basierend auf der Zoomstufe aggregieren, in der sie angezeigt werden. Beispiel: In der Tabelle Zoomstufe 5 möchte ich die Straßen, die sich in einem bestimmten Abstand voneinander befinden, zusammenfassen und für die Straßensegmente eine einzelne Linie erstellen: Bildbeschreibung hier eingeben

Da es nicht möglich ist, einzelne Straßen in dieser Zoomstufe zu erkennen: Bildbeschreibung hier eingeben

Wie kann ich die Straßengeometrien basierend auf dem Abstand zwischen Straßensegmenten aggregieren?

PS: Ich arbeite an PostGIS und QGIS unter Linux, bin aber offen für Lösungen, die auf einer beliebigen Open Source-Plattform oder -Technologie basieren


Haben die Straßen eine gemeinsame ID, z. B. werden zwei Fahrspuren in Zoomstufe 5 auf der A50 durch zwei Linien dargestellt, in Stufe 4 jedoch durch eine Linie, und alle haben "A50" als Attribut?
AnserGIS

Sie werden in allen Zoomstufen durch zwei Linien dargestellt. Sie Autobahnen und Schnellstraßen haben das gemeinsame Attribut wie "M-2" für die Autobahnen.
Hasan Mustafa

Antworten:


5

Sie könnten versuchen, in dieser Betriebssystemoption, Skeletron , nachzuschauen :

verallgemeinert Liniensammlungen auf eine bestimmte kugelförmige Mercator-Zoomstufe und Pixelgenauigkeit unter Verwendung eines Polygonpuffers und eines Voronoi-Diagramms

Es basiert auf einer Arbeit von Alnoor Ladak und Roberto B. Martinez aus dem Jahr 1996, "Automatisierte Herleitung von Straßenmittellinien mit hoher Genauigkeit nach der Thiessen-Polygontechnik".

Es sind einige Abhängigkeiten erforderlich:

Erforderliche Abhängigkeiten:
- qhull binary ( http://www.qhull.org )
- shapely 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 )

Hinweis: Dies ist ein älteres Modell / Werkzeug, das angewendet werden kann, nur als Referenz für Sie zu erkunden.


1
Ich denke, Skeletron könnte der richtige Weg sein, aber Ihre Antwort ist nur eine Kopie der Readme-Datei und der Link zur esri-Website ist tot. Hier ein Link, um zu zeigen, was es für Karten tut: kartographie.geo.tu-dresden.de/downloads/ica-gen/workshop2004/… . das sieht wirklich toll aus, aber als ich es zu benutzen versuchte, wusste ich nicht, wie ich es benutzen sollte. Ich habe keine Dokumentation gefunden, außer ein paar Bestechungsgelder mit dem Befehl use oder setup.py --help ... Wenn jemand erklärt, wie man diese Bibliothek benutzt, gebe ich ihm das Kopfgeld.
Hugo Roussaffa - GeoDatup

Soweit ich sehen kann, werden auch OSM-Straßen als Eingabe verwendet. Ich möchte eine Lösung, die auf jedem Linientyp funktioniert. Trotzdem liebe ich die Wissenschaft, die dahinter steckt, und würde sie gerne auch auf andere Szenarien anwenden.
Hasan Mustafa

Ich habe meine Beiträge aktualisiert, um Ihre Kommentare widerzuspiegeln. Ich freue mich über das Feedback.
Whyzar

4

ArcGIS ist am einfachsten, wenn es überhaupt eine Option ist. Ich weiß, dass das OP das Betriebssystem spezifiziert, aber ich erwähne dies, da die Betriebssystemoptionen im Vergleich zu http://resources.arcgis.com/en/help/main/10.1/index.html#/Merge_Divided_Roads/00700000000w000000 nicht sehr hilfreich sind /

Antworten auf diese Frage geben einige Open Source-Optionen: Wie kann ich nahe gelegene und parallele Straßenlinien (z. B. eine zweispurige Straße) zu einer einzigen Linie zusammenführen / zusammenfassen?

Wenn Sie codieren, können Sie die mittlere Koordinatenposition auf Eckpunktbasis berechnen, wenn nicht, dann:

  1. Puffern Sie die Straßen mit der Option "Alle zusammenführen" in der Ausgabe.
  2. Ermitteln Sie die Mittellinie des Polygons
  3. Teilen Sie die Linien an Kreuzungen mit JUMP Split Lines am Schnittpunkt anderer Linien
  4. Räumlich Verbinden Sie die Attribute wieder mit

Es scheint auch kein gutes Betriebssystem zu geben, das dem ArcGIS-Werkzeug "Polygon zur Mittellinie" entspricht. Ich könnte vorschlagen:

ein. Erstelle ein Voronoi-Diagramm und nimm das Skelett.
b. Erstellen Sie ein euklidisches Entfernungsraster, extrahieren Sie den zentralen Wert und konvertieren Sie ihn in eine Linie

... wahrscheinlich auch einige andere.

Schließlich kann es je nach Maßstab und Anwendung auch sinnvoll sein, nur eine der beiden Zeilen zu löschen - spielt die Ungenauigkeit eine Rolle?


Die ArcGIS-Option sieht gut aus. Ich werde sie ausprobieren, bevorzuge jedoch eine OS-Lösung. Die Berechnung der mittleren Koordinatenposition auf Eckpunktbasis ist meine Ausweichstrategie. Ich werde alle von Ihnen aufgelisteten Methoden ausprobieren und sehen, ob sie für mich funktionieren, danke!
Hasan Mustafa

Das ArcGIS-Tool "Merge Divided Roads (Cartography)" ist genau das, wonach ich suche, aber die gesamte Verarbeitung, die ich mache, erfolgt unter Linux mit Postgres und QGIS, um das Tool zu verwenden, das ich für den Wechsel zu Windows benötige .
Hasan Mustafa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.