23 avr 2010

MapProxy est un framework OpenSource permettant la gestion des données spatiales. Il permet d'accélérer, de transformer et de tatouer (watermarking) des données provenant de serveurs cartographiques. Côté fonctionnement, il se place entre le serveur et le client (architecture middleware). Dans ce tutoriel, nous installerons tout d'abord MapProxy, ensuite nous le paramétrerons et enfin nous effectuerons nos premiers tests.

Mapproxy middleware architecture
Source : MapProxy

Téléchargement et pré-requis


Il existe différentes manières d'installer un package Python. Vous pouvez faire une installation manuelle en téléchargeant le package source ou alors utiliser la commande shell easy_install (via (python-setuptools sur Debian). Dans ce tutoriel nous utiliserons un environnement virtuel python toute l'étape de téléchargement sera donc quasi automatique. il n'est donc pas nécessaire de télécharger l'archive MapPython.

La première des choses à faire est, bien évidemment, de télécharger MapProxy. Vous pouvez pour cela soit directement télécharger l'archive ou alors utiliser la commande easy_install (via (python-setuptools sur Débian).

Nous allons tout d'abord installer les différentes librairies python que nous allons utiliser :

  • python-virtualenv : Permet de séparer vos différents projets python en créant des instances virtuelles. Cela permet par exemple d'essayer une nouvelle librairie encore en phase bêta sans pour autant polluer et/ou corrompre votre répertoire site-package ou encore de faire fonctionner plusieurs versions de la même librairie.
  • Pip : Tout comme easy_install, Pip permet d'installer des packages python. Ecrit par le même auteur que virtualenv il s'intègre parfaitement à ce dernier.

Si ces termes n'évoquent rien pour vous, je vous conseille la lecture de l'excellent article de Sean Gillies "Bootstrapping a Python project ". Dans le monde "Pythonique", ces deux librairies tendent à devenir incontournables. N'hésitez donc pas à prendre quelques minutes et à bien comprendre les concepts.

Pour les personnes fonctionnant sur Ubuntu un simple sudo aptitude install python-setuptools suffira à installer les librairies ci-dessus.

Enfin pour finir, MapProxy nécessite également l'installation des librairies suivantes :

  • C compiler
  • Python 2.5 or 2.6 (development tools)
  • libjpeg
  • zlib

Nous allons le faire en ligne de commande :

sudo aptitude install build-essential python-dev libjpeg-dev libz-dev libfreetype6-dev

Pour ma part, l'installation s'est faite sur Xubuntu, et ce sont les packages suivants qui m'ont été proposés : libfreetype6-dev, ,libjpeg62-dev et zlib1g-dev.

Voilà tout notre environnement est en place. Il ne reste plus maintenant qu'à installer et paramétrer MapProxy.

Création de l'architecture virtuelle et installation des composants


Nous avions parlé au paragraphe précédent de virtualenv. Nous allons le mettre en application immédiatement. Pour cela, placez-vous dans le répertoire où vous allez réaliser votre installation. Pour notre exemple, dans notre répertoire home, nous allons créer un répertoire envPython qui servira à notre installation.

Une fois dans ce dossier, nous allons créer concrètement notre environnement virtuel puis l'activer. Cela se fait, en ligne de commande, avec les commandes suivantes :


~/envPython$ source mapProxy/
~/envPython$ cd mapProxy/
~/envPython$ source bin/activate
(mapProxy)user@osgeolive:~/envPython$

La dernière ligne vous indique que vous êtes dans votre environnement python virtuel. A partir de maintenant toutes les librairies python que vous installerez seront localisées au sein de votre environnement (dans le répertoire bin). Ainsi elles ne "pollueront" pas votre répertoire site-package "officiel".

Passons maintenant aux librairies, utilisées par MapProxy (encore d'autres ^^), que nous allons installer au sein de notre nouvel environnement python virtuel. Le plus simple est de passer par l'utilitaire pip. Celui-ci va permettre de parser un fichier text et d'installer les librairies qui y sont définies. Pip est normalement installé par défaut dans votre environnement virtuel. Si ce n'est pas le cas (comme sur kubuntu par exemple), faites :

~/envPython/mapProxy$ easy_install pip

Utilisons le maintenant :

~/envPython/mapProxy$ pip install -r http://bitbucket.org/olt/mapproxy/raw/tip/requirements.txt

Quelques minutes plus tard maintenant que tout est installé (enfin !...). Vous pouvez vérifier que tout s'est correctement déroulé en exécutant la commande suivante :


~/envPython/mapProxy$ python -m mapproxy.core.version
0.8.2

Nous pouvons nous attaquer à la configuration de MapProxy.

Initialisation de MapProxy


Rassurez-vous, l'initialisation de MapProxy tient en une ligne de commande. L'utilitaire Paster va en effet créer automatiquement toute l'architecture (skeleton) des dossiers et fichiers nécessaires. Toujours dans votre environnement virtuel faites :

~/envPython/mapProxy$ paster create -t mapproxy_conf mymapproxy

mymapproxy est le répertoire qui contiendra l'applicatif. Au sein de celui-ci 3 nouveaux répertoires ont été créés :

  • etc : contient les fichiers de configuration
  • tmp : comme son nom l'indique, c'est un simple répertoire pour les fichiers temporaires
  • var : contient les fichiers de log et les données

Il ne reste plus maintenant qu'à démarrer notre serveur MapProxy. pour cela faites :


mapProxy$ cd mymapproxy/
mymapproxy$ paster serve etc/develop.ini --reload

Et vous devriez voir affiché le texte suivant :


Starting subprocess with file monitor
2010-04-15 12:12:26,504 - INFO - 2663:mapproxy.core.conf_loader:load_services - Reading services configuration: /home/user/envPython/mapProxy/mymapproxy/etc/services.yaml
Starting server in PID 2663.
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080

Voilà, notre serveur est maintenant démarré. Il tourne en local (localhost ou 127.0.0.1) sur le port 8080. Testons-le immédiatement avec la couche Omniscale OpenStreetMap WMS configurée par défaut. Pour cela dans votre navigateur exécutez la requête suivante : http://localhost:8080/service? . L'image ci-dessous devrait alors vous être retournée.

mapproxy_image_request.png

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 !