17
03 sep 2010

QGIS est l'un voir même, à mon sens, le meilleur logiciel SIG OpenSource existant actuellement. Ses possibilités ainsi que les plugins dont il dispose font qu'il offre toutes les fonctionnalités dont a besoin un géomaticien pour son travail quotidien. La dernière nouveauté que j'ai pu découvrir, grâce au blog linfiniti, est la possibilité de créer et de publier des services WMS directement depuis QGIS. Cette fonctionnalité a été développée par l'institut cartographique de Zurich dans le cadre du projet orchestra. Vous pourrez ainsi, directement depuis votre logiciel SIG, définir le style de vos couches avant de les exporter sur Internet.

Installation et paramétrages

La communication entre QGIS Mapserver et notre serveur Web s'appuie sur le protocole CGI/FCGI. Commençons alors par l'installer :

sudo apt-get install libfcgi-dev

Attaquons-nous maintenant à l'installation de QGIS Mapserver. Deux solutions s'offrent alors à vous : la compilation ou l'utilisation du dépôt ubuntugis. Pour ma part, j'ai opté pour la solution numéro deux, bien plus facile et surtout beaucoup plus sûre.

sudo apt-get install qgis-mapserver

Une fois le téléchargement et l'installation terminés, vous trouverez, dans le répertoire /usr/lib/cgi-bin/, le fichier qgis_mapserv.fcgi. C'est ce dernier qui va interpréter les requêtes WMS et les retourner ensuite sous forme d'images.

Contrairement aux instructions données sur le blog linfiniti, je n'ai pas eu besoin de spécifier à mon serveur où se trouve le fichier qgis_mapserv.fcgi. En effet, ayant effectuée une installation classique, celui-ci a été automatiquement placé dans mon répertoire cgi.

Création du projet QGIS

Alors là rien de plus simple ! Démarrez tout simplement QGIS et créez un projet quelconque. Afin de vous montrer toute l'étendue de cette nouvelle fonctionnalité, j'ai effectué une analyse thématique. Vous verrez qu'au moment de la création du service WMS, le style que nous avons spécifié sera préservé.

Création du service WMS

