L’objectif de cet exercice est de continuer à se familiariser avec :
la manipulation des couches dans l’interface de QGIS
la réalisation de géotraitements
Ouvrir QGIS.
Ouvrir la console Python.
Ajouter la couche Canal_Furon.shp
et la couche COMMUNES.shp
et obtenir l’objet Python
correspondant à chacune des couches.
furon = QgsProject.instance().mapLayersByName("Canal_Furon")[0]
communes = QgsProject.instance().mapLayersByName("COMMUNE")[0]
La couche Canal_Furon.shp
ne contient qu’une entité, on accède directement à sa géométrie de la façon suivante :
ft_furon = list(furon.getFeatures())[0]
geom_furon = ft_furon.geometry()
Q1. Quel est le type de l’objet geom_furon
?
Solution
print(type(geom_furon))
# Il s'agit d'un objet de type `QgsGeometry`.
Q2.Étant-donné les deux couches d’informations dont on dispose, quel prédicat spatial peut-on utiliser pour répondre à la question suivante : Quelle sont les communes traversées par le Canal du Furon ?
Solution
# On peut utiliser le prédicat spatial `intersects`.
Q3. Comment ce problème pourrait-il être formulé d’un point de vue algorithmique ?
Solution
Soit L une liste vide
Pour chaque entité FT de la couche communes :
Si la geometrie de FT intersecte la géometrie du cours d’eau :
Ajout du nom de FT à la liste L.
Q4. Créer une liste qui contient le nom des communes traversées par le canal du Furon.
Les objets QgsGeometry
disposent d’une méthode buffer qui retourne une nouvelle QgsGeometry
.
On peut créer une zone tampon de 250m autour du cours d’eau de la manière suivante :
geom_buffer = geom_furon.buffer(250., 8)
Q5. Quelle type de géométrie est obtenu en résultat ? Écrivez l’instruction qui permet d’afficher cette information.
Q6. Créer une nouvelle liste contenant le nom des communes qui croisent cette zone tampon. Combien sont-elles ?
Bien que nous aillons pu manipuler la zone tampon précédemment créée, elle n’a pas encore été ajoutée à la carte. En effet cette géométrie n’appartient pour l’instant à aucune entité ni à aucune couche.
Q7. Quelles étapes peuvent-être mises en oeuvres pour afficher cette zone sur la carte ? Écrivez le code nécessaire créer une nouvelle couche contenant cette zone tampon et pour l’ajouter sur la carte.
Q8. En utilisant les éléments vus précédemment, la documentation PyQgis ainsi que les ressources présentes sur le Web :
1) Créer une nouvelle sélection sur la couche des communes : celles qui intersectent la couche de la zone tampon créée dans la question précédente (les entités sélectionnées doivent s’afficher en jaune sur la carte)
2) Sauvegarder uniquement les entités sélectionnés dans une nouvelle couche au format Shapefile.
Déjà terminé !?
Faites vérifier vos résultats.
Prenez connaissance de la documentation de PyQgis sur la communication avec l’utilisateur : Communicating with the user. Testez et modifiez les différents exemples qui sont proposés (jusqu’à la partie 13.2. Showing progress) de façon à bien les comprendre : ces aspects seront utiles si vous souhaitez développer un plugin pour QGIS en Python.
Footnotes