Suite

Jointure spatiale d'un point unique à plusieurs polygones


J'ai une couche de points que je veux joindre spatialement à une couche de polygones (apportez les attributs).

Cela fonctionne bien sauf s'il y a des polygones qui se chevauchent, si c'est le cas, l'outil de jointure spatiale QGIS ne ramènera que les entités du premier trouvé (ou une moyenne). Une moyenne ne convient pas aux attributs de texte.

Ce que je préférerais qu'il se produise, c'est que s'il y a plusieurs polygones auxquels ils peuvent être joints, cela se produira et entraînera une duplication du point. Essentiellement l'ArcGIS : join_operation = JOIN_ONE_TO_MANY

Je travaille dans QGIS 2.8+.

Content d'une solution de script/PyQGIS, car je ne pense pas qu'il existe d'outils prêts à l'emploi pour cela. Mais je préférerais ne pas avoir de solution SpatiaLite car je veux que cela reste simple pour l'utilisateur final.

En fin de compte, s'il existe une solution à ce problème que quelqu'un a déjà mise en œuvre, j'aimerais la voir. Sinon, je vais essayer de trouver la solution moi-même.


Vous avez raison (du moins pour autant que je sache) que la jointure spatiale de QGIS n'offre pas le paramètre de relation disponible dans la jointure spatiale d'ArcGIS.

Dans votre cas, puisque vous décrivez une relation plusieurs-à-un plutôt qu'un-à-plusieurs (des polygones aux points), il existe une solution de contournement. Si vous vouliez joindre de nombreux points à chaque polygone, cela ne fonctionnerait bien sûr pas, car vous auriez plus d'une valeur pour remplir le même emplacement disponible (cela nécessiterait une relation ou la duplication des polygones). Mais vous avez plusieurs emplacements à faire correspondre et seulement quelques points, donc une solution de contournement rapide consiste à dupliquer les points - à chaque fois pour chacun des polygones qu'il touche. L'outil Intersection devrait le faire.

Une fois que vous avez croisé les deux couches, vous devriez avoir un nouvel ensemble de points avec au moins un point pour chaque polygone d'intersection, et les points auront l'attribut ID des polygones qu'ils croisent. Les points qui ne se coupent pas seront bien entendu supprimés. Vous devriez alors être en mesure d'effectuer une jointure attribut/table régulière entre les deux en fonction du champ d'ID de polygone.

Notez que si vous fais avoir plusieurs correspondances de points pour un seul polygone, vous aurez des problèmes avec cette jointure et vous reviendrez là où vous avez commencé - le polygone prendra le premier point trouvé et aucun des autres. Nous avons d'autres questions pour cette situation.