Allez, dernière ligne droite. Commençons par créer un nouveau dossier dans notre répertoire cgi-bin. La règle pour QGIS MapServer est : un projet égal un dossier. Nous appellerons le nôtre "world-analyse". Maintenant, il reste à créer trois liens symboliques. Le premier pointant vers script qgis_mapserv.fcgi, le second vers votre projet QGIS et enfin le dernier vers le fichier wms_metadata.xml. Vous pourrez personnaliser ce dernier fichier en y ajoutant les différentes informations concernant le producteur de la donnée (nom de l'organisme, nom du référent...).

/usr/lib/cgi-bin/world-analyse$ sudo ln -s /home/arnaud/GisData/world_analyse.qgs . 
/usr/lib/cgi-bin/world-analyse$ sudo ln -s ../qgis_mapserv.fcgi . 
/usr/lib/cgi-bin/world-analyse$ sudo ln -s ../wms_metadata.xml .

Test du service WMS

Et voilà tout est maintenant en place. Interrogeons maintenant notre serveur et ce qu'il est capable de faire :

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

Une rapide vérification du fichier XML généré m'apprend que ma couche est bien présente :

 
    
     
        TM_WORLD_BORDERS-0.3TM_WORLD_BORDERS-0.3
         
        EPSG:102067 EPSG:2000 EPSG:93023 EPSG:93024 <ex_geographicboundingbox> -180 180 -90 83.6236   

Muni de ces informations, je peux maintenant effectuer ma requête WMS GetMap afin de visualiser l'image retournée sur mon navigateur :

 
http://localhost/cgi-bin/world-analyse/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap &BBOX=100,-180,-90,100&CRS=EPSG:4326&WIDTH=800&HEIGHT=400&LAYERS=TM_WORLD_BORDERS-0.3 &STYLES=,,&FORMAT=image/jpeg&DPI=96

Et, tada ! Voilà le résultat : Comme vous pouvez le constater, une fois la procédure connue, cela ne prend pas plus de 2 minutes à créer et diffuser un nouveau service WMS. De plus, le fait de pouvoir définir le style des couches directement depuis QGIS apporte une réelle souplesse d'utilisation. Néanmoins, il reste à connaitre maintenant les performances de ce serveur cartographique. Le benchmark organisé lors du prochain FOSS4G devrait très certainement nous apporter des informations intéressantes.

img_slideshow: 
A propos de l'auteur: 
GeoTribu

Toute l'actualité de la géomatique Open Source ! Mais aussi des tutoriels, des billets de blog, des tests et surtout une bonne humeur géographique !

Commentaires

Bonjour,

ceci fonctionne bien avec mapserver et qgis d'installer sur un même poste. Mais peut-on faire aussi simple pour travailler avec un qgis sur un poste de développement mais mapserver sur un serveur debian en prod chez un hébergeur(administré en console) ?
Gil

Euhhhh... J'ai peur de ne pas comprendre très bien la question !

Il me semble comprendre ce qu'il a voulu dire. Il est bien entendu tout à fait possible de fonctionner avec QGIS sur un poste bureautique pour réaliser la carte, puis de transférer tout ce qu'il faut sur un serveur (fichier de projet qgs et données associées). Sur le serveur ubuntu il faut simplement installer les paquets qgis et qgis-mapserver (je pense que ça doit être pareil sous Debian). A noter que l'installation du paquet qgis ne requiert aucune dépendance sur un environnement graphique donc ça ne pose aucun problème pour un serveur qui en est dépourvu. C'est vrai que dans le cadre de ton article Arnaud tu avais pris l'exemple avec tout installé sur la même machine, ce qui a dû semer le doute dans l'esprit de celui qui a posé la question.

Nicolas

Bonjour,
Je pense avoir bien suivi votre doc, tout se passe bien, sauf à partir du Test du service WMS :

Aucune information de style ne semble associée à ce fichier XML. L'arbre du document est affiché ci-dessous.

Configuration file problem

Ubuntu 10.10 (.28) 64BITS
Apache OK : localhost -> it works

Que faire, SVP?

Merci

Bonjour,

j'ai eu le problème et j'ai réussis à le résoudre de cette façon (je n'ai pas de réponse précise mais quelque chose parmis tous ça fonctionne) :

avant tout, tente de relancer apache2 :
sudo /etc/init.d/apache2 restart

et sinon, j'ai du faire ça

sudo apt-get install libfcgi-dev apache2-mpm-worker libapache2-mod-fcgid libapache2-mod-wsgi python-psycopg2 python-webob
sudo dpkg-reconfigure libapache2-mod-wsgi python-psycopg2 python-webob

J'éspère que ça t'aidera

Bonjour,

Je vous remercie pour la réponse apportée.

Arnaud

Bonjour,

Merci pour l'article vraiment bien expliqué.

Moi aussi j'ai le même problème de fichier XML qui ne veut pas se générer ("Configuration file problem").

J'ai appliqué ce que vous avez conseillé mais toujours pareil.

Il faut que je teste autre chose car j'ai (ou plutôt l'ami qui voudrait mettre ça en place) ouvert un projet qgis où il y a plusieurs couches (me demandez pas, c'est pas moi l'expert de ça ^^) et j'ai tout suivi...mais impossible de passer outre ce problème.

Je vais tester avec un projet "bidon" sans couches pour voir si cela peut venir du projet trop complexe à traiter pour mapserver (ou pas compatible ?)

Bonjour,

Est-ce qu'une procédure existe pour Windows ? J'aimerais tester sur mon poste de travail en local.

Honnêtement, j'aurais beaucoup de mal à répondre car cela doit faire au moins 4 ans que je n'ai pas utilisé windows.
Néanmoins, je pense que la procédure ne doit pas être différente.

Arnaud

Super ce tuto... une nouvelle fois !
J'ai un petit soucis : la mise en place du serveur est ok mais aucune de mes couches ne s'affichent dans le GetCapabilities. J'ai donné tous les droits sur mon répertoire 'analyse' au cas où, mais rien à faire. J'ai dù manqué un truc...

Il faut bien vérifier les chemins d'accès aux données dans ton qgs en particulier si tu le crée sous Windows.. Les chemins doivent ensuite être modifier pour être accessible via ton serveur Linux sur lequel est installé qgis

Salut Arnaud,

Merci pour cet article sur QGIS-Server. Je suis en train de découvrir ce serveur carto et c'est vraiment pas mal !
Aujourd'hui j'ai bossé avec René-Luc (3LIZ) pour mettre en place un serveur carto à la MTD. Nous avons utilisé QGIS-Server pour la mise en place de couches de tuiles "relief ombré" et "courbes de niveaux". Ca fonctionne sans problème pour la projection EPSG:900913 de Google et OSM. Sauf que pour mon projet en particulier, j'ai besoin de ces couches en projection geoportail IGNF:GEOPORTALFXX. Tout est déclaré correctement dans le fichier .qgs, mais quand on fait la même requête GetMap qui marchait avec les 2 autres projections, on obtient une belle "Internal Server Error 500"...
On s'est pris la tête un sacré bout de temps avec René-Luc sans arriver à trouver pourquoi qgis-server part en sucette sur cette projection alors qu'il n'y a aucun problème sous qgis. Est-ce que par le plus grand des hasards tu aurais une idée ? Je ne pense pas que tu ai travaillé avec cette projection, mais on ne sait jamais ;-)

Nicolas

Salut Nicolas,

Malheureusement je ne pourrai pas t'être d'une grande aide car je n'ai jamais essayé d'intégrer des couches provenant de l'IGN.
Néanmoins, si tu trouves la solution nous sommes preneur. J'essayerai de tester cela de mon côté.

Arnaud

Bonjour à tous,
je cherche, je lis, j'essaie... mais je ne m'en sors pas.
J'ai installé un ubuntu 11 + apache + qgis server
J'ai toujours une satané page blanche quand je lance la visualisation de ma carte.
alors, je vous fais grace de l'url, mais d'après ce que j'ai pu lire et déduire, il s'agirait d'un problème de droits sur le répertoire dans lequel va se générer l'image retournée.
ok... mais quel est sous ubuntu avec un serveur apache ce fameux répertoire ?
merci par avance

Jérôme

Bonsoir
comment est fait le rapport entre :

et

BBOX=100,-180,-90,100&CRS=EPSG:4326&WIDTH=800&HEIGHT=400

je séche...
car je change certains paramètres pour comprendre, et ça réagit sans que je ne puisse comprendre la raison

Par avance merci

J

"Cela réagit sans que je ne puisse comprendre" Pour paraphraser cet épisode désormais culte de strip tease [1], cela fonctionne paranormalement :)

Blague mise à part, je vous rassure il n'y a rien de mystique dedans. Votre serveur cartographique interprète tout simplement les paramètres donnés dans l'URL. Ces paramètres sont standardisés par la norme WMS.

Arnaud

[1] http://www.youtube.com/watch?v=csMg5-c2W1E

bonjour,

y a t il une possibilité de réaliser un filtre sur la table pour ne voir afficher que certaine donner?merci pour ce tuto