Ich habe zwei Vektorebenen, von denen eine eine Punktebene ist, die auf "Ereignissen" durch Fernerkundung basiert, und die zweite ist eine Linienebene aus lokaler Forschung.
In meinem Fall sind dies Erdbeben und tektonische Störungen, aber ich denke, man könnte einfach "Autounfälle und Straßen" als allgemeines Beispiel wählen.
Was ich also tun möchte, ist, die Punkte auf den nächsten Punkt der Linien zu verschieben / zu kopieren, solange dieser innerhalb eines Toleranzabstands (z. B. 1-2 km oder 0.0xx °) liegt, wobei die neue Punktebene (+ attr) verschoben wird j / n).
Irgendwelche Ideen ?
Linux, QGIS 1.8
Antworten:
Veröffentlichte ein Code-Snippet (getestet in der Python-Konsole), das das Folgende tut
Bearbeiten: Ich habe gerade festgestellt, dass die @ radouxju-Methode, die closerSegmentWithContext verwendet, die gleichen Ergebnisse in weniger Codezeilen liefert. Ich frage mich, warum sie auf diesen seltsamen Methodennamen gekommen sind? hätte so etwas wie "closerPointOnGeometry" sein sollen.
So können wir formschön ausweichen und tun gerne,
quelle
hier ist ein pseudocode zum starten. Ich hoffe, dass dies hilft und dass jemand Zeit hat, vollständigen Code bereitzustellen (ich habe im Moment keinen).
Zunächst müssen Sie eine Schleife um den Punkt ausführen und die Linien auswählen, die sich innerhalb des Schwellenabstands zu jedem Punkt befinden. Dies kann mit QgsSpatialIndex erfolgen
In der ersten Schleife müssen Sie als zweites die ausgewählten Linien durchlaufen und den nächstgelegenen Punkt auf der Linie finden. Dies kann direkt basierend auf QgsGeometry :: closerSegmentWithContext erfolgen
Der dritte Schritt (innerhalb der ersten Schleife) würde darin bestehen, die Geometrie des Punkts mit der Geometrie des minDistPoint mit dem geringsten Abstand zu aktualisieren
Update mit etwas Code (auf QGIS3)
quelle