Ich habe ein Shapefile (bestehend aus europäischen Hauptstraßen) mit ungefähr 250.000 Segmenten, die ich für das Pgrouting vereinfachen muss. Aber ich kann anscheinend keinen Weg finden, das richtig zu machen.
So sieht es aus:
und so sollte es aussehen:
Ich muss irgendwie jeden Punkt der Linien entfernen, der mit weniger als 3 Linien verbunden ist (kein Schnittpunkt), während die topologischen Verbindungen zwischen den verbleibenden Punkten erhalten bleiben. Wenn jemand eine Idee hat, wäre es sehr dankbar!
Freundliche Grüße
BEARBEITEN: Ich habe versucht, die Idee von @dkastl zu implementieren, und es ist mir gelungen, nur die nicht benötigten Knoten (Knoten mit nur 2 benachbarten Linestrings) mit dem folgenden Code aus meinem Netzwerk zu holen (Netzwerkgenerierung aus dem Blog von underdark http://underdark.wordpress.com) / 2011/02/07 / a-Anfänger-Leitfaden-zum-pgrouting / ):
SELECT * FROM
(SELECT tmp.id as gid, node.the_geom FROM
(SELECT id, count(*) FROM network
JOIN node
ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
GROUP BY id ORDER BY id) as tmp
JOIN node ON (tmp.id = node.id)
WHERE tmp.count = 2) as unn_node;
Jetzt muss ich nur noch die Linien zusammenführen. Ich habe jedoch keine Ahnung wie. Ich stelle mir vor, es muss eine Schleife sein, die für jede Zeile des Ergebnisses der obigen Abfrage die benachbarten Zeilen erhält und sie zusammenführt. Dann würde das Netzwerk vollständig neu aufgebaut und der Vorgang wiederholt, bis die obige Abfrage ein leeres Ergebnis zurückgibt.
Antworten:
Sie sollten auf jeden Fall einen Ramer-Douglass-Peucker-Filter auf Ihre Linien anwenden . Es ist in PostGIS als ST_Simplify- Funktion verfügbar . Die Version mit Topologieerhaltung kann für Ihren Fall von Interesse sein. Viel Glück!
quelle