Une action pour ouvrir des couches à partir des objets d'une couche

On souhaite intégrer une action dans QGis qui ouvre une couche vecteur donnée (un fichier) lorsqu'on clique sur un polygone. Les objets de la couche vectorielle utilisent un champ qui contient un nom de couche. Ce champ est nommé COUCHE.

Une action dans QGis est un évènement qui est lancé lorsqu'on clique sur un objet. QGis est très riche à ce niveau et il permet de lancer un tas d'actions différentes, allant de l'ouverture de fichiers externes à des actions de modification de l'information géographique.

Pour ajouter une action, vous devez vous rendre dans les propriétés de la couche, dans l'onglet actions. Ce que nous voulons faire est finalement assez simple: nous désirons récupérer le contenu du champ COUCHE de l'objet sur lequel on a cliqué et ouvrir, par la suite, une couche externe.

Le code qui va nous permettre de lancer cette action est finalement très simple:

layer=QgsVectorLayer('/home/mederic.ribreux/tmp/','[% "COUCHE" %]','ogr'); QgsMapLayerRegistry.instance().addMapLayer(layer)

Vous devez impérativement le coder en une seule ligne:

qgis action ouvrir couche.png

Si pouvez remarquer que la fonction QgsVectorLayer demande trois arguments: un chemin (dirname), un nom de fichier dans ce répertoire, un nom de pilote d'ouverture de couche ('ogr' ici). Si vous avez stocké l'emplacement complet du fichier dans un seul champ, vous devrez aller plus loin et utiliser quelques fonctions Python supplémentaires:

from os.path import dirname,basename;print dirname('[% "COUCHE" %]');layer=QgsVectorLayer(dirname('[% "COUCHE" %]'),basename('[% "COUCHE" %]'),'ogr'); QgsMapLayerRegistry.instance().addMapLayer(layer)