API QGIS

Objectif : se familiariser avec l'API au travers de la console Python de QGIS

QGIS Python API documentation https://qgis.org/pyqgis/master/index.html

Travail dirigé

Objectif : découvrir les instructions pour extraire la représentation WKT des géométries d'une couche

Well-known text (WKT) text markup language for representing vector geometry https://en.wikipedia.org/wiki/Well-known_text

Découverte de la console

La console Python : après création d'un projet vide, la console s'active par le menu Plugins

elle permet d'exécuter une par une des commandes et d'en voir le résultat, par exemple :

print('QGIS speaking!')

print('Projet pathname: ' + QgsProject.instance().fileName()) # pour un projet ouvert et sauvegardé

L'éditeur de la console : s'ouvre avec l'icône qui va bien dans la toolbar de la console (petit crayon)

elle permet en un tout d'écrire, ouvrir, enregistrer, exécuter, commenter un script complet, par exemple

# pour une couche chargée et sélectionnée dans la table des couches
layer = iface.activeLayer()
print('Layer name: ' + layer.name())
print('Feature count: ' + str(layer.featureCount()))

la méthode activeLayer renvoie une référence sur l'objet QgsVectorLayer sélectionné dans la table des couches

on peut alors en afficher des caractéristiques (son nom, le nombre d'entités géographiques, etc)

Représentation WKT

la méthode getFeatures renvoie un itérateur d'entités

on peut alors les parcourir et afficher des caratéristiques d'entités/QGSFeature

layer = iface.activeLayer();
for feature in layer.getFeatures():
print(feature.id())

une entité porte des attributs

layer = iface.activeLayer()
ft0 = layer.getFeature(0) # renvoie l'entité d'ID 0
print(ft0.fields().names()) # affiche les noms de attributs de l'entité
print(ft0.attribute('NAME')) # affiche la valeur de l'attribut NAME de l'entité

une entité porte une géométrie

layer = iface.activeLayer()
ft0 = layer.getFeature(0)
print(ft0.geometry().asWkt(7)) # 7 pour la précision décimale

la méthode asWkt permet d'extraire une représentation au format WKT de la géométrie (ex. Point (6.6114256 46.796648))

Well-known text (WKT) text markup language for representing vector geometry https://en.wikipedia.org/wiki/Well-known_text

Ecriture dans un fichier

Pour ouvrir un fichier en écriture :

output = open('/home/olivier/tmp/wkt.txt','w')

Pour écrire dans le fichier :

layer = iface.activeLayer()
ft0 = layer.getFeature(0)
output.write(ft0.geometry().asWkt(7))

Pour fermer le fichier et vider le buffer d'écriture

output.close()