Les jointures entre tables ou entre couches ne posent pratiquement pas de problème du moment où on a une correspondance unique entre les deux éléments qu’on essaye de joindre. A un enregistrement de la table ou couche de référence, correspond un ou aucun enregistrement de la table ou couche à joindre. La table ou couche résultante de la jointure peut être traitée comme tout autre table ou couche.
Les choses se compliquent toujours quand la table ou couche à joindre contient plus d’un enregistrement correspondant au même enregistrement de référence. On parle alors de relation 1-n. Nous verrons ici une option cachée qui permet de répondre à une partie de questions qu’on se pose dans le cas des jointures spatiales de type 1-n.Tout d’abord prenons un exemple simple.
On a une couche de zones protégées, par exemple les ZNIEFF (Zones naturelles d’intérêt écologique, faunistique et floristique).
Vous souhaitez savoir quelles communes sont concernées par chaque zone présente dans la couche ZNIEFF.
Le plus simple ce serait de pouvoir ajouter un attribut à la table ZNIEFF contenant la liste des communes concernées chaque zone
Nous avons donc la couche ZNIEFF et une couche Communes
La jointure disponible dans le menu contextuel de la couche dans ArcMap ne permet que le calcul du nombre de communes qui intersectent la zone.
Nous disposons de l’outil Jointure spatiale de la boîte à outils Analyse -> Superposition
Cet outil possède une option qui permet de faire des jointures uniques ou multiples. Mais si nous exécutons l’outil avec l’option multiple :
le résultat obtenu est le suivant:
La zone avec l’identifiant 142 (Target_id) se trouve à cheval des communes de Saint-Eloy et du Tréhou. L’outil produit en sortie deux polygones identiques, un avec les attributs de Saint-Eloy et l’autre avec les attributs du Tréhou.
Mais ce n’est pas ce que nous voulons. Pour savoir quelles sont les communes concernées par cette zone ont est obligés de faire une requête. Ce que nous voulons c’est un attribut qui contienne la liste des communes.
C’est là où l’option cachée va nous permettre de résoudre notre problème.
Nous utiliserons l’outil jointure spatiale, mais contrairement à ce que l’on pouvait penser, nous allons laisser l’option à une à une (one-to-one) car c’est en réalité ce que nous voulons : une zone en entrée doit produire une zone en sortie, et pas plusieurs comme dans ce que nous venons de faire.
Par contre, c’est au niveaux des champs en sortie que nous allons changer quelque chose.
Dans les attributs de la couche commune nous avons un champ qui contient le nom de la commune : NOM_COM. Si vous cliquez-droit sur ce champ dans la liste des champs en sortie, vous avez un menu contextuel avec une option : Propriétés. C’est ce champ que nous voulons utiliser pour créer une liste de communes.
Vous aurez alors la fenêtre de propriétés.
- Ayez soin de mettre une taille suffisante pour contenir la liste résultante.
- Dans le champ Règle de fusion, sélectionnez Jointure.
- Comme Séparateur, sélectionnez la virgule.
- Exécutez l’outil, et le résultat est le suivant:
Maintenant l’outil a créé un seul polygone par zone en entrée et le champ NOM_COM contient la liste des communes qui intersectent cette zone, séparées par des virgules.
Seul problème de cette astuce: l’option de fusion Jointure n’est disponible que pour les champs de type Texte. Alors selon le format de votre table en sortie vous serez limité dans la longueur du champ:
- si vous travaillez avec des shapefiles, le résultat est limité à 254 caractères.
- si vous travaillez avec une geodatabase personnelle, oubliez de travailler avec la version actuelle d’ArcGis (10.3), ça plante! L’outil essaye de créer un shape dans une base Access…
- si vous travaillez avec un geodatabase fichier, la limite de longueur est de 2 147 483 647 caractères… toujours suffisants! Par contre la taille du champ c’est vous qui la fixez, avant d’exécuter l’outil. Si vous ne donnez pas assez de place pour la liste en sortie vous aurez un message d’erreur et l’arrêt de l’exécution de l’outil.