2
29 nov 2010

Introduction


Mod-GeoCache est un module Apache OpenSource, écrit en C, permettant de transformer votre serveur en un cache pour les données géographiques. Les options offertes par ce module sont les suivantes :

  • Gestion des services WMS et TMS (WMTS en prévision)
  • Configuration du service de cache
  • Post traitement des images (compression)
  • Possibilité de créer un exécutable FastCGI afin d'être utilisé avec d'autres serveur web
  • ...

Même si quelques fonctionnalités manquent encore (utilitaire pour charger automatiquement des tuiles, découpage des tuiles si le serveur source ne le permet pas...) mod-geocache apparait comme une alternative intéressante au serveur de cache déjà existant (MapProxy, TileCache, GeoWebCache...).

Téléchargement


Premièrement, commençons par télécharger les sources de mod-geocache. Pour cela, rien de plus simple, il suffit d'y accéder en utilisant la ligne de commande suivante :

svn checkout http://mod-geocache.googlecode.com/svn/trunk/ mod-geocache-read-only 

Cela vous permettra de télécharger la dernière version de mod-geocache. Bien évidemment, vous devez auparavant avoir installé l'utilitaire Subversion. En effet, c'est celui-ci qui vous permettra de vous connecter au serveur cible et de récupérer les sources.

Installation


Les sources récupérées, jetons maintenant un oeil au fichier d'install. La procédure n'a pas l'air très compliquée et commençons immédiatement à lancer la compilation avec le traditionnel, configure, make et make install. La dernière instruction (make install) doit être lancée en tant que root.

Toute la procédure s'est déroulée correctement et je n'ai eu aucune difficulté à installer mod-geocache sur ma Xubuntu version Arramagong.

Paramétrages d'Apache


Toujours en suivant les instructions du fichier Readme, j'ajoute la directive ci-dessous au fichier de configuration d'Apache (apache2.conf dans mon cas) :

LoadModule geocache_module mod_geocache.so   
SetHandler geocache GeoCacheConfigFile "/home/user/App/geocache/mod-geocache-read-only/geocache.xml"

Je redémarre ensuite mon serveur Apache en croisant les doigts pour que tout fonctionne. Mais malheureusement, tout ce que j'obtiens est un message d'erreur :

 ... waiting .apache2: Syntax error on line 237 of /etc/apache2/apache2.conf: Cannot load /etc/apache2/mod_geocache.so into server: /etc/apache2/mod_geocache.so: cannot open shared object file: No such file or directory 

Comme il ne trouve pas le module mod_geocache.so, je tente alors de mettre le chemin complet. Et là, tout fonctionne ! Bien évidemment, la directive GeoCacheConfigFile est à modifier en fonction de votre installation :

LoadModule geocache_module /usr/lib/apache2/modules/mod_geocache.so   
SetHandler geocache GeoCacheConfigFile "/home/user/App/geocache/mod-geocache-read-only/geocache.xml"

Notre installation et le paramétrage étant réalisés passons maintenant à la configuration et au test de notre cache WMS.

Configuration du fichier XML geocache.xml


Toute la configuration de notre nouveau service se fait via le fichier geocache.xml fourni avec les sources de mod-geocache. Ce fichier se décompose en grandes familles d'éléments :

  <source> ....</source> 
<cache> ...</cache>  
<format> ...</format>  
<tileset> ...</tileset>  
<services> ...</services>
 

Regardons le rôle de chacun d'entre eux.

Source

La balise source indique à mod-geocache l'adresse du serveur à interroger pour obtenir les images. Pour le moment seul le protocole WMS est implémenté (d'autres devraient suivre par la suite).

   http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi  nexrad_base_reflect true image/png  

