Niveau | Expert |
Logiciels utilisés |
Python PyWPS R Rpy2 Apache |
Plateforme | Windows |
Par Pauline CROMBETTE – Julien ESCANDE – Emeric PROUTEAU, Sigma 2010.
Ce tutoriel fait suite à l’article de Laurent JÉGOU, expliquant la mise en place d’un webservice (WPS) de discrétisation. Une procédure identique a été réalisée mais cette fois-ci sous Windows XP.
L’objectif est d’utiliser plusieurs solutions logicielles (langage Python, Logiciel R avec les packages utiles, bibliothèque RPy², serveur PyWPS, serveur Mapserver).
Configuration du matériel
La mise en place de ce type de serveur ayant déjà été réalisée sous plateforme Linux Debian, la
procédure d’installation proposée ici utilise un OS Windows XP.
Ne disposant pas de serveur distant utilisant une configuration Windows, ce service a pour le
moment été uniquement testé en local avec un serveur Apache.
Installation de Python.
Procédure simple sous Windows, il suffit de télécharger le fichier Python 2.6.4 Windows installer et de lancer l’exécutable. Ce logiciel a été installé sous le répertoire C:
Installation de R et des packages utiles :
Le logiciel R va permettre d’effectuer les traitements statistiques et notamment les discrétisations. Pour pourvoir l’utiliser en tant que serveur WPS, il faut lui rajouter des packages (des bibliothèques de fonctions pour R).
Sous Windows XP, il faut télécharger le fichier R-2.10.1.tar.gz et lancer directement l’exécutable sous le répertoire C :
Il faut ensuite télécharger les packages optionnels suivants :
- e1071.zip (version 1.5-22) (Windows binary),
- classInt.zip (version 0.1_14) (Windows binary),
- XML_2.6-0.zip (version 2.6-0). Ce package n’étant pas disponible directement sur le site officiel, il est néanmoins possible de se procurer une version compilée.
Après avoir dézippé ces packages, il faut ensuite les copier dans le dossier C:/R/library
Afin de vérifier l’installation, il est possible de tester la présence des bibliothèques en tapant la série de commandes suivante dans l’invite de commande de R :
library(e1071)
library(classInt)
library(XML)
data(jenks71)
classIntervals(jenks71$jenks71, n = 4, style= » jenks »)
Les trois premières commandes chargent les bibliothèques, la commande data() récupère un jeu de données tests et la dernière effectue la discrétisation sur 4 classes en utilisant la méthode de jenks. Le résultat obtenu est le suivant :
style: jenks one of 161,700 possible partitions of this variable into 4 classes [15.57,41.2] (41.2,68.45] (68.45,100.1] (100.1,155.3] 35 43 19 5
Installation la bibliothèque de fonctions RPy²
Cette bibliothèque va permettre d’exécuter des commandes et des fonctions R directement dans
Python. Pour cela, il faut télécharger et installer la bibliothèque de fonction Rpy2 2.0.8 (.msi) en lançant directement l’exécutable.
Installation d’un serveur Apache
Afin d’utiliser le serveur WPS il faut disposer d’un serveur HTTP tel Apache. Puisque par la suite, nous aurons besoin d’un serveur cartographique, nous avons choisi d’installer MapServer qui inclut un serveur Apache.
Pour cela, il faut télécharger et installer MapServer for Windows (ms4w) version 2.3.1 sous le
répertoire C :
On peut vérifier la bonne installation d’Apache en démarrant le serveur grâce au fichier apacheinstall.bat et en tapant localhost dans la barre d’adresse du navigateur internet. La page d’accueil de Mapserver doit alors s’afficher.
Installation et configuration de PyWPS
La première étape consiste à télécharger htmltmpl 1.22 for python qui sera nécessaire par la suite
puis dézipper dans htdocs (qui constitue désormais notre dossier de travail)
Ouvrir la fenêtre de commandes windows et installer le module en utilisant la commande :
CHEMIN_INSTALLATION_HTMLTMPL setup.py install
Les fichiers seront ensuite directement installés dans python.
La seconde étape consiste à télécharger PyWps 3.1.0.
Il faut ensuite dézipper ce fichier dans htdocs du serveur Apache et renommer le fichier obtenu (par ex wps) pour faciliter la configuration.
Il est désormais possible de procéder à l’installation de PyWps. Pour cela taper la commande
suivante :
CHEMIN_INSTALLATION_PyWps setup.py install
A ce moment, une erreur risque de se produire, du type errno 13 qui serait due à une erreur dans le fichier htmltmpl.py line 284 dans le dossier python :
File «C:\Python26\lib\site-packages\htmltmpl.py», line 284, in lock_file msvcrt.locking(fd, msvcrt.LK_UNLCK, 1) IOError: [Errno 13] Permission denied
Si tel est le cas, la solution proposée est la suivante : ouvrir le fichier setup.py présent dans le dossier d’installation de PyWPS (dans le répertoire Apache) et modifier la ligne 121 de la façon suivante :
Template = Templatemanager (precompile = 0).prepare(template_file)
L’installation peut ensuite être relancée avec la ligne de commande citée précédemment.
Si tout s’est bien passé, la troisième étape consiste alors à configurer le serveur.
Pour ce faire, il faut créer une copie du fichier wps.py contenu dans le dossier Apache et le copier dans le dossier cgi-bin d’Apache.
Il faut ensuite configurer le fichier httpd.conf présent dans le dossier conf sous Apache. Pour cela, ajouter à la fin du fichier les variables systèmes suivantes :
SetEnv PYTHONPATH C:\Python26 SetEnv PYWPS_PROCESSES C:\ms4w\Apache\htdocs\wps\pywps\processes SetEnv PYWPS_CFG C:\ms4w\Apache\htdocs\wps\pywps\default.cfg SetEnv R_HOME C:\R\R-2.10.1 SetEnv RPATH C:\R\R-2.10.1\bin
La prochaine étape consiste à éditer le fichier default.cfg dans le répertoire wps/pywps.
[wps] encoding=utf-8 title=PyWPS Server version=1.0.0 abstract=See http://pywps.wald.intevation.org and http://www.opengeospatial.org/standards/wps fees=None constraints=none serveraddress=http://localhost/cgi-bin/wps.py keywords=GRASS,GIS,WPS lang=eng [provider] providerName=SIGMA individualName=SIGMA10 positionName=Student role=Student deliveryPoint=Mirail city=Toulouse postalCode=31000 country=fr electronicMailAddress=login@server.org providerSite=http://foo.bar phoneVoice=False phoneFacsimile=False administrativeArea=False [server] maxoperations=3 maxinputparamlength=1024 maxfilesize=3mb tempPath=C://tmp processesPath=C:/ms4w/Apache/htdocs/wps/processes outputUrl=http://localhost/wps/wpsoutputs outputPath=C:/ms4w/Apache/htdocs/wps/wpsoutputs debug=true logFile=c:/tmp/pywps.log [grass] path=/usr/lib/grass/bin/:/usr/lib/grass/scripts/ addonPath= version=6.2.1 gui=text gisbase=/usr/lib/grass/ ldLibraryPath=/usr/lib/grass/lib gisdbase=grassdata/
Afin de vérifier le bon fonctionnement du serveur en local, il est possible de lancer une requête
GetCapabilities pour récupérer les processus disponibles par défaut :
http://localhost/cgi-bin/wps?version=1.0.0&service=Wps&request=Getcapabilities
Nous avons installé le serveur wps dans le fichier htdocs d’Apache. Mais par sécurité il vaudrait
mieux l’installer dans un répertoire protégé, inaccessible depuis l’index.
Mise en place d’un Process de discrétisation
L’objectif ici est de créer un nouveau process qui sera ensuite ajouté aux autres capacités du serveur.
La première étape consiste donc à écrire, en langage Python, ce fichier et à l’insérer dans le
répertoire processes du serveur PyWPS.
Ce fichier, TestRProcess.py, adapté du tutoriel de Laurent JÉGOU et fonctionnant sous OS Windows, est présenté ci-joint.
Il faut ensuite ajouter ce process à la liste du fichier __init__.py dans le dossier pywps/processes.
L’installation va également nécessiter d’ajouter un dossier temp sous le répertoire C :
Il sera peut être aussi nécessaire d’installer le module PyWin32 – 214 (requis après avoir obtenu un message d’erreur) et d’ajouter des variables environnement directement dans le système Windows.
La procédure à suivre est la suivante :
- clic droit sur le poste de travail – Propriétés,
- sélectionner l’onglet Avancé puis cliquer sur Variables d’environnement
- dans la variable Path, rajouter le chemin du logiciel Python, à savoir dans notre cas :
C:\Python26
Tests du process WPS
Le process doit apparaître dans la réponse à la requête GetCapabilities :
http://localhost/cgi-bin/wps.py?version=1.0.0&service=Wps&request=Getcapabilities
A la requête DescribeProcess :
http://localhost/cgibin/
wps.py?version=1.0.0&service=Wps&REQUEST=DescribeProcess&Identifier=testRProcess
Et enfin à la requête de traitement, en lui fournissant l'url d'un fichier XML contenant la variable à discrétiser :
http://localhost/cgibin/
wps.py?version=1.0.0&service=Wps&request=Execute&Identifier=testRProcess&datainput
s=nbClasses=6;methode=jenks;donnees=http://www.geotests.net/test/jenks/values.xml
Pour tester le bon fonctionnement de ce process, on peut créer une requête selon méthode URL ou POST (.php) dont voici un exemple : testWPS.php
Site officiel : Master SIGMA