Skip to Content

Installation d'un serveur WPS sous Windows, avec PyWPS et R

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

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.