La balise source est identifiée par un nom (name) (qui servira d'identifiant) et par un type (type). Les sous-paramètres nécessaires sont ensuite l'URL (url) du service à interroger, le nom de la couche (LAYERS), son format (FORMAT) et si il est nécessaire ou non de prendre en compte la transparence (TRANSPARENT). Selon vos besoins les paramètres usuels du protocol WMS (version, style...) peuvent être ajoutés à la sous-balise wmsparams. Notez que ce n'est pas un hasard si les éléments de wmsparams soient en majuscules. En effet, le protocole WMS impose cette nomenclature. Veillez à la respecter.

Cache

La balise cache indique à mod-geocache l'endroit où seront stockées les images. Pour le moment, mod-geocache ne supporte que le stockage sur disque.

   /tmp 

La balise cache est identifiée par un nom (name) (qui servira d'identifiant) ainsi que par un type (type) Celle-ci contient ensuite une sous-balise (base) indiquant l'endroit l'endroit où seront stockées les images. Bien évidemment, ce dossier doit accessible en lecture et en écriture par l'utilisateur ayant lancé Apache.

Format

La balise format, correspond, comme son nom l'indique, au format de l'image qui sera générée. Pour le moment seuls les formats JPEG et PNG sont supportés par mod-geocache.

   ... format options ....  

La balise format est identifiée par un nom (name) et par un type (type). Ce dernier (type) peut prendre comme valeur JPEG ou PNG. Ensuite il est possible de définir un certains nombre de sous-options. Celles-ci sont définies en fonction du format (JPEG, PNG) utilisé : PNG

  • <compression>fast|best|default</compression> : type de rendu utilisé
  • <colors>value</colors> : spécifie le nombre de couleurs à utiliser. La valeur spécifiée doit être comprise entre 2 et 256

JPEG

  • <quality>value</quality> : définit le taux de compression de l'image. La valeur doit être comprise entre 1 et 100

Services

Le paramétre Services permet de spécifier le type de requête qui seront autorisées.

  true|false true|false 

Tileset

La balise Tileset est l'élément essentiel de notre fichier de configuration. Celle-ci s'appuie en partie sur les balises (cache, format, source) que nous avons déjà présenté. Concrètement, elle est la ressource qui sera appelée dans notre requête vers mod-geocahe.

   basic epsg:4326 disk PNG 256 256  0.703125 0.3515625 0.17578125 0.087890625 0.0439453125 0.02197265625 0.010986328125 0.0054931640625 0.00274658203125 0.001373291015625 0.0006866455078125 0.00034332275390625 0.000171661376953125 0.0000858306884765625 0.00004291534423828125  -180 -90 180 90 5 5 30  

Cette balise est identifiée par un attribut (name) qui nous servira lors de la requête vers mod-geocache. Les trois paramètres, Source (<source>...<source>), Cache (<cache>...</cache>) et Format (<format>...</format>) font référence aux éléments parents que nous avons déjà spécifiés. Les paramètres suivants sont maintenant spécifiques à notre service :

  • Size (<size>...</size>) : correspond à la taille des images à créer
  • Résolutions (<resolutions>...</resolutions>) : spécifie les différentes résolutions qui peuvent être retournées au client. Elles sont exprimées en unité par pixel.
  • Extent (<extent>...</extent>) : définit l'extension de la zone.
  • Metabuffer (<metabuffer>...</metabuffer>) : nombre de tuiles supplémentaires qui seront ajoutées lors de la création de la tuile.

Test du service mod-geocache


Voilà, maintenant que nous connaissons l'architecture de notre fichier de configuration effectuons quelques tests. Par défaut, trois tileset (test, test2 et test3) sont déjà paramétrés. Essayons les immédiatement :

Par exemple, la requête suivante http://localhost/geocache?LAYERS=test... retournera l'image ci-dessous :

geocache_test.png

Nous avons essayé ensuite de mettre en place notre propre service. Malheureusement nous n'y sommes pas parvenu. Notre serveur nous retourne une erreur "400 : Bad Request". Cela provient très certainement d'une mauvaise configuration de notre tileset, mais l'absence de message d'erreur ne nous a pas permi de trouver d'où provenait celle-ci.

Conclusion


Notre test de mod-geocache s'est soldée par une impression partagée. En effet, nous avons tout d'abord été séduit par la facilité d'installation. Mais, la configuration via le fichier XML devient rapidement laborieux. De plus l'absence de message d'erreur est également un frein. Il nous reste à attendre la prochaine version de cet utilitaire qui apportera, nous l'espérons, son lot de nouveautés.

A propos de l'auteur: 
Arnaud Vandecasteele

Fervent défenseur de l'Open Source, Arnaud s'est spécialisé dans le développement d'application cartographiques web. OpenLayers, PostGIS ou encore Django sont autant d'outils qu'il manipule au quotidien.
S'il n'est pas en face de son ordinateur, vous le retrouverez un GPS à la main en train de cartographier pour OpenStreetMap, de faire voler son drone ou sur un tatami !

Commentaires

salut arnaud,
concernant les erreurs que tu as eu, il y a qq etapes que tu peux entreprendre pour essayer d'y voir plus clair.
pour le moment, les messages d'erreur ne sont pas remontés a l'utilisateur final, mais sont cantonnés aux logs apache. A terme, je compte laisser le choix a l'administrateur: soit laisser une trace de l'erreur dans les logs (comme maintenant), soit remonter l'erreur a l'utilisateur, et dans ce cas soit au format texte, soit directement dans une image (comme ca le message d'erreur est directement visible dans le visualisateur carto de l'utilisateur).
concretement dans ton cas, tu a deux etapes a faire pour voir ce qui se passe:
* optionnelement recompiler ton mod-geocache avec --enable-debug, qui va imprimer plus de messages d'erreur
* modifier ta config apache et changer ton LogLevel, en le passant a Info ou Debug. Tes erreurs seront affichées ensuite dans tes logs normaux ( a priori /var/log/apache2/error_log)

a+,
thomas

Merci Thomas pour toutes ces informations, je vais profiter du we pour effectuer de nouveaux tests et modifier le tuto en conséquence.

Arnaud