Ich habe einen Netzwerkgraphen, den ich vereinfachen muss, um die Anzahl der Kanten zu reduzieren . Die Idee wäre, Knoten, die nahe beieinander liegen, zusammenzuführen und die kurzen Verbindungskanten zu entfernen.
Wie könnte dies in PostGIS oder GRASS erreicht werden? Oder gibt es bessere Ansätze, um ein solches Netzwerk automatisch zu vereinfachen?
Ich habe die ST_SnapToGrid-Funktion bereits ausprobiert, bin aber mit den Ergebnissen nicht zufrieden (grau = Original, schwarz = Schnappschuss):
Antworten:
Das nächste, was ich bisher gesehen habe, ist folgendes:
Es schnappt die Straßen mit einer Toleranz von 5 Metern und entfernt alle Null-Längen-Linien. Es ist keine optimale Lösung, da es eher zufällig an einem Scheitelpunkt zu rasten scheint.
quelle
Hast du das GRASS v.generalize ausprobiert ?
v.generalize
Hier können Sie den Generalisierungsalgorithmus mit dem method- Attribut auswählen . Es gibt eine Menge: douglas, douglas_reduction, lang, reduction, reumann, boyle, slide_averaging, distance_weighting, chaiken, hermite, snakes, network, displacement .Und weitere Parameter wie
threshold
,degree_thresh
,angle_thresh
(je nach gewählten Algorithmus) können Sie helfen, ein genaues Ergebnis zu erhalten.Hier kommt ein Tutorial .
quelle
Ich habe das nicht getan, aber ich denke, ich kann eine Richtung vorschlagen.
ST_ModEdgeHeal führt eine Kante mit der anderen zusammen. ST_NewEdgeHeal ersetzt beide durch eine neue Kante.
Handbuch zur PostGIS-Topologie
quelle
@underdark, ich sehe, dass Sie ein Tool zum Verdichten von Linien in Sextante geschrieben haben. Daher schlage ich den folgenden Algorithmus vor, um ein "zufälliges" Fangen eines Ihrer Punkte zu vermeiden.
Wählen Sie die Liniensegmente aus, die Sie basierend auf ihrer Länge entfernen möchten.
Erstellen Sie für jedes dieser Segmente einen Punkt im Mittelpunkt
Löschen Sie das kleine Segment
Jetzt können Sie ST_Snap in PostGIS verwenden (siehe Beispiel hier )
BEARBEITEN: Beachten Sie, dass Sie in Ihrem Fall auch v.net zuerst verwenden könnten , um die Pseudoknoten zu entfernen (Knoten, der nur zwei Linien verbindet).
quelle
Weiterleitung, wie Michaël Michaud dies auf der OpenJUMP-Entwicklerliste analysiert hat:
quelle