Index de l'article

Standalone

Ce chapitre est une parenthèse dans ce tutoriel pour découvrir les possibilités standalone d'utilisation de QGIS grâce à Python.

Depuis la console Python accessible depuis python-qgis.bat (sous Windows : dans OSGEO4W / bin), vous pouvez tester vos scripts en mode standalone.

Le but est de ne plus ouvrir QGIS pour réaliser nos traitements.

La console Python de votre machine Windows, ou même celle du shell d'OSGeo4W, sera insuffisante. Testez par exemple cette importation :

from qgis.core import *

Elle ne fonctionne pas, car la version Python de votre machine ne sait pas où trouver QGIS. Nous y reviendrons.

Ouvrir des shapes

Auparavant nous avons travailler sur des projets QGIS avec nos shapes préalablement ouverts. En mode standalone il vous faudra aller les chercher directement, et eventuellement gérer les projections ainsi que leur ordre d'affichage.

Vérifions déjà que nous sommes bien capables de le faire depuis QGIS. Observez l'URL d'appel d'OpenStreetMap, vous pouvez la retrouver dans ses propriétés depuis QGIS.

  1. QgsProject.instance().setCrs(QgsCoordinateReferenceSystem(4326))
  2.  
  3. urlWithParams = "type=xyz&zmin=0&zmax=19&url=http://tile.openstreetmap.org/{z}/{x}/{y}.png"
  4.  
  5. rlayer = QgsRasterLayer(urlWithParams, "OpenStreetMap", "wms")
  6. troncons_routes = QgsVectorLayer("C:/Users/Georges/Downloads/qgis/troncons_routes/troncons_routes.shp", "Routes", "ogr")
  7. sommets = QgsVectorLayer("C:/Users/Georges/Downloads/qgis/peaks/peaks.shp", "Mes sommets", "ogr")
  8. addresses = QgsVectorLayer("C:/Users/Georges/Downloads/qgis/data_BDTOPO_V3_Dep05_adresse/data_BDTOPO_V3_Dep05_adresse/ADRESSE_05.shp", "Addresses", "ogr")
  9.  
  10. QgsProject.instance().addMapLayer(addresses)
  11. QgsProject.instance().addMapLayer(troncons_routes)
  12. QgsProject.instance().addMapLayer(sommets)
  13. QgsProject.instance().addMapLayer(rlayer)
  14.  
  15. # Passer les sommets en haut des calques
  16. root = QgsProject.instance().layerTreeRoot()
  17. root.setHasCustomLayerOrder (True)
  18. order = root.customLayerOrder()
  19. order.insert(0, order.pop( order.index( sommets ) ) )
  20. root.setCustomLayerOrder( order )

Mais pour travailler en standalone, il vous faudra faire quelques importations et prendre des précautions supplémentaires :

  1. import os
  2. import datetime, requests, html, wikipedia
  3. import xml.etree.ElementTree
  4. from qgis.core import *
  5. from qgis.gui import *
  6. from qgis.utils import *
  7. from qgis.PyQt.QtGui import *
  8.  
  9. # Initialiser QGIS
  10. qgs = QgsApplication([], False)
  11.  
  12. # Cette ligne semble inutile, chercher pourquoi
  13. qgs.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
  14. qgs.initQgis()
  15. # Ces lignes également
  16. #for alg in QgsApplication.processingRegistry().algorithms():
  17. # print(alg.id(), "->", alg.displayName())
  18. if len(QgsProviderRegistry.instance().providerList()) == 0:
  19. raise RuntimeError('No data providers available.')
  20. ...
  21. qgs.exitQgis()

Essayer d'adapter votre code de génération de carte en mode standalone. En commençant par la génération d'une seule carte ce sera plus facile à déboguer. Une chose particulièrement subtile sera de parvenir à agir sur l'interface QGIS alors même qu'il n'y a plus d'interface QGIS (les fonctions de zoom par exemple).

Code complet de génération d'une carte en standalone

Vous pouvez aller plus loin en vous intéressant à la modification des variables d'environnement de votre machine. Cela vous permettra par exemple d'exécuter vos scripts depuis la version Python exécutable directement par Windows, et donc par un simple double-clic sur vos fichiers Python. Nous y reviendrons également.

  • Note personnelle : ici prévoir exposé sur les variables d'environnement et les possibilités standalone et serveur de QGIS)
  • Note personnelle : approfondir, variables d'environnement sous Windows et Ubuntu, centrer les layouts, PyGIS.
Liens ou pièces jointes
Accéder à cette adresse URL (https://hg-map.fr/extern/data/shapes/france/chemin_de_fer.zip)chemin_de_fer.zip[ ]0 Ko
Télécharger ce fichier (data_BDTOPO_V3_Dep05_adresse.zip)data_BDTOPO_V3_Dep05_adresse.zip[ ]3889 Ko
Télécharger ce fichier (data_IRIS_2019.zip)data_IRIS_2019.zip[ ]45905 Ko
Télécharger ce fichier (decathlon_france.zip)decathlon_france.zip[308 magasins Décathlon français depuis OSM le 27 décembre 2020]11 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/shapes/france/eau.zip)eau.zip[ ]0 Ko
Télécharger ce fichier (glaciers.zip)glaciers.zip[ ]231 Ko
Télécharger ce fichier (iso_iris.zip)iso_iris.zip[Des zones isochrones à 15 minutes autour de 308 POIs.]12125 Ko
Télécharger ce fichier (MasterGeom2_ProgPython_DevoirMaison.pdf)Devoir-maison[ ]422 Ko
Télécharger ce fichier (peaks.zip)peaks.zip[ ]14 Ko
Accéder à cette adresse URL (https://hg-map.fr/extern/data/shapes/france/troncons_routes.zip)troncons_routes.zip[ ]0 Ko