Introduction à QGIS Server et Python
NOTE: Pour des informations officielles, consultez la documentation de QGIS Server. Un exemple de service web
FlaskavecQgis Serverpeut être trouvé dans ce repo : https://github.com/voirinprof/qgis_docker
Introduction
QGIS Server est la déclinaison serveur de QGIS qui permet de publier des services cartographiques WMS, WFS, WCS directement à partir de projets .qgs sans développement lourd.
En combinant QGIS Server avec Python, on peut automatiser, personnaliser et créer des services SIG web dynamiques.
Pourquoi utiliser QGIS Server ?
- Simplicité : Publier un projet QGIS tel quel en tant que service web
- Normes OGC respectées : WMS 1.3, WFS 2.0, etc.
- Personnalisation avancée via plugins serveur en Python
- Mêmes capacités de rendu que le bureau QGIS
- Intégration directe avec PostGIS, GeoTIFF, et bien plus
Installer QGIS Server
Sous Ubuntu / Debian :
sudo apt-get install qgis-server
Services nécessaires :
- Serveur web (Apache, Nginx)
- FastCGI ou uwsgi pour interfacer QGIS Server et le webserver
Vérification de l’installation :
Tester l’URL locale (par exemple avec Apache) :
http://localhost/qgisserver?SERVICE=WMS&REQUEST=GetCapabilities
Si tout est bien configuré, vous obtiendrez une réponse XML décrivant vos capacités serveur.
Déployer un projet QGIS en tant que service WMS
- Préparer votre projet
.qgs:- Définissez le SCR (système de coordonnées de référence)
- Configurez les propriétés du projet (noms de couche, échelles min/max)
- Placer le fichier projet :
- Sauvegardez votre
.qgsdans un dossier accessible par le serveur (ex :/var/www/qgis/monprojet.qgs).
- Sauvegardez votre
- Appeler votre projet via l’URL :
http://localhost/qgisserver?MAP=/var/www/qgis/monprojet.qgs&SERVICE=WMS&REQUEST=GetCapabilities
Utiliser Python avec QGIS Server
Python permet de créer des extensions serveur personnalisées ou interagir avec QGIS Server. Deux grandes approches existent :
1. Créer des plugins pour QGIS Server
- Plugins identiques en structure aux plugins QGIS Desktop, mais avec un point d’entrée spécifique :
serverau lieu degui. - Permet :
- Modification dynamique des couches
- Ajout de nouvelles opérations au service
- Filtrage personnalisé des données
Exemple d’architecture de plugin serveur :
mon_plugin/
├── __init__.py
├── server/
│ ├── __init__.py
│ ├── monplugin.py
├── metadata.txt
Dans server/monplugin.py :
from qgis.server import QgsServerFilter
class MonPluginServer(QgsServerFilter):
def requestReady(self):
print("Requête reçue :", self.serverInterface().requestHandler().parameterMap())
2. Utiliser PyQGIS pour pré-traiter vos projets
Avec PyQGIS (l’API Python de QGIS), vous pouvez générer dynamiquement des .qgs, préparer les styles, les couches PostGIS, avant la publication sur QGIS Server.
Exemple simple de script PyQGIS :
from qgis.core import QgsProject
# Charger un projet existant
projet = QgsProject.instance()
projet.read('/path/to/mon_projet.qgs')
# Modifier dynamiquement un titre
projet.title = "Nouveau titre serveur"
# Sauvegarder
projet.write()
Cas d’usage typiques
- Génération automatique de services SIG thématiques
- Application de règles d’accès aux données via des plugins serveur
- Personnalisation de GetFeatureInfo (réponse JSON enrichie)
- Rendu conditionnel selon les utilisateurs / sessions
Ressources utiles
- Documentation QGIS Server
- Développement de plugins QGIS Server (PyQGIS Cookbook)
- Exemple de plugin serveur officiel
Bonnes pratiques
- Optimisez vos projets
.qgs(styles légers, groupes logiques) - Utilisez PostGIS pour les grandes bases de données spatiales
- Cachez vos services (avec MapProxy ou QGIS Cache) pour accélérer les réponses
- Surveillez les logs serveur pour le débogage de plugins Python
- Automatisez la mise à jour des projets avec PyQGIS