.

QGIS comme serveur de données OGC

QGIS Server est une implémentation open source WMS 1.3, WFS 1.0.0 et WCS 11.1.1, qui en plus, propose des fonctionnalités cartographiques avancées pour le rendu thématique. The QGIS Server est une application FastCGI/CGI (Common Gateway Interface) écrite en C++ qui fonctionne avec un serveur web (tel que Apache, Lighttpd). Il dispose d’une extension Python qui autorise un développement rapide et efficace et un déploiement de nouvelles fonctionnalités. Il est financé par les projets de l’UE Orchestra, Sany et la ville d’Uster en Suisse.

QGIS Serveur utilise QGIS comme backend pour la logique des couches SIG et le rendu cartographique. La bibliothèque Qt est utilisée pour l’interface et la programmation multiplateforme en C++. À la différence des autres serveurs WMS, le Serveur QGIS utilise les règles de cartographie comme langage de configuration, à la fois pour la configuration du serveur et pour les règles cartographiques définie par l’utilisateur.

Etant donné que QGIS Desktop et QGIS Server utilisent les mêmes bibliothèques de visualisation, les cartes publiées sur le web ont le même aspect que sous le SIG Desktop.

Dans un prochain manuel, nous fournirons un exemple de configuration pour mettre en place un Serveur QGIS. Pour le moment, nous vous recommandons de vous référer aux sites suivants pour obtenir plus d’informations :

Installation test sur Debian Squeeze

A ce stade, nous donnerons une court et simple procédure d’installation pour une configuration de travail minimale utilisant Apache 2 sur Debian Squeeze. De nombreux autres OS proposent aussi des paquets pour QGIS Server. Si vous devez les compiler depuis la source, merci de vous référez aux URL ci-dessus.

Premièrement, ajoutez le dépôt SIG Debian en ajoutant le dépôt suivant :

$ cat /etc/apt/sources.list.d/debian-gis.list
deb http://qgis.org/debian trusty main
deb-src http://qgis.org/debian trusty main

$ # Add keys
$ sudo gpg --recv-key DD45F6C3
$ sudo gpg --export --armor DD45F6C3 | sudo apt-key add -

$ # Update package list
$ sudo apt-get update && sudo apt-get upgrade

Maintenant, installez le Serveur QGIS :

$ sudo apt-get install qgis-server python-qgis

Installez par exemple l’extension HelloWorld pour tester les serveurs. Créez un répertoire pour accueillir les extensions serveur. Cela sera spécifié dans la configuration de l’hôte virtuel et passé au serveur par le biais d’une variable d’environnement :

$ sudo mkdir -p /opt/qgis-server/plugins
$ cd /opt/qgis-server/plugins
$ sudo wget https://github.com/elpaso/qgis-helloserver/archive/master.zip
$ # In case unzip was not installed before:
$ sudo apt-get install unzip
$ sudo unzip master.zip
$ sudo mv qgis-helloserver-master HelloServer

Installez le serveur Apache dans un hôte virtuel séparé sur le port 80. Activez le module rewrite pour transmettre les entêtes HTTP BASIC auth.

$ sudo a2enmod rewrite
$ cat /etc/apache2/conf-available/qgis-server-port.conf
Listen 80
$ sudo a2enconf qgis-server-port

Voici la configuration de l’hôte virtuel, stocké dans /etc/apache2/sites-available/001-qgis-server.conf :

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/qgis-server-error.log
  CustomLog ${APACHE_LOG_DIR}/qgis-server-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"
  FcgidInitialEnv QGIS_DEBUG 1
  FcgidInitialEnv QGIS_SERVER_LOG_FILE /tmp/qgis-000.log
  FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
  FcgidInitialEnv QGIS_PLUGINPATH "/opt/qgis-server/plugins"

  # ABP: needed for QGIS HelloServer plugin HTTP BASIC auth
  <IfModule mod_fcgid.c>
      RewriteEngine on
      RewriteCond %{HTTP:Authorization} .
      RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  </IfModule>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
      AllowOverride All
      Options +ExecCGI -MultiViews +FollowSymLinks
      # for apache2 > 2.4
      Require all granted
      #Allow from all
  </Directory>
 </VirtualHost>

Maintenant activez l’hôte virtuel et redémarrer Apache :

$ sudo a2ensite 001-qgis-server
$ sudo service apache2 restart

Testez le serveur avec l’extension HelloWorld :

$ wget -q -O - "http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=HELLO"
HelloServer!

Vous pouvez avoir un aperçu des GetCapabilities de QGIS server ici : http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

Astuce

Si vous travaillez avec une entité qui a beaucoup de nœuds alors la modification ou l’ajout d’une nouvelle entité échouera. Dans ce cas, il est possible d’insérer le code suivant dans le fichier 001-qgis-server.conf file:

<IfModule mod_fcgid.c>
FcgidMaxRequestLen 26214400
FcgidConnectTimeout 60
</IfModule>

Créer un WMS / WFS / WCS depuis un projet QGIS

Pour fournir un nouveau service WMS, WFS ou WCS avec QGIS Server, nous devons créer un fichier de projet QGIS avec quelques données. Ici nous utilisons le fichier shape ‘Alaska’ provenant du jeu de données d’exemple de QGIS. Il faut également définir les couleurs et les styles des couches dans QGIS et le SRS du projet si ils ne sont pas déjà définis.

Figure Server 2:

../../../_images/ows_server_definition.png

Définitions pour un projet WMS/WFS/WCS de QGIS Server (KDE)

Ensuite allez dans le menu Serveur OWS de la boîte de dialogue Projet ‣ Propriétés du projet et indiquez les informations sur OWS dans les champs dans Informations générale du service. Elles apparaitront dans la réponse GetCapabilities des services WMS, WFS et WCS. Si vous n’avez pas coché checkbox les Informations générale du service, QGIS Server utilisera les informations fournies par le fichier wms_metadata.xml disponible dans le répertoire cgi-bin.

Capacités WMS

Dans la section Capacités WMS, vous pouvez définir l’emprise affichée de la réponse WMS GetCapabilities en saisissant les valeurs X/Y minimum et maximum dans les champs de Emprise annoncée. En cliquant sur Utiliser l’emprise actuelle du canevas, ces valeurs sont paramétrées pour utiliser celles du canevas de carte de QGIS. En cliquant sur checkbox Restreindre les SCR, vous pouvez restreindre la liste des systèmes de référence de coordonnées (SCR) que QGIS Server renvoie. Utilisez le bouton mActionSignPlus pour sélectionner ces SCR depuis le sélecteur de Système de Coordonnées de Référence ou cliquez sur Utilisé pour ajouter le SCR utilisé dans le projet QGIS à la liste.

Si vous avez défini des composeurs d’impression dans votre projet, ils seront listés dans la réponse GetCapabilities et pourront être utilisés par la requête GetPrint pour créer des impressions, une des mises en page servant de modèle. Ceci est une extension propre à QGIS de la norme WMS 1.3.0. Si vous souhaitez exclure un composeur de la publication par WMS, cochez checkbox Exclure des composeurs et cliquez le bouton mActionSignPlus en dessous. Sélectionnez ensuite un composeur depuis la boîte de dialogue Sélection de composeur d’impression afin de l’ajouter à la liste des composeurs exclus.

Si vous désirez exclure une couche ou un groupe de couches de la publication WMS, cochez checkbox Exclure des couches et cliquez sur le bouton mActionSignPlus dessous. Cela ouvre une boîte de dialogue Sélection de couches et de groupes spécifiques qui vous permet de choisir les couches et les groupes qui ne seront pas publiés. Utilisez les touches Shift ou Ctrl pour choisir plusieurs entrées en même temps.

Vous pouvez recevoir la réponse GetFeatureInfo en texte simple, XML et GML. Le format par défaut est le XML. Le texte simple et le GML dépendent du format de sortie choisi lors de la requête GetFeatureInfo.

Si vous le désirez, vous pouvez cocher checkbox Ajouter la géométrie de l’entité à la réponse. Cela permettra à la réponse GetFeatureInfo de renvoyer les géométries des entités dans un format texte. Si vous voulez que QGIS Server annonce une URL pour les requêtes spécifiques dans la réponse WMS GetCapabilities, ajoutez l’URL dans le champ URL publiée. De plus, vous pouvez restreindre la taille maximale des cartes renvoyées par la requête GetMap en indiquant une longueur et une largeur maximales dans les champs de la section Maximums pour la requête GetMap.

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 au sein de la sortie GetFeatureInfo. Si la couche utilise une Valeur Relationnelle pour un de ses attributs, cette information sera également renvoyée par la sortie de GetFeatureInfo.

QGIS support the following request for WMS service:

  • GetCapabilities
  • GetMap
  • GetFeatureInfo
  • GetLegendGraphic (SLD profile)
  • DescribeLayer (SLD profile)
  • GetStyles (custom QGIS profile)

Capacités WFS

Dans la partie Capacités WFS, vous pouvez sélectionner les couches qui 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.

QGIS support the following request for WFS service:

  • GetCapabilities
  • DescribeFeatureType
  • GetFeature
  • Transaction

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.

Maintenant, sauvegarder la session dans un fichier de projet alaska.qgs. Pour founir le projet en WMS/WFS, nous créons un nouveau répertoire /usr/lib/cgi-bin/project avec des provlèges d’administrateur et nous ajoutons le fichier de projet alaska.qgs ainsi qu’une copie du fichier qgis_mapserv.fcgi. C’est tout !

Nous pouvons maintenant tester notre projet WMS, WFS et WCS. Ajoutez les WMS, WFS et WCS dans QGIS tel que décrit dans Chargement des couches WMS/WMTS, Client WFS et WFS-T et Client WCS et chargez les données. L’URL est la suivante :

http://localhost/cgi-bin/project/qgis_mapserv.fcgi

QGIS support the following request for WCS service:

  • GetCapabilities
  • DescribeCoverage
  • GetCoverage

Bien configurer votre OWS

Pour les couches vectorielles, le menu Champs de la fenêtre Couche ‣ Propriétés vous permet de définir quels attributs seront publiés. Par défaut, tous les attributs sont publiés par votre WMS et WFS. Si vous souhaitez ne pas publier un attribut donné, décochez la case correspondante sous la colonne WMS ou WFS.

Vous pouvez superposer en filigrane, sur les cartes produites par votre WMS, des annotations de texte ou de SVG dans le fichier de projet. Voir la section sur les outils d’annotation dans Outils généraux pour obtenir des instructions sur la création d’annotations. Pour afficher les annotations en filigrane sur la sortie WMS, la case à cocher Figer la position de la carte de la fenêtre Annotation de texte doit être décochée. Cette fenêtre est accessible en double-cliquant sur l’annotation alors qu’un des outils d’annotation est actif. Pour les annotations SVG, vous devrez soit configurer le projet pour sauvegarder les chemins absolus (dans l’onglet Général de la fenêtre du menu Projet‣ Propriétés du projet) ou modifier manuellement le chemin d’accès à l’image SVG de façon à ce qu’il représente un chemin d’accès relatif valide.

Paramètres additionnels supportés par la requête WMS GetMap

Dans la requête WMS GetMap, QGIS Server accepte quelques paramètres additionnels en complément des paramètres standards, comme cela est permis par la spécification WMS 1.3.0 :

  • Paramètre MAP: Comme avec MapServer, le paramètre MAP peut être utilisé pour spécifier le chemin vers le fichier projet QGIS. Vous pouvez indiquer un chemin absolu ou un chemin relatif à l’emplacement de l’exécutable du serveur (qgis_mapserv.fcgi). Si aucun chemin n’est indiqué, QGIS Server recherche les fichiers .qgs dans le dossier de son exécutable.

    Exemple:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?\
      REQUEST=GetMap&MAP=/home/qgis/mymap.qgs&...
  • Paramètre DPI : Le paramètre DPI peut être utilisé pour spécifier la résolution de sortie.

    Exemple:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?REQUEST=GetMap&DPI=300&...
  • Paramètre OPACITIES : L’opacité peut être définie sur la couche ou le groupe de couches. Les valeurs possibles vont de 0 (transparence totale) à 255 (complètement opaque).

    Exemple:

    http://localhost/cgi-bin/qgis_mapserv.fcgi?\
      REQUEST=GetMap&LAYERS=mylayer1,mylayer2&OPACITIES=125,200&...

QGIS Journal serveur

Pour journaliser les requêtes envoyées au serveur, paramétrez les variables d’environnement suivantes:

  • QGIS_SERVER_LOG_FILE: indique le chemin et le nom de fichier du journal. Assurez-vous que le serveur dispose des permissions adaptées pour écrire dans le fichier. Le fichier est créé automatiquement lors de l’envoi de requêtes vers le serveur. S’il n’existe pas, vérifiez les permissions.

  • GIS_SERVER_LOG_LEVEL: indique le niveau de journalisation désiré. Les valeurs disponibles sont les suivantes:

    • 0 INFO (journalise toutes les requêtes),

    • 1 WARNING,
    • 2 CRITICAL (journalise uniquement les erreurs critiques, adapté à un fonctionnement en production).

    Exemple:

    SetEnv QGIS_SERVER_LOG_FILE /var/tmp/qgislog.txt
    SetEnv QGIS_SERVER_LOG_LEVEL 0

Note

  • Lorsque vous utilisez le module Fcgid, utilisez la clause FcgidInitialEnv à la place de SetEnv !

  • La journalisation du serveur est également activée si l’éexécutable est compilé en mode publication.

Variables d’environnement

  • QGIS_OPTIONS_PATH: Cette variable indique le chemin vers le répertoire des paramètres. Elle fonctionne de la même manière que l’option –optionspath de l’application QGIS. Elle recherche le fichier de paramètres dans <QGIS_OPTIONS_PATH>/QGIS/QGIS2.ini. Par exemple, pour paramétrer QGIS Server sous Apache pour utiliser le fichier de paramètres /path/to/config/QGIS/QGIS2.ini, ajouter ce qui suit à la configuration Apache:

    SetEnv QGIS_OPTIONS_PATH "/path/to/config/"