2. Premiers Pas
2.1. Installation sur systèmes Debian
Nous donnons un guide d’installation court et simple pour une configuration de travail minimale sur les systèmes basés sur Debian (y compris Ubuntu et dérivés). Cependant, de nombreuses autres distributions et systèmes d’exploitation fournissent des packages pour QGIS Server.
Note
Dans Ubuntu, vous pouvez utiliser votre utilisateur le plus couramment utilisé, en ajoutant sudo
aux commandes nécessitant des autorisations administrateur. Dans Debian, vous pouvez travailler en tant qu’administrateur (root
), sans utiliser sudo
.
Les prérequis et étapes pour ajouter des dépôts officiels de QGIS afin d’installer QGIS Server sur un système basé sur Debian sont indiqués dans la page des installateurs QGIS. Nous vous conseillons d’installer la version long terme.
Une fois que le dépôt de la version cible est configuré et QGIS Server installé, vous pouvez tester votre installation à l’aide de:
/usr/lib/cgi-bin/qgis_mapserv.fcgi
Si vous obtenez la sortie suivante, le serveur est correctement installé.
Note
Selon votre version de QGIS, de petites différences peuvent apparaitre dans le rapport fourni par la commande qgis_mapserv.fcgi
.
QFSFileEngine::open: No file name specified
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Content-Length: 206
Content-Type: text/xml; charset=utf-8
<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
Note
Comme on le voit ci-dessous, QGIS renvoie un code de statut 400, qui identifie correctement que la requête a échoué, du fait de l’absence d’une session http active. Ce n’est pas un bug; cela indique que le serveur fonctionne correctement.
Application path not initialized
Application path not initialized
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
"Loading native module /usr/lib/qgis/server/libdummy.so"
"Loading native module /usr/lib/qgis/server/liblandingpage.so"
"Loading native module /usr/lib/qgis/server/libwcs.so"
"Loading native module /usr/lib/qgis/server/libwfs.so"
"Loading native module /usr/lib/qgis/server/libwfs3.so"
"Loading native module /usr/lib/qgis/server/libwms.so"
"Loading native module /usr/lib/qgis/server/libwmts.so"
QFSFileEngine::open: No file name specified
Content-Length: 102
Content-Type: application/json
Server: QGIS FCGI server - QGIS version 3.16.6-Hannover
Status: 400
[{"code":"Bad request error","description":"Requested URI does not match any registered API handler"}]
Ajoutons un exemple de projet. Vous pouvez utiliser les vôtres ou l’une des données de démonstration de la formation :
mkdir /home/qgis/projects/
cd /home/qgis/projects/
wget https://github.com/qgis/QGIS-Training-Data/archive/release_3.16.zip
unzip release_3.16.zip
mv QGIS-Training-Data-release_3.16/exercise_data/qgis-server-tutorial-data/world.qgs .
mv QGIS-Training-Data-release_3.16/exercise_data/qgis-server-tutorial-data/naturalearth.sqlite .
Bien entendu, vous pouvez utiliser votre logiciel SIG préféré pour ouvrir ce fichier et jeter un coup d’œil à la configuration et aux couches disponibles.
Pour déployer correctement QGIS Server, vous avez besoin d’un serveur HTTP. Les choix recommandés sont Apache ou NGINX.
2.1.1. Apache HTTP Server
Note
Dans ce qui suit, veuillez remplacer qgis.demo
par le nom ou l’adresse IP de votre serveur.
Installez Apache et mod_fcgid:
apt install apache2 libapache2-mod-fcgid
Vous pouvez faire fonctionner QGIS Server sur votre site web par défaut, ou alors configurer un hôte virtuel (virtualhost), comme cela est présenté ci-dessous.
Dans le répertoire /etc/apache2/sites-available
, créons un fichier nommé qgis.demo.conf
, avec ce contenu :
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName qgis.demo
DocumentRoot /var/www/html
# Apache logs (different than QGIS Server log)
ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log
CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined
# Longer timeout for WPS... default = 40
FcgidIOTimeout 120
FcgidInitialEnv LC_ALL "en_US.UTF-8"
FcgidInitialEnv PYTHONIOENCODING UTF-8
FcgidInitialEnv LANG "en_US.UTF-8"
# QGIS log
FcgidInitialEnv QGIS_SERVER_LOG_STDERR 1
FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
# default QGIS project
SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs
# QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the Server's FCGI process user
FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/"
FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE "/home/qgis/qgisserverdb/qgis-auth.db"
# Set pg access via pg_service file
SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf
FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass"
# if qgis-server is installed from packages in debian based distros this is usually /usr/lib/cgi-bin/
# run "locate qgis_mapserv.fcgi" if you don't know where qgis_mapserv.fcgi is
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch
Order allow,deny
Allow from all
Require all granted
</Directory>
<IfModule mod_fcgid.c>
FcgidMaxRequestLen 26214400
FcgidConnectTimeout 60
</IfModule>
</VirtualHost>
Pour aller plus loin :
Vous pouvez faire ce qui précède dans un système Linux Desktop en collant et en sauvegardant la configuration ci-dessus après avoir fait :
nano /etc/apache2/sites-available/qgis.demo.conf
Note
Certaines des options de configuration sont expliquées dans la section des variables d’environnement du serveur.
Créons maintenant les répertoires qui stockeront les logs du serveur QGIS et ceux de la base de données d’authentification :
mkdir -p /var/log/qgis/
chown www-data:www-data /var/log/qgis
mkdir -p /home/qgis/qgisserverdb
chown www-data:www-data /home/qgis/qgisserverdb
Note
www-data
est l’utilisateur Apache sur les systèmes basés sur Debian et il faut qu’Apache accède à ces répertoires et aux fichiers qu’ils contiennent. La commande chown www-data...
attribue la propriété des fichiers et répertoires à www-data
.
Nous pouvons maintenant activer l’hôte virtuel, ainsi que le mode fcgid
si ce n’est pas déjà le cas.
a2enmod fcgid
a2ensite qgis.demo
Redémarrez maintenant Apache pour que la nouvelle configuration soit prise en compte :
systemctl restart apache2
Maintenant qu’Apache sait qu’il doit répondre aux demandes adressées à http://qgis.demo, nous devons également configurer le système client de manière à ce qu’il sache qui est qgis.demo
. Pour ce faire, nous ajoutons 127.0.0.1 qgis.demo
dans le fichier hosts. Nous pouvons le faire avec sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
. Remplacez 127.0.0.1
par l’IP de votre serveur.
Note
Rappelez-vous que les fichiers qgis.demo.conf
et /etc/hosts
doivent être configurés pour que votre installation fonctionne. Vous pouvez également tester l’accès QGIS Server à partir d’autres clients sur le réseau (par exemple des machines Windows ou macOS) en allant dans leur fichier /etc/hosts
et en faisant pointer le nom myhost
vers l’adresse IP de la machine serveur sur le réseau (non pas sur 127.0.0.1
car c’est l’IP locale, uniquement accessible depuis la machine locale). Sur les machines *nix
, le fichier hosts
est situé dans le répertoire /etc
, alors que sous Windows, il se trouve dans le répertoire C:\Windows\System32\drivers\etc
. Sous Windows, vous devez démarrer votre éditeur de texte avec des privilèges d’administrateur avant d’ouvrir le fichier hosts.
QGIS Server est maintenant disponible sur http://qgis.demo. Pour vérifier, tapez dans un navigateur, comme dans ce simple cas :
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
2.1.2. NGINX HTTP Server
Note
Dans ce qui suit, veuillez remplacer qgis.demo
par le nom ou l’adresse IP de votre serveur.
Vous pouvez également utiliser QGIS Server avec NGINX. Contrairement à Apache, NGINX ne génère pas automatiquement des processus FastCGI. Les processus FastCGI doivent être démarrés autrement.
Pour installer NGINX :
apt install nginx
Comme première option, vous pouvez utiliser spawn-fcgi ou fcgiwrap pour démarrer et gérer les processus de QGIS Server. Des paquets Debian officiels existent pour les deux. Lorsque vous n’avez pas X serveur en fonctionnement et que vous avez besoin, par exemple, d’imprimer, vous pouvez utiliser xvfb.
Une autre option consiste à s’appuyer sur Systemd, le système d’initialisation pour GNU / Linux que la plupart des distributions Linux utilisent aujourd’hui. L’un des avantages de cette méthode est qu’elle ne nécessite aucun autre composant ou processus. Il est censé être simple, mais robuste et efficace pour les déploiements de production.
Configuration de NGINX
L” include fastcgi_params; utilisé dans la configuration précédente est important, car il ajoute les paramètres de /etc/nginx/fastcgi_params
:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
De plus, vous pouvez utiliser certaines Variables d’environnement pour configurer QGIS Server. Dans le fichier de configuration NGINX, /etc/nginx/nginx.conf
, vous devez utiliser l’instruction fastcgi_param
pour définir ces variables comme indiqué ci-dessous :
location /qgisserver {
gzip off;
include fastcgi_params;
fastcgi_param QGIS_SERVER_LOG_STDERR 1;
fastcgi_param QGIS_SERVER_LOG_LEVEL 0;
fastcgi_pass unix:/var/run/qgisserver.socket;
}
FastCGI wrappers
Avertissement
fcgiwrap est plus facile à mettre en place que spawn-fcgi, car il est déjà intégré dans un service Systemd. Mais il conduit aussi à une solution beaucoup plus lente que l’utilisation de spawn-fcgi. Avec fcgiwrap, un nouveau processus QGIS Server est créé à chaque demande, ce qui signifie que le processus d’initialisation QGIS Server, qui comprend la lecture et l’analyse du fichier de projet QGIS, est effectué à chaque demande. Avec spawn-fcgi, le processus QGIS Server reste en fonction entre les demandes, ce qui se traduit par une bien meilleure performance. C’est pourquoi il est recommandé d’utiliser spawn-fcgi en production.
spawn-fcgi
Si vous voulez utiliser spawn-fcgi, la première étape est d’installer le paquet :
apt install spawn-fcgi
Ensuite, introduisez le bloc suivant dans votre configuration de serveur NGINX :
location /qgisserver {
gzip off;
include fastcgi_params;
fastcgi_pass unix:/var/run/qgisserver.socket;
}
Et redémarrez NGINX pour prendre en compte la nouvelle configuration :
systemctl restart nginx
Enfin, étant donné qu’il n’y a pas de fichier de service par défaut pour spawn-fcgi, vous devez démarrer manuellement QGIS Server dans votre terminal :
spawn-fcgi -s /var/run/qgisserver.socket \
-U www-data -G www-data -n \
/usr/lib/cgi-bin/qgis_mapserv.fcgi
QGIS Server est maintenant disponible sur http://qgis.demo/qgisserver.
Note
Lorsque vous utilisez spawn-fcgi, vous pouvez définir directement les variables d’environnement avant de lancer le serveur. Par exemple : export QGIS_SERVER_LOG_STDERR=1
Bien entendu, vous pouvez ajouter un script d’initialisation pour démarrer QGIS Server au démarrage ou à tout moment. Par exemple avec systemd, éditez le fichier /etc/systemd/system/qgis-server.service
avec ce contenu :
[Unit]
Description=QGIS server
After=network.target
[Service]
;; set env var as needed
;Environment="LANG=en_EN.UTF-8"
;Environment="QGIS_SERVER_PARALLEL_RENDERING=1"
;Environment="QGIS_SERVER_MAX_THREADS=12"
;Environment="QGIS_SERVER_LOG_LEVEL=0"
;Environment="QGIS_SERVER_LOG_STDERR=1"
;; or use a file:
;EnvironmentFile=/etc/qgis-server/env
ExecStart=spawn-fcgi -s /var/run/qgisserver.socket -U www-data -G www-data -n /usr/lib/cgi-bin/qgis_mapserv.fcgi
[Install]
WantedBy=multi-user.target
Ensuite, activez et démarrez le service :
systemctl enable --now qgis-server
Avertissement
Avec les commandes ci-dessus, spawn-fcgi n’engendre qu’un seul process QGIS Server.
fcgiwrap
L’utilisation de fcgiwrap est beaucoup plus facile à configurer que spawn-fcgi mais elle est beaucoup plus lente. Vous devez d’abord installer le package correspondant :
apt install fcgiwrap
Ensuite, introduisez le bloc suivant dans votre configuration de serveur NGINX :
1 location /qgisserver {
2 gzip off;
3 include fastcgi_params;
4 fastcgi_pass unix:/var/run/fcgiwrap.socket;
5 fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/qgis_mapserv.fcgi;
6 }
Enfin, redémarrez NGINX et fcgiwrap pour prendre en compte la nouvelle configuration :
systemctl restart nginx
systemctl restart fcgiwrap
QGIS Server est maintenant disponible sur http://qgis.demo/qgisserver.
Systemd
QGIS Server a besoin d’un Serveur X en fonctionnement pour être utilisable, notamment pour l’impression. Si vous disposez déjà d’un serveur X en fonctionnement, vous pouvez utiliser les services Systemd.
Cette méthode, pour déployer QGIS Server, s’appuie sur deux services Systemd :
un Socket unit
et un Service unit.
QGIS Server Socket définit et crée une socket de système de fichiers, utilisée par NGINX pour démarrer et communiquer avec QGIS Server. L’unité Socket doit être configurée avec Accept=false
, ce qui signifie que les appels à l’appel système accept()
sont délégués au processus créé par Service unit. Il se trouve dans /etc/systemd/system/qgis-server@.socket
, qui est en fait un modèle:
[Unit]
Description=QGIS Server Listen Socket (instance %i)
[Socket]
Accept=false
ListenStream=/var/run/qgis-server-%i.sock
SocketUser=www-data
SocketGroup=www-data
SocketMode=0600
[Install]
WantedBy=sockets.target
Maintenant, activez et démarrez les sockets :
for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.socket; done
Service unit QGIS Server définit et démarre le processus QGIS Server. L’important est que l’entrée standard du processus de service soit connectée à la prise définie par l’unité Socket. Cela doit être configuré en utilisant StandardInput = socket
dans la configuration Service unit située dans /etc/systemd/system/qgis-server@.service
:
[Unit]
Description=QGIS Server Service (instance %i)
[Service]
User=www-data
Group=www-data
StandardOutput=null
StandardError=journal
StandardInput=socket
ExecStart=/usr/lib/cgi-bin/qgis_mapserv.fcgi
EnvironmentFile=/etc/qgis-server/env
[Install]
WantedBy=multi-user.target
Note
Les variables d’environnement de QGIS Server sont définies dans un fichier séparé, /etc/qgis-server/env
. Il pourrait ressembler à ceci :
QGIS_PROJECT_FILE=/etc/qgis/myproject.qgs
QGIS_SERVER_LOG_STDERR=1
QGIS_SERVER_LOG_LEVEL=3
Maintenant, lancez le service de socket:
for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.service; done
Enfin, pour le serveur HTTP NGINX, introduisons la configuration de ce paramétrage :
upstream qgis-server_backend {
server unix:/var/run/qgis-server-1.sock;
server unix:/var/run/qgis-server-2.sock;
server unix:/var/run/qgis-server-3.sock;
server unix:/var/run/qgis-server-4.sock;
}
server {
…
location /qgis-server {
gzip off;
include fastcgi_params;
fastcgi_pass qgis-server_backend;
}
}
Redémarrez maintenant NGINX pour que la nouvelle configuration soit prise en compte:
systemctl restart nginx
Merci à Oslandia d’avoir partagé leur tutoriel.
2.1.3. Xvfb
QGIS Server a besoin d’un serveur X en cours d’exécution pour être pleinement utilisable, en particulier pour l’impression. Sur les serveurs, il est généralement recommandé de ne pas l’installer, vous pouvez donc utiliser xvfb
pour avoir un environnement X virtuel.
Si vous exécutez le serveur dans un environnement graphique/X11 alors pas besoin d’installer xvfb. Plus d’infos à https://www.itopen.it/qgis-server-setup-notes/.
Pour installer ce paquet :
apt install xvfb
Créez le fichier de service, /etc/systemd/system/xvfb.service
, avec ce contenu :
[Unit]
Description=X Virtual Frame Buffer Service
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
[Install]
WantedBy=multi-user.target
Activer, démarrer et vérifier le statut de xvfb.service
:
systemctl enable --now xvfb.service
systemctl status xvfb.service
Ensuite, selon votre serveur HTTP, vous devez configurer le paramètre DISPLAY ou utiliser directement xvfb-run.
Avec Apache
Ensuite, vous pouvez configurer le paramètre DISPLAY.
Avec Apache, il vous suffit d’ajouter à votre configuration FastCGI (voir ci-dessus) :
FcgidInitialEnv DISPLAY ":99"
Redémarrez maintenant Apache pour que la nouvelle configuration soit prise en compte :
systemctl restart apache2
Avec NGINX
Vous pouvez alors utiliser directement xvfb-run ou configurer le paramètre DISPLAY.
Avec spawn-fcgi utilisant
xvfb-run
:xvfb-run /usr/bin/spawn-fcgi -f /usr/lib/cgi-bin/qgis_mapserv.fcgi \ -s /tmp/qgisserver.socket \ -G www-data -U www-data -n
Avec la variable d’environnement DISPLAY dans la configuration du serveur HTTP.
fastcgi_param DISPLAY ":99";
2.2. Installation sous Windows
QGIS Server peut également être installé sur les systèmes Windows. Bien que le package QGIS Server soit disponible dans la version 64 bits du programme d’installation réseau OSGeo4W (https://qgis.org/en/site/forusers/download.html), aucun package Apache (ou autre serveur Web) n’est disponible, donc cela doit être installé par d’autres moyens.
Une procédure simple est la suivante:
Téléchargez le programme d’installation de XAMPP (https://www.apachefriends.org/download.html) pour Windows et installez Apache
Téléchargez le programme d’installation d’OSGeo4W, suivez « Installation avancée » et installez les packages QGIS Desktop et QGIS Server
Modifiez le fichier httpd.conf (
C:\xampp\apache\conf\httpd.conf
si les chemins d’installation par défaut ont été utilisés) et apportez les modifications suivantes:De :
ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"
À :
ScriptAlias /cgi-bin/ "C:/OSGeo4W64/apps/qgis/bin/"
De :
<Directory "C:/xampp/cgi-bin"> AllowOverride None Options None Require all granted </Directory>
À :
<Directory "C:/OSGeo4W64/apps/qgis/bin"> SetHandler cgi-script AllowOverride None Options ExecCGI Order allow,deny Allow from all Require all granted </Directory>
De :
AddHandler cgi-script .cgi .pl .asp
À :
AddHandler cgi-script .cgi .pl .asp .exe
Puis ajoutez à la fin de httpd.conf :
SetEnv GDAL_DATA "C:\OSGeo4W64\share\gdal" SetEnv QGIS_AUTH_DB_DIR_PATH "C:\OSGeo4W64\apps\qgis\resources" SetEnv PYTHONHOME "C:\OSGeo4W64\apps\Python37" SetEnv PATH "C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\qgis\bin;C:\OSGeo4W64\apps\Qt5\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem" SetEnv QGIS_PREFIX_PATH "C:\OSGeo4W64\apps\qgis" SetEnv QT_PLUGIN_PATH "C:\OSGeo4W64\apps\qgis\qtplugins;C:\OSGeo4W64\apps\Qt5\plugins"
Redémarrez le serveur Web Apache à partir du panneau de configuration XAMPP et ouvrez la fenêtre du navigateur pour tester une demande GetCapabilities vers QGIS Server
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
2.3. Publier un projet
Maintenant que QGIS Server est installé et fonctionne, il ne nous reste plus qu’à l’utiliser.
De toute évidence, nous avons besoin d’un projet QGIS pour travailler. Bien sûr, vous pouvez personnaliser entièrement votre projet en définissant les coordonnées, préciser certaines restrictions sur CRS ou même exclure certaines couches. Tout ce que vous devez savoir à ce sujet est décrit plus loin dans Configurer votre projet.
Mais pour l’instant, nous allons utiliser un projet simple déjà configuré et préalablement téléchargé dans /home/qgis/projects/world.qgs
, comme décrit ci-dessus.
En ouvrant le projet et en jetant un coup d’œil sur les couches, nous savons que 4 couches sont actuellement disponibles:
airports
places
countries
countries_shapeburst
Vous n’avez pas besoin de comprendre la demande complète pour l’instant mais vous pouvez récupérer une carte avec certaines des couches précédentes grâce à QGIS Server en faisant quelque chose comme ceci dans votre navigateur Web pour récupérer la couche countries:
http://qgis.demo/qgisserver?
MAP=/home/qgis/projects/world.qgs&
LAYERS=countries&
SERVICE=WMS&
VERSION=1.3.0&
REQUEST=GetMap&
CRS=EPSG:4326&
WIDTH=400&
HEIGHT=200&
BBOX=-90,-180,90,180
Si vous obtenez l’image suivante, QGIS Server s’exécute correctement:
Notez que vous pouvez définir la variable d’environnement QGIS_PROJECT_FILE afin d’utiliser un projet par défaut au lieu de donner un paramètre MAP (voir Variables d’environnement).
Par exemple avec spawn-fcgi :
export QGIS_PROJECT_FILE=/home/qgis/projects/world.qgs
spawn-fcgi -f /usr/lib/bin/cgi-bin/qgis_mapserv.fcgi \
-s /var/run/qgisserver.socket \
-U www-data -G www-data -n
2.4. Configurer votre projet
Pour fournir des services WMS, WFS ou WCS via QGIS Server, il vous faut un fichier de projet QGIS avec des données à paramétrer. Définissez d’abord les couleurs et les styles des couches dans QGIS et le SCR du projet, s’ils ne sont pas déjà définis.
Ensuite, allez dans le menu QGIS Server de la boîte de dialogue et fournissez des informations sur OWS dans les champs sous Capacités du Service. Cela apparaîtra dans la réponse GetCapabilities du WMS, WFS ou WCS. Si vous ne cochez pas Capacités du service, QGIS Server utilisera les informations fournies dans le fichier wms_metadata.xml
situé dans le dossier cgi-bin
.
2.4.1. Capacités WMS
Dans la section Capacités WMS, vous pouvez définir l’étendue publiée dans la réponse WMS GetCapabilities en entrant les valeurs X et Y minimales et maximales dans les champs sous Etendue publiée. En cliquant sur Utiliser l’étendue actuelle du canevas cela définit les valeurs actuellement affichées dans le canevas de carte QGIS. En cochant CRS restrictions, vous pouvez restreindre dans quels systèmes de référence de coordonnées (CRS) QGIS Server proposera de rendre les cartes. Il est recommandé de restreindre le CRS proposé car cela réduit la taille de la réponse WMS GetCapabilities. Utilisez le bouton ci-dessous pour sélectionner ces CRS dans le sélecteur de système de référence de coordonnées, ou cliquez sur Utilisé pour ajouter les CRS utilisés dans le projet QGIS à la liste.
Si vous avez défini des mises en page dans votre projet, elles seront listées dans la réponse GetProjectSettings
et peuvent être utilisées par la requête GetPrint pour créer des impressions, en utilisant l’une des mises en page d’impression comme modèle. Il s’agit d’une extension spécifique à QGIS de la spécification WMS 1.3.0. Si vous souhaitez exclure toute mise en page d’impression de la publication WMS, cochez la case Exclure des mises en page et cliquez sur le bouton ci-dessous. Ensuite, sélectionnez une mise en page dans la boîte de dialogue Selectionner mise en page afin de l’ajouter à la liste des mises en page exclues.
Si vous souhaitez exclure une couche ou un groupe de couches de la publication WMS, Exclure couches et cliquez sur le bouton ci-dessous. Cela ouvre la boîte de dialogue Sélectionner les couches et groupes restreints, qui vous permet de choisir les couches et les groupes que vous ne souhaitez pas publier. Utilisez la touche Shift ou Ctrl si vous souhaitez sélectionner plusieurs entrées. Il est recommandé d’exclure de la publication les couches dont vous n’avez pas besoin car cela réduit la taille de la réponse WMS GetCapabilities, ce qui entraîne des temps de chargement plus rapides côté client.
Si vous cochez utiliser les id des couches, les ids de couche seront utilisés pour référencer les couches dans la réponse GetCapabilities
ou le paramètre GetMap LAYERS
. Sinon, le nom de la couche ou le nom court s’il est défini (voir Onglet QGIS Server) est utilisé.
Vous pouvez recevoir les GetFeatureInfo en texte brut, XML et GML. La valeur par défaut est XML.
Si vous le souhaitez, vous pouvez cocher la case Ajouter la géométrie à la réponse d’entité. Cela comprendra l’étendue pour chaque entité dans la réponse GetFeatureInfo. Voir aussi le paramètre WITH_GEOMETRY.
Comme de nombreux clients Web ne peuvent pas afficher d’arcs de cercle dans les géométries, vous avez la possibilité de segmenter la géométrie avant de l’envoyer au client dans une réponse GetFeatureInfo. Cela permet à ces clients d’afficher toujours la géométrie d’une entité (par exemple pour mettre en évidence l’entité). Vous devez Segmenter la géométrie des informations d’entité pour activer l’option.
Vous pouvez également utiliser l’option Précision de la géométrie GetFeatureInfo. Cela vous permet d’économiser de la bande passante lorsque vous n’avez pas besoin de la précision max.
Si vous souhaitez que QGIS Server publie des URL de demandes spécifiques dans la réponse WMS GetCapabilities, entrez l’URL correspondante dans le champ URL publiée.
De plus, vous pouvez restreindre la taille maximale des cartes renvoyées par la demande GetMap en entrant la largeur et la hauteur maximales dans les champs respectifs sous Maximum de requêtes GetMap.
Vous pouvez modifier le facteur Qualité d’image JPEG. Le paramètre de qualité doit être compris entre 0 et 100. Précisez 0 pour une compression maximale, 100 pour aucune compression.
Vous pouvez modifier la limite des entités de l’atlas à imprimer dans une requête en définissant le champ Nombre Entités maximums pour l’impression en atlas.
Lorsque QGIS Server est utilisé en mode tuilé (voir le paramètre TILED), vous pouvez définir le Tampon de tuiles en pixels. La valeur recommandée est la taille du plus grand symbole ou de la plus grande largeur de ligne dans votre projet QGIS.
Si une de vos couches utilise l’affichage d’indication de carte (pour afficher du texte issu d’expressions), cette dernière sera listée dans la sortie GetFeatureInfo. Si la couche utilise une Valeur Relationnelle pour un de ses attributs, cette information sera également renvoyée dans la sortie GetFeatureInfo.
2.4.2. Capacités WFS
Dans la partie Capacités WFS, vous pouvez sélectionner les couches que vous voulez publier en WFS et indiquer si elle permettent les opérations de mise à jour, d’insertion et de suppression. Si vous ajoutez une URL dans le champ URL publiée des Capacités WFS, QGIS Server annoncera cette URL spécifique dans la réponse WFS GetCapabilities.
2.4.3. Capacités WCS
Dans la partie Capacités WCS, vous pouvez sélectionner les couches qui vous voulez publier en WCS. Si vous indiquez une URL dans le champ URL publiée de la section Capacités WCS, QGIS Server annoncera cette URL spécifique dans la réponse WCS GetCapabilities.
2.4.4. Bien configurer votre OWS
Pour les couches vectorielles, le menu Champs de la boîte de dialogue vous permet de définir pour chaque attribut s’il sera publié ou non. Par défaut, tous les attributs sont publiés en WMS et WFS. Si vous ne voulez pas qu’un attribut spécifique soit publié, décochez la case correspondante dans la colonne WMS ou WFS.
Vous pouvez superposer des filigranes sur les cartes produites par votre WMS en ajoutant des annotations de texte ou des annotations SVG au fichier de projet. Voir la section Outils d’annotation pour des instructions sur la création d’annotations. Pour que les annotations soient affichées sous forme de filigranes sur la sortie WMS, la case à cocher Position de la carte fixe dans la boîte de dialogue Texte d’annotation doit être décochée. Vous pouvez y accéder en double-cliquant sur l’annotation alors que l’un des outils d’annotation est actif. Pour les annotations SVG, vous devrez soit définir le projet pour enregistrer des chemins absolus (dans le menu Général de ) soit modifier manuellement le chemin d’accès à l’image SVG afin qu’elle représente un chemin relatif valide.
2.5. Intégration avec des applications tierces
QGIS Server fournit des services cartographiques web conformes aux standards de l’OGC tels que le WMS, WFS, etc.. De ce fait, il peut être utilisé par une grande variété de logiciels.
2.5.1. Intégration avec QGIS
QGIS Desktop est l’outil de « design » de la carte alors que QGIS Server permet de publier celle-ci. Les cartes ou projets QGIS seront publiés par QGIS Server selon les protocoles et standards OGC. Ces projets QGIS peuvent être sous forme de fichiers sur disque ou d’entrées de bases de données (via
depuis QGIS Desktop).En outre, une procédure dédiée de mise à jour doit être établie pour rafraîchir le projet utilisé par QGIS Server (c’est-à-dire, copier les fichiers projets dans l’emplacement du serveur et redémarrer QGIS Server). Pour le moment, les processus automatisés (tels que le rechargement du serveur par dessus le service de file d’attente de messages) ne sont pas implémentés.
2.5.2. Intégration avec MapProxy
MapProxy est un serveur de cache de tuiles pouvant se connecter à tout serveur cartographique respectant les protocoles WMS/WMTS. De ce fait, il peut se connecter directement aux services web cartographiques de QGIS Server et ainsi améliorer l’expérience utilisateur.
2.5.3. Intégration avec QWC2
QWC2 est une application web responsive dédiée à QGIS Server. Il vous aide à construire un visualiseur de carte hautement personnalisé avec sélection de couches, informations sur les entités… En outre, de multiples extensions sont disponibles notamment pour l’authentification, l’impression… La liste complète est disponible sur ce dépôt.