Joindre des attributs à partir du point le plus proche dans QGIS?

29

J'ai deux couches avec des points, appelez-les A et B, chacune avec des attributs différents.

Pour chaque point de l'IA, vous voulez joindre tous les attributs du point le plus proche en B.

Idéalement, cela comprendrait également un champ mesurant la distance entre les deux points.

Je sais comment cela dans ArcGIS: cliquez avec le bouton droit sur la couche A> joint et relie> joint, puis joignez les données en fonction de l'emplacement spatial et choisissez de joindre les attributs à partir du point le plus proche.

Je n'ai pas pu trouver de fonctionnalités similaires dans QGIS. Des pointeurs?

Fred
la source

Réponses:

26

En utilisant "Distance Matrix", vous pouvez calculer le point le plus proche. Assurez-vous que les deux couches sont dans le même CRS! Ensuite, vous pouvez charger les résultats et les utiliser pour joindre les tables A et B.

Dans "Matrice de distance", choisissez: "Matrice de distance linéaire" et "utilisez uniquement les k points cibles les plus proches: 1"

entrez la description de l'image ici

Chargez le CSV en utilisant "Ajouter un calque vectoriel" et joignez les calques dans les propriétés du calque du calque A - onglet de jointure.

entrez la description de l'image ici

Et le résultat:

entrez la description de l'image ici

obscur
la source
Si vous voulez avoir les distances entre les points dans une couche en utilisant la matrice de distance, vous devez changer k = 2, à cause de ce problème connu: hub.qgis.org/issues/4761
Celia
1
@underdark Il semble que cette solution ne fonctionne plus. Je peux créer le matrix.csv et le joindre à ma première couche. Dans votre exemple, vous avez ajouté une deuxième jointure où vous attachez la deuxième couche à la première, en fonction de l'ID cible de la matrice. Mais les champs joints ne me sont pas affichés dans la boîte de dialogue, donc je ne peux pas sélectionner le TargetID. Bien sûr, je peux d'abord enregistrer_comme la couche, puis faire la deuxième jointure ...
Bernd V.
13

Le plugin NNJoin devrait faire le travail. Pour chaque entité de la couche en entrée, elle ajoute tous les attributs de l'entité la plus proche dans la couche de jointure et ajoute également un attribut de distance avec la distance à cette entité.

Håvard Tveite
la source
Fonctionne parfaitement. Plus rapide que la réponse acceptée. Notez que la réponse acceptée est à partir de 2011.
juminet
Au moins, aujourd'hui est bien meilleur que la réponse acceptée. Beaucoup plus rapide.
cag
4

Si vous pouvez vivre en joignant simplement un seul attribut de votre couche "B", jetez un œil à l'outil "Hub Distance" du plugin mmqgis .

Si vous avez besoin du reste des attributs "B", vous devriez alors être en mesure de joindre le reste de vos attributs "B" à cette couche.

Vous pouvez également éventuellement générer des lignes de A à B si vous le souhaitez. Cela est utile pour visualiser les distances et les directions entre les entités associées.

RyanDalton
la source
0

Une autre approche utilisant le plugin refFunctions .

(1) Exemple de jeu de données

entrez la description de l'image ici

(2) Ouvrez une table attributaire de la couche qui a plus de fonctionnalités ( points_bcouche dans cet exemple) afin qu'aucune paire ne soit manquée. Créez de nouveaux champs.

  • Champ ID de l'autre couche: geomnearest('points_a', 'id_a')
  • Champ de distance des paires détectées: geomnearest('points_a', '$distance')

entrez la description de l'image ici

Kazuhito
la source
-6

Utilisation de QGIS 1.7 Vector> Gestion des données> Join Attributes by Location

entrez la description de l'image ici

Mapperz
la source
3
J'y ai pensé aussi, mais quand je l'ai testé, cela ne fonctionnait que pour les correspondances exactes, telles que le point-polygone. Il n'a pas trouvé le point le plus proche d'un autre point. Testé en v1.7
RyanDalton
1
Je n'ai aucun match. Cela ne fonctionne pas.
Fred