11.2. Lesson: Serving WMS

Les données utilisées pour cet exercice sont disponibles dans le sous-répertoire qgis-server-tutorial-data du répertoire training data que vous avez téléchargé. Pour des raisons de commodité et pour éviter d’éventuels problèmes de permissions, nous supposerons que ces fichiers sont stockés dans le répertoire /home/qgis/projets. Par conséquent, adaptez les instructions suivantes à votre chemin d’accès.

Le jeu de donnée contient un projet QGIS world.qgs, préparé pour être servi par QGIS Server. Si vous souhaitez utiliser votre propre projet ou apprendre comment préparer un projet, allez voir la section Configurer votre projet.

Note

Ce module présente les URL afin que le public puisse facilement distinguer les paramètres et les valeurs des paramètres. Alors que le format normal est:

...&field1=value1&field2=value2&field3=value3

ce tutoriel utilise :

&field1=value1
&field2=value2
&field3=value3

Les coller dans Mozilla Firefox fonctionne parfaitement mais d’autres navigateurs internet comme Chrome peuvent ajouter des espaces indésirables entre les paires field:parameter. Ainsi, si vous rencontrez ce problème vous pouvez soit utiliser Firefox ou modifier les URL afin qu’il soit en format de ligne simple.

Faisons une requête WMS GetCapabilities dans le navigateur web ou avec curl :

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetCapabilities
&map=/home/qgis/projects/world.qgs

Dans la configuration Apache de la leçon précédente, la variable `` QGIS_PROJECT_FILE`` définit le projet par défaut à: file: / home / qgis / projects / world.qgs. Cependant, dans la demande ci-dessus, nous avons utilisé le paramètre ** map ** pour être explicite et pour montrer qu’il peut être utilisé pour pointer n’importe quel projet. Si vous supprimez le paramètre ** map ** de la demande ci-dessus, QGIS Server affichera la même réponse.

En interrogeant l’URL GetCapabilities avec un client WMS, celui-ci récupère en réponse un document XML contenant des métadonnées sur le serveur (quelles couches il contient, son emprise, les formats, la version WMS, etc.).

Comme QGIS est également un Client WMS / WMTS, vous pouvez créer une nouvelle connexion au serveur WMS à l’aide de l’url GetCapabilities ci-dessus. Voir la section Lesson: Web Mapping Services ou Sélection des serveurs WMS/WMTS sur la façon de le faire.

En ajoutant la couche WMS countries à votre projet QGIS, vous devriez obtenir une image comme celle ci-dessous :

../../../_images/qgis_getmap_request.png

Fig. 11.33 QGIS Desktop consommant le service WMS de la couche pays QGIS Server

Note

QGIS server dessert les couches qui sont définies dans le projet world.qgs. En ouvrant le projet avec QGIS, vous pouvez voir qu’il existe plusieurs styles pour la couche des pays. QGIS server en est également conscient et vous pouvez choisir le style que vous souhaitez dans votre demande. Le style classé par population a été choisi dans l’image ci-dessus.

11.2.1. Journal

Lorsque vous installez un serveur, les journaux sont toujours importants car ils vous montrent ce qui se passe. Nous avons mis en place dans le fichier *.conf les journaux suivants :

  • Log QGIS Server a /logs/qgisserver.log.

  • qgisplatform.demo Apache access log at qgisplatform.demo.access.log

  • qgisplatform.demo Journal d’erreurs Apache à l’adresse qgisplatform.demo.error.log

Les fichiers journaux sont simplement des fichiers texte, vous pouvez donc utiliser un éditeur de texte pour les consulter. Vous pouvez également utiliser la commande tail dans un terminal :sudo tail -f /logs/qgisserver.log.

Le terminal produira ainsi en permanence ce qui est écrit dans ce fichier journal. Vous pouvez également faire ouvrir trois terminaux pour chacun des fichiers journaux de cette manière :

../../../_images/terminal_tail_log.jpg

Fig. 11.34 Utilisation de la commande tail pour visualiser la sortie des journaux de QGIS server

Lorsque vous utilisez QGIS Desktop pour consommer les services WMS QGIS server, vous verrez toutes les demandes que QGIS envoie au serveur dans le journal d’accès, les erreurs QGIS server dans le journal QGIS Server, etc.

Note

  • Si vous regardez les journaux dans les sections suivantes, vous devriez avoir une meilleure compréhension de ce qui se passe.

  • En redémarrant Apache tout en regardant dans le journal QGIS server, vous pouvez trouver quelques pointeurs supplémentaires sur la façon dont les choses fonctionnent.

11.2.2. Requêtes GetMap

Afin d’afficher la couche countries, QGIS Desktop, comme tout autre client WMS, utilise les requêtes GetMap.

Une simple requête ressemble à:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries
&FORMAT=image/jpeg

Avec la requête précédente, vous obtiendrez le résultat suivant :

Figure : simple requête GetMap QGIS server

../../../_images/getmap_simple_request.jpg

Fig. 11.35 Réponse de Qgis server après une simple demande GetMap

11.2.3. moderate Try Yourself Modifier les paramètres d’image et de couches

Sur la base de la demande ci-dessus, remplaçons la couche countries par une autre.

Afin de voir quelles autres couches sont disponibles, vous pouvez ouvrir le projet world.qgs dans QGIS et regarder son contenu. Gardez cependant à l’esprit que les clients WMS n’ont pas accès au projet QGIS, ils se contentent d’examiner le contenu des documents relatifs aux capacités.

Il existe également une option de configuration qui permet à certaines couches du projet QGIS d’être ignorées par le QGIS lorsqu’il dessert le service WMS.

Ainsi, vous pouvez regarder la liste des couches lorsque vous pointez QGIS Desktop vers l’URL GetCapabilities ou vous pouvez essayer de trouver d’autres noms de couches dans la réponse XML GetCapabilities.

Un des noms de couches que vous pourriez trouver et qui fonctionne est countries_shapeburst. Vous pouvez en trouver d’autres mais gardez à l’esprit que certains ne sont pas visibles à une si petite échelle et que vous pourriez donc obtenir une image vierge comme réponse.

Vous pouvez également jouer avec d’autres paramètres, comme par exemple changer le type d’image retournée en image/png.

11.2.4. moderate Follow Along: Utiliser les paramètres Filtre, Opacites et Styles

Faisons une autre requête qui ajoute une autre couche, certains des paramètres Paramètres supplémentaires pris en charge par tous les types de demande, FILTER et OPACITIES, mais utilise aussi le paramètre standard STYLES.

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&FORMAT=image/jpeg
&LAYERS=countries,countries_shapeburst
&STYLES=classified_by_name,blue
&OPACITIES=255,30
&FILTER=countries:"name" IN ( 'Germany' , 'Italy' )

Avec la requête précédente, vous obtiendrez le résultat suivant :

../../../_images/getmap_filter_opacities.jpg

Fig. 11.36 Réponse à une demande GetMap avec les paramètres FILTER et OPACITIES

Comme vous pouvez le voir sur l’image ci-dessus, entre autres choses, nous avons demandé à QGIS Server de ne rendre que Germany et Italy dans la couche des pays.

11.2.5. moderate Follow Along: Utiliser le redimensionnement

Faisons une autre requête GetMap qui utilise la fonction REDLINING et le paramètre SELECTION détaillé dans la section Paramètres supplémentaires pris en charge par tous les types de demande :

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries,countries_shapeburst
&FORMAT=image/jpeg
&HIGHLIGHT_GEOM=POLYGON((590000 6900000, 590000 7363000, 2500000 7363000, 2500000 6900000, 590000 6900000))
&HIGHLIGHT_SYMBOL=<StyledLayerDescriptor><UserStyle><Name>Highlight</Name><FeatureTypeStyle><Rule><Name>Symbol</Name><LineSymbolizer><Stroke><SvgParameter name="stroke">%233a093a</SvgParameter><SvgParameter name="stroke-opacity">1</SvgParameter><SvgParameter name="stroke-width">1.6</SvgParameter></Stroke></LineSymbolizer></Rule></FeatureTypeStyle></UserStyle></StyledLayerDescriptor>
&HIGHLIGHT_LABELSTRING=QGIS Tutorial
&HIGHLIGHT_LABELSIZE=30
&HIGHLIGHT_LABELCOLOR=%23000000
&HIGHLIGHT_LABELBUFFERCOLOR=%23FFFFFF
&HIGHLIGHT_LABELBUFFERSIZE=3
&SELECTION=countries:171,65

Avec la requête précédente dans un navigateur web, vous obtiendrez le résultat suivant :

../../../_images/getmap_redlining_selection.jpg

Fig. 11.37 Réponse à une demande avec la fonction REDLINING et le paramètre SELECTION

Vous pouvez voir sur l’image ci-dessus que les pays avec les ids 171 et 65 ont été mis en évidence en jaune (Roumanie et France) en utilisant le paramètre SELECTION et nous avons utilisé la fonction REDLINING pour superposer un rectangle avec le label QGIS Tutorial.

11.2.6. Demandes GetPrint

Une des caractéristiques très intéressantes de QGIS Server est qu’il utilise les mises en page d’impression de QGIS Desktop. Vous pouvez en apprendre davantage à ce sujet dans la section GetPrint.

Si vous ouvrez le projet world.qgs avec QGIS Desktop, vous trouverez une mise en page nommée Population distribution. Une requête simplifiée GetPrint qui illustre cette fonctionnalité étonnante est :

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?map=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0&
REQUEST=GetPrint
&FORMAT=pdf
&TRANSPARENT=true
&SRS=EPSG:3857
&DPI=300
&TEMPLATE=Population distribution
&map0:extent=-432786,4372992,3358959,7513746
&LAYERS=countries
../../../_images/getprint.jpg

Fig. 11.38 Montre le pdf résultant de la demande GetPrint ci-dessus

Naturellement, il est difficile d’écrire vos demandes GetMap, GetPrint, etc.

QGIS Web Client ou QWC est un projet de client Web qui peut fonctionner avec QGIS Server afin que vous puissiez publier vos projets sur le Web ou vous aider à créer des requêtes QGIS Server pour une meilleure compréhension des possibilités.

Vous pouvez l’installer comme ceci :

  • En tant qu’utilisateur qgis, allez dans le répertoire home avec cd /home/qgis.

  • Téléchargez le projet QWC depuis ici et dézippez-le.

  • Faites un lien symbolique vers le répertoire /var/www/html car c’est le DocumentRoot que nous avons mis en place dans la configuration de l’hôte virtuel. Si vous avez décompressé l’archive sous /home/qgis/Downloads/QGIS-Web-Client-master, nous pouvons le faire avec sudo ln -s /home/qgis/Downloads/QGIS-Web-Client-master /var/www/html/.

  • Accédez à http://qgisplatform.demo/QGIS-Web-Client-master/site/qgiswebclient.html?map=/home/qgis/projects/world.qgs à partir de votre navigateur Web.

Vous devriez maintenant être en mesure de voir la carte comme dans la figure suivante :

../../../_images/qwc.jpg

Fig. 11.39 Le client Web QGIS consomme le projet world.qgs

Si vous cliquez sur le bouton Imprimer dans QWC, vous pouvez créer interactivement des demandes GetPrint. Vous pouvez également cliquer sur l’icône ? dans le QWC pour accéder à l’aide disponible afin de mieux découvrir les possibilités du QWC.

11.2.7. In Conclusion

Vous avez appris comment utiliser QGIS server pour fournir des services WMS.

11.2.8. What’s Next?

Ensuite, vous verrez comment utiliser QGIS comme frontal pour le célèbre SIG GRASS.