GIS and Media fusion

"The explosive growth of the GeoWeb and geographic information has made GIS powerful media for the general public to communicate, but perhaps more importantly, GIS have also become media for constructive dialogs and interactions about social issues." - Sui & Goodchild

User Tools

Site Tools


geoinf18:wktconsole

This is an old revision of the document!


API QGIS

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

Travail dirigé

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

Voir aussi le dossier https://drive.switch.ch/index.php/s/jHcUvhFSRwEneES

  • avec le tutoriel de nos collègues de l'institut INSIT et utilisé lors de la HES d'été du département EC+G
  • avec la couche de points tutopoi.shp dont certaines insctructions ci-dessous sont spécifiques

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!')
import sys
print(sys.version)
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 

Ecriture dans un fichier

Documentation : https://docs.python.org/3.6/tutorial/inputoutput.html#reading-and-writing-files

  • Pour ouvrir un fichier en écriture :
output = open('/home/olivier/tmp/wkt.txt','w')
  • Pour écrire dans le fichier :
output.write('Here is one WKT formatted feature geometry:')
output.write('\n')

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()

A vous de jouer !

Assemblez les diverses étapes précédentes pour obtenir un fichier qui liste au format WKT toutes les géométries de la couche sélectionnée dans la table des couches.

On propose deux phases

  • afficher d'abord cette liste dans la console
  • écrire les éléments de la liste dans le fichier
output = open('/home/olivier/tmp/wkt.txt','w')


layer = iface.activeLayer()
for feature in layer.getFeatures():
  output.write(feature.geometry().asWkt(7))
  output.write('\n')

output.close()

Pour finir ...

Ce format WKT est simple, pratique et utilisé un peu partout. Par exemple : https://arthur-e.github.io/Wicket

geoinf18/wktconsole.1540979611.txt.gz · Last modified: 2018/10/31 10:53 by oertz