Intersection
Maintenant vous savez :
- Exporter des cartes en série
- Intersecter des couches géographiques
Et bien ajoutez donc dans le sous-titre de vos cartes la commune où se trouve le sommet sélectionné.
À vous de jouer !
Vous allez devoir utiliser la couche des IRIS (disponible en pièce jointe de cet article) et l'intersecter avec vos sommets :
... import os import shutil ... monCheminDeBase = r'C:\\Users\\georg\\Downloads\\' ... project = QgsProject.instance() ... peaks = QgsVectorLayer(monCheminDeBase + 'peaks_selection/peaks_selection.shp', 'Sommets', 'ogr') iris = QgsVectorLayer(monCheminDeBase + 'iris/iris.shp', 'IRIS', 'ogr') ... QgsProject.instance().addMapLayer(peaks) QgsProject.instance().addMapLayer(iris) ... #Intersect peaks and IRIS peaks_iris_path = _peaks_iris + r'\\peaks_iris.shp' processing.run('qgis:intersection', { \ "INPUT": peaks, \ "OVERLAY": iris, \ "INPUT_FIELDS": ["OSM_ID", "NAME", "OTHER_TAGS"], \ "OVERLAY_FIELDS": ["CODE_IRIS", "NOM_COM"], \ "OVERLAY_FIELDS_PREFIX": "", \ "OUTPUT": peaks_iris_path}) # Remove layers project.removeMapLayer(peaks) project.removeMapLayer(iris) # Open the new intersected layer peaks_iris = QgsVectorLayer(peaks_iris_path, "Sommets", "ogr") project.addMapLayer(peaks_iris) # Register layer mes_sommets = project.mapLayersByName("Sommets")[0]
Puis appeler le nouveau champ disponible (NOM_COM
) et modifier la chaîne formatée qui remplit le sous-titre :
... commune = feat['NOM_COM'] ... subtitle.setText("Identifiant OSM : {} - Commune : {}".format((str(id_peak)), (commune))) ...
Notez qu'au lieu de l'ancien %
, nous utilisons ici une méthode de formatage plus moderne (.format()
)
Attention
Puisque nous créons un shape, et que nous l'ouvrons dans QGIS, si vous souhaitez exécuter votre code plusieurs fois, il faudra retirer votre couche de votre projet après votre boucle.
Idéalement il faudrait aussi créer/recréer (et donc supprimer) le shape avant la boucle, inspirez-vous du chapitre Processing: Intersection de cet article.