Joignez les attributs de la couche de points et de lignes par emplacement (distance la plus proche) dans QGIS


13

Mon problème est le suivant: j'ai un shp de ligne (couche cible) et un shp de point (couche de jointure). le second (couche de points) contient un attribut que je veux joindre à une couche de lignes basée sur la distance la plus proche de la ligne. Les points et les lignes ne se croisent pas

Je peux le faire avec ArcGIS et la jointure spatiale (option de correspondance: la plus proche), mais je ne sais pas comment y parvenir dans QGIS.


3
Il existe un outil pour faire Join by location mais il n'a pas d'option "le plus proche". Je ne sais pas s'il existe une solution de contournement. En général, veuillez évaluer pour soutenir le développement de vos options / outils préférés manquants, c'est également de cette façon que les utilisateurs peuvent aider ce logiciel à se développer.
Giovanni Manghi

Réponses:


8

Je ne pense pas qu'il existe une fonction QGIS «de base» pour cela. Cependant, installez le plugin MMQGIS et utilisez l'outil 'distance du hub'. Choisissez vos points en tant que couche "Points source" et vos lignes en tant que "Couche de concentrateurs de destination" et définissez "Type de forme de sortie" sur "Ligne vers concentrateur". Cela vous donnera un fichier de formes de lignes (avec longueur) qui rejoignent les entités les plus proches. Idéalement, il ajoute également l'ID de l'entité la plus proche à la table attributaire.

Edition / Commentaire: Cette approche fonctionne bien s'il y a moins de points que de lignes, ou bien une situation ligne à point un à un. Avoir plus de points que de lignes complique les choses. L'outil 'Hub Distance' ajoute l'ID de l'entité linéaire à la table attributaire de points en tant que 'HubName' ainsi que la distance entre le point et le centre de la ligne en tant que 'HubDist'. S'il y a plus de points que de lignes, un travail supplémentaire est nécessaire pour déterminer au sein de chaque sous-ensemble de points (ces enregistrements multiples liés à chaque hub de ligne) lequel est le plus proche de chaque ligne, et / ou qui est un avec l'ensemble souhaité de attributs à joindre à la ligne.


cela devrait être marqué comme la réponse, sous réserve d'une modification mineure des "lignes" v "points"
Willy

1
La «distance au moyeu» n'est pas l'outil approprié si la «distance la plus proche de la ligne» est le critère. Le code mmqgis révèle que la distance du moyeu utilise une approximation de la géométrie du «moyeu». Les calculs de distance (mmqgis_distance) prennent deux points comme paramètres. Voici le code qui fait l'approximation de la géométrie du moyeu dans mmqgis_library.py: "feature.geometry (). BoundingBox (). Center ()". Cela signifie que le centre du cadre de délimitation de la géométrie est utilisé à la place de la géométrie réelle. Donc, si la «distance la plus proche de la ligne» doit être le critère, GRASS v.distance ou le plugin NNJoin sont plus appropriés.
Håvard Tveite

5

La fonction GRASS v.distance peut être utilisée pour cela. Dans QGIS, vous pouvez accéder à la fonction via le plugin GRASS (la version de traitement ne fonctionne pas actuellement). Le plugin NNJoin QGIS peut être une alternative plus simple.


3

Le plugin NNJoin ne m'a jamais laissé tomber et fonctionne bien avec de grands ensembles de données .

Plugins> Installer: NNJoin> NNJoin> choisissez la couche d'entrée et joignez la couche> Cliquez ensuite sur joindre.

Examinez les résultats de la nouvelle couche de sortie avec la table attributaire. Attention: assurez-vous que vos deux couches utilisent la même projection spatiale, sinon vos résultats seront vides.


2

En 2019, cela peut être possible avec l'outil QGIS 3 Zanzibar 'Joindre les attributs par le plus proche'. Cet outil vous permet de trouver l'entité la plus proche et de joindre les attributs sélectionnés. Il est également possible d'effectuer une jointure un-à-plusieurs, si vous spécifiez la distance maximale et les voisins les plus proches max.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.