Attribute vom nächsten Punkt in QGIS verbinden?

29

Ich habe zwei Ebenen mit Punkten, die als A und B bezeichnet werden und jeweils unterschiedliche Attribute haben.

Für jeden Punkt in AI möchten Sie alle Attribute vom nächsten Punkt in B verbinden.

Idealerweise würde dies auch ein Feld einschließen, das den Abstand zwischen beiden Punkten misst.

Ich weiß, wie dies in ArcGIS geschieht: Klicken Sie mit der rechten Maustaste auf Layer A> Verknüpfungen und Beziehungen> Verknüpfungen, fügen Sie dann Daten basierend auf der räumlichen Position hinzu und wählen Sie die Verknüpfung von Attributen vom nächstgelegenen Punkt aus.

Ich konnte in QGIS keine ähnliche Funktionalität finden. Irgendwelche Hinweise?

Fred
quelle

Antworten:

26

Mit "Distance Matrix" können Sie den nächstgelegenen Punkt berechnen. Stellen Sie sicher, dass sich beide Schichten im selben CRS befinden! Anschließend können Sie die Ergebnisse laden und sie zum Verknüpfen der Tabellen A und B verwenden.

Wählen Sie in "Distanzmatrix": "Lineare Distanzmatrix" und "verwende nur die nächsten k Zielpunkte: 1"

Bildbeschreibung hier eingeben

Laden Sie die CSV mit "Vektorebene hinzufügen" und verbinden Sie die Ebenen in den Ebeneneigenschaften von Ebene A - Registerkarte "Verbinden".

Bildbeschreibung hier eingeben

Und das Ergebnis:

Bildbeschreibung hier eingeben

Underdunkel
quelle
Wenn Sie die Abstände zwischen Punkten innerhalb einer Ebene mithilfe der Abstandsmatrix berechnen möchten, sollten Sie k = 2 ändern, da dieses Problem bekannt ist: hub.qgis.org/issues/4761
Celia
1
@underdark Diese Lösung scheint nicht mehr zu funktionieren. Ich kann die matrix.csv erstellen und sie mit meiner ersten Ebene verbinden. In Ihrem Beispiel haben Sie einen zweiten Join hinzugefügt, bei dem Sie den zweiten Layer an den ersten anhängen, basierend auf der TargetID aus der Matrix. Die verknüpften Felder werden mir jedoch nicht im Dialogfeld angezeigt, sodass ich die TargetID nicht auswählen kann. Natürlich kann ich zuerst die Ebene speichern und dann den zweiten Join machen ...
Bernd V.
13

Das NNJoin Plugin sollte den Job erledigen. Für jedes Feature des Eingabe-Layers werden alle Attribute des nächstgelegenen Features im Join-Layer hinzugefügt. Außerdem wird ein Abstandsattribut mit dem Abstand zu diesem Feature hinzugefügt.

Håvard Tveite
quelle
Funktioniert perfekt. Schneller als die akzeptierte Antwort. Beachten Sie, dass die akzeptierte Antwort aus dem Jahr 2011.
Uhr
Zumindest ist heute viel besser als die akzeptierte Antwort. Viel viel schneller.
cag
4

Wenn Sie damit leben können, nur ein einziges Attribut aus Ihrem "B" -Layer zu verbinden, sehen Sie sich das "Hub Distance" -Werkzeug im mmqgis-Plugin an .

Wenn Sie die restlichen "B" -Attribute benötigen, sollten Sie in der Lage sein, die restlichen "B" -Attribute wieder mit dieser Ebene zu verknüpfen.

Optional können Sie auch Linien von A nach B generieren. Dies ist hilfreich, um die Abstände und Richtungen zwischen zugeordneten Features zu visualisieren.

RyanDalton
quelle
0

Ein weiterer Ansatz mit refFunctions Plugin.

(1) Beispieldatensatz

Bildbeschreibung hier eingeben

(2) Öffnen Sie eine Attributtabelle des Layers mit mehr Merkmalen ( points_bLayer in diesem Beispiel), damit keine Paare übersehen werden. Erstellen Sie neue Felder.

  • ID-Feld der anderen Schicht: geomnearest('points_a', 'id_a')
  • Distanzfeld der erkannten Paare: geomnearest('points_a', '$distance')

Bildbeschreibung hier eingeben

Kazuhito
quelle
-6

Verwenden von QGIS 1.7 Vector> Datenverwaltung> Attribute nach Standort verbinden

Bildbeschreibung hier eingeben

Mapperz
quelle
3
Ich habe auch darüber nachgedacht, aber als ich es ausprobiert habe, hat es nur für exakte Übereinstimmungen wie Punktpolygon funktioniert. Es wurde nicht der nächste Punkt zu einem anderen Punkt gefunden. Getestet in Version 1.7
RyanDalton
1
Ich habe keine Treffer. Das funktioniert nicht.
Fred