Important

Translation is a community effort you can join. This page is currently translated at 59.76%.

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.22.6-Białowieża
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.22.zip
unzip release_3.22.zip
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/world.qgs .
mv QGIS-Training-Data-release_3.22/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.

To properly deploy QGIS server you need a HTTP server. Recommended choices are Apache or 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.

  1. Install Apache and mod_fcgid:

    apt install apache2 libapache2-mod-fcgid
    
  2. You can run QGIS Server on your default website, but let’s configure a virtualhost specifically for this, as follows.

    1. In the /etc/apache2/sites-available directory, create a file called qgis.demo.conf, with this content:

      <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
          Require all granted
        </Directory>
      
        <IfModule mod_fcgid.c>
        FcgidMaxRequestLen 26214400
        FcgidConnectTimeout 60
        </IfModule>
      
      </VirtualHost>
      

      Note

      Some of the above configuration options are explained in the Server environment variables and pg_service file sections.

    2. 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.

  3. We can now enable the virtual host and the fcgid mod if it’s not already done:

    a2enmod fcgid
    a2ensite qgis.demo
    
  4. Redémarrez maintenant Apache pour que la nouvelle configuration soit prise en compte :

    systemctl restart apache2
    
  5. 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.

    # Replace 127.0.0.1 with the IP of your server.
    sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
    

Important

Remember that both the qgis.demo.conf and /etc/hosts files should be configured for your setup to work. You can also test the access to your QGIS Server from other clients on the network (e.g. Windows or macos machines) by going to their /etc/hosts file and point the qgis.demo name to whatever IP the server machine has on the network (not 127.0.0.1 as it is the local IP, only accessible from the local machine). On *nix machines the hosts file is located in /etc, while on Windows it’s under the C:\Windows\System32\drivers\etc directory. Under Windows you need to start your text editor with administrator privileges before opening the hosts file.

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.

You can also use QGIS Server with NGINX. Unlike Apache, NGINX does not automatically spawn FastCGI processes. The FastCGI processes are to be started by something else.

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

If you want to use spawn-fcgi:

  1. The first step is to install the package:

    apt install spawn-fcgi
    
  2. 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;
    }
    
  3. Et redémarrez NGINX pour prendre en compte la nouvelle configuration :

    systemctl restart nginx
    
  4. 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

Of course, you can add an init script to start QGIS Server at boot time or whenever you want. For example with systemd:

  1. Edit the file /etc/systemd/system/qgis-server.service with this content:

    [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
    
  2. 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

Using fcgiwrap is much easier to setup than spawn-fcgi but it’s much slower.

  1. You first have to install the corresponding package:

    apt install fcgiwrap
    
  2. 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 }
    
  3. 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.

This method, to deploy QGIS Server, relies on two Systemd units to configure: a Socket unit and a Service unit.

  1. 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
    
  2. Maintenant, activez et démarrez les sockets :

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.socket; done
    
  3. 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
    
  4. Maintenant, lancez le service de socket:

    for i in 1 2 3 4; do systemctl enable --now qgis-server@$i.service; done
    
  5. Finally, for the NGINX HTTP server, let’s introduce the configuration for this setup:

    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;
       }
    }
    
  6. 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/.

  1. Pour installer ce paquet :

    apt install xvfb
    
  2. 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
    
  3. Activer, démarrer et vérifier le statut de xvfb.service:

    systemctl enable --now xvfb.service
    systemctl status xvfb.service
    
  4. Ensuite, selon votre serveur HTTP, vous devez configurer le paramètre DISPLAY ou utiliser directement xvfb-run.

    • Using Apache:

      1. Add to your Fcgid configuration (see Apache HTTP Server):

        FcgidInitialEnv DISPLAY       ":99"
        
      2. Restart Apache for the new configuration to be taken into account:

        systemctl restart apache2
        
    • Using NGINX

      • 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 can also be installed on Windows systems using the 64 bit version of the OSGeo4W network installer (https://qgis.org/en/site/forusers/download.html).

Une procédure simple est la suivante:

  1. Download and run the OSGeo4W installer

  2. Follow the « Advanced Install » and install the QGIS Desktop, QGIS Server apache and mod_fcgid packages.

    ../../_images/qgis_server_windows2.png
  3. Apache is not directly installed as a service on Windows. You need to:

    1. Right-click the OSGeo4W.bat file at the root of the C:\OSGeo4W\ folder (if the default installation paths have been used) and select Run as administrator

    2. In the console, run apache-install.bat, which will output

      > apache-install.bat
      Installing the 'Apache OSGeo4W Web Server' service
      The 'Apache OSGeo4W Web Server' service is successfully installed.
      Testing httpd.conf....
      Errors reported here must be corrected before the service can be started.
      ...
      

      The service is started as you can notice in the report. But the server may fail to run due to missing custom configuration.

  4. Edit the C:\OSGeo4w\apps\apache\conf\httpd.conf file with the following changes (various other combinations are possible):

    Fonction

    Existing config

    Remplacement

    (Optional) Customize the address to listen to using an IP and/or port, You can and add as many entries as you wish.

    Listen ${SRVPORT}
    
    Listen localhost:8080
    

    Indicate where to find the script files

    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
    
    ScriptAlias /cgi-bin/ "C:/OSGeo4W/apps/qgis/bin/"
    

    Provide permissions on the script folder

    <Directory "${SRVROOT}/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    
    <Directory "C:/OSGeo4W/apps/qgis/bin">
        SetHandler cgi-script
        AllowOverride None
        Options ExecCGI
        Require all granted
    </Directory>
    

    Enable file extensions to use for script files. Uncomment and complete

    #AddHandler cgi-script .cgi
    
    AddHandler cgi-script .cgi .exe
    

    Add more OSGeo4W custom configuration variables

    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W/httpd.d/httpd_*.conf"
    
    # parse OSGeo4W apache conf files
    IncludeOptional "C:/OSGeo4W/httpd.d/httpd_*.conf"
    SetEnv GDAL_DATA "C:/OSGeo4W/share/gdal"
    SetEnv QGIS_AUTH_DB_DIR_PATH "C:/OSGeo4W/apps/qgis/resources"
    
  5. Restart the Apache web server

    > apache-restart.bat
    
  6. Open browser window to testing a GetCapabilities request to QGIS Server. Replace localhost:8080 with the IP and port you set to listen.

    http://localhost:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
    

    A XML file with the capabilities should be returned. Your server is ready to use.

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:

  • If you followed the above instructions to install an Apache HTTP Server:

    http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?
      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
    
  • If you followed the above instructions to install an NGINX HTTP Server:

    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:

../../_images/server_basic_getmap.png

Fig. 2.1 Réponse du serveur à une demande GetMap de base

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

To provide a new QGIS Server WMS, WFS, OAPIF or WCS, you have to create a QGIS project file with some data or use one of your current project. Define the colors and styles of the layers in QGIS and the project CRS, if not already defined. Then, go to the QGIS Server menu of the Project ► Properties… dialog and provide some information about the OWS in the Service Capabilities tab.

../../_images/ows_server_definition.png

Fig. 2.2 Définitions pour un projet WMS/WFS/WCS de QGIS Server

You have to Enable Service Capabilities first, if it is deactivated. This will appear in the GetCapabilities response of the WMS, WFS or WCS. If you don’t check checkbox Enable Service capabilities, QGIS Server will use the information given in the wms_metadata.xml file located in the cgi-bin folder.

2.4.1. Capacités WMS

../../_images/ows_server_wms.png

Fig. 2.3 Definitions in the WMS tab

In the WMS capabilities tab, check Advertised extent to define the extent advertised in the WMS GetCapabilities response. The spatial extent selector widget helps you enter the extent as a xmin, xmax, ymin, ymax text or pick it from the map canvas, layers, bookmarks…

By checking checkbox CRS restrictions, you can restrict in which coordinate reference systems (CRS) QGIS Server will offer to render maps. It is recommended that you restrict the offered CRS as this reduces the size of the WMS GetCapabilities response. Use the symbologyAdd button below to select those CRSs from the Coordinate Reference System Selector, or click Used to add the CRSs used in the QGIS project to the list.

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 checkbox Exclure des mises en page et cliquez sur le bouton symbologyAdd 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, checkbox Exclure couches et cliquez sur le symbologyAdd 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 checkbox 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.

If you wish, you can check checkbox Add geometry to feature response. This will include the bounding box for each feature in the GetFeatureInfo response. See also the WITH_GEOMETRY parameter.

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 checkbox Segmenter la géométrie des informations d’entité pour activer l’option.

When a layer group is passed to GetLegendGraphic request, all of its leaf layers are added to the legend picture (however without the groups” labels). Check the checkbox Add layer groups in GetLegendGraphic option if you want to also insert the layer groups (and subgroups) names into the layer tree, just like in QGIS Desktop legend.

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.

When QGIS Server is used in tiled mode (see TILED parameter), you can set the Tile buffer in pixels. The recommended value is the size of the largest symbol or line width in your QGIS project.

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. WMTS capabilities

In the WMTS capabilities tab you can select the layers you want to publish as WMTS and specify if you want to publish as PNG or JPEG.

../../_images/ows_server_wmts.png

Fig. 2.4 Definitions in the WMTS tab

If you enter a URL in the Advertised URL field of the WMTS capabilities section, QGIS Server will advertise this specific URL in the WMTS GetCapabilities response.

2.4.3. WFS/OAPIF capabilities

In the WFS/OAPIF capabilities tab, you can select the layers you want to publish as WFS or OAPIF, and specify if they will allow update, insert and delete operations.

../../_images/ows_server_wfs.png

Fig. 2.5 Definitions in the WFS/OAPIF tab

If you enter a URL in the Advertised URL field of the WFS capabilities section, QGIS Server will advertise this specific URL in the WFS GetCapabilities response.

2.4.4. Capacités WCS

In the WCS capabilities tab, you can select the layers that you want to publish as WCS.

../../_images/ows_server_wcs.png

Fig. 2.6 Definitions in the WCS tab

If you enter a URL in the Advertised URL field of the WCS capabilities section, QGIS Server will advertise this specific URL in the WCS GetCapabilities response.

2.4.5. Bien configurer votre OWS

Pour les couches vectorielles, le menu Champs de la boîte de dialogue Couche ► Propriétés de la couche 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 Projet ► Propriétés…) 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 Projet ► Enregistrer sous ► PostgreSQL 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 is a responsive web application dedicated to QGIS Server. It helps you to build a highly customized map viewer with layer selection, feature info, etc.. Also many plugins are available like authentication or print service, the full list is available in this repository.