Ich möchte mehrere Punkte an einer Linie oder Linien innerhalb einer Ebene ausrichten, wobei eine bestimmte Toleranz oder ein Puffer um die Linienobjekte verwendet wird. Bitte beachten Sie die beigefügte Beispielskizze.
In diesem Beispiel befinden sich die Punkte, die der Linie im VOR dem Bild am nächsten liegen, innerhalb von 5 Karteneinheiten der Linie, während die äußersten Punkte mehr als 10 Karteneinheiten entfernt sind. Ich möchte die nächstgelegenen Punkte auf der nächsten Linie einrasten lassen und dabei eine Toleranz von 5 Karteneinheiten verwenden, um das Ergebnis im AFTER-Bild zu erzielen.
Antworten:
In der (unveröffentlichten) QGIS 3.0-Version ist hierfür ein Tool integriert. Sie können einen nächtlichen Schnappschuss von der QGIS-Website erhalten, um diesen im Voraus zu testen.
Um dies zu tun:
Hier ist das Ergebnis, bei dem die ursprünglichen Punkte als "x" und die eingerasteten Punkte als grüne Punkte angezeigt werden. Ich habe hier eine Toleranz verwendet, damit nur einige der Eingabepunkte erfasst werden.
quelle
Dies kann mit PyQGIS geleistet werden . Für die nächste Situation:
Der folgende Code wurde unter Berücksichtigung einer Toleranz von 5 Karteneinheiten in der Python-Konsole von QGIS ausgeführt:
Es wurde eine Speicherschicht erzeugt, in der Punkte gemäß der zuvor betrachteten Toleranz von 5 Karteneinheiten und einem senkrechten Pfad zur Linie gefangen wurden.
quelle
Sie können dies auch im Feldrechner mit dem refFunctions-Plugin tun. Mit dem Feldrechner können Sie eine Ebenengeometrie sowie Felder aktualisieren. Mit refFunctions erhalten Sie eine "Geomdistance" -Funktion, mit der Sie die nächste Linie innerhalb einer bestimmten Entfernung finden können (oder "Geomnearest", wenn Sie keinen Schwellenwert möchten). Sie geben ein Attribut oder die Geometrie zurück, und die Funktion "next_point" findet die nächstgelegene Punkt auf eine bestimmte Geometrie. Ordnen Sie sie wie folgt an, um neue Geometrien für Ihre Punktebene zu berechnen:
closest_point(geom_from_wkt(geomdistance('snap_lines','$geometry',10)) , $geometry)
Anstatt die Geometrie direkt zu aktualisieren, können Sie stattdessen ein Feld mit der gefangenen Geometrie berechnen. Ich speichere mehrere Geometrien zum Einrasten von Durchlasspunkten an verschiedenen Stream-Ebenen und kann die Punktgeometrie im Feldrechner problemlos aktualisieren, je nachdem, welche Stream-Linien ich verwenden muss.
Dies hat einige Einschränkungen: Beide Ebenen müssen dasselbe CRS haben. Die Geomdistance-Funktion gibt einen Fehler aus, wenn Sie mehr als 100.000 Punkte haben. Sie können diese Grenze jedoch ändern, wenn Sie die Plugin-Datei refFunctions bearbeiten.
quelle