PyWPS
PyWPS je jedna z open source implementací standardu Web Processing Service (WPS) definovaného konsorciem OGC. Mezi další open source implementace patří např. ZOO project a 52°North.
Ukázka
V následující ukázce implementujeme jednoduchou službu pro výpočet viditelnosti pomocí GRASS nástroje r.viewshed:
- první verze - bez parametrů, výstupem je výměra území viditelného z daného bodu
- druhá verze - se vstupními parametry, výstupem je výměra území viditelného z daného bodu
- třetí verze - se vstupními parametry, výstupem je rastrová mapa viditelnosti ve formátu PNG
- čtvrtá verze - propojení s webovou aplikací
Poznámky k instalaci
Debian/Ubuntu
Stáhneme zdrojové kódy PyWPS do adresáře /usr/local/.
cd /usr/local git clone https://github.com/geopython/PyWPS.git pywps
Dále vytvoříme odkaz na spustitelný soubor aplikace
ln -s /usr/local/pywps/wps.py /usr/local/bin/pywps.py
a v adresáři /usr/lib/cgi-bin vytvoříme CGI skript pywps.cgi
#!/bin/sh
export PYWPS_CFG=/usr/local/pywps/pywps.cfg
export PYWPS_PROCESSES=/usr/local/pywps/processes
/usr/local/bin/pywps.py
Skript musí mít přiřazeny práva spustitelnosti.
chmod +x pywps.cgi
V adresáři /usr/local/pywps/ vytvoříme adresář processes, kam budeme umísťovat skript implementující poskytované služby.
mkdir /usr/local/pywps/processes
Tento adresář musí navíc obsahovat soubor __init__.py. Tento soubor obsahuje seznam dostupných skriptů poskytujících jednotlivé služby.
__all__ = [ "viewshed-1",
"viewshed-2",
"viewshed-3",
"viewshed-4"
]
Vytvoříme soubor s konfigurací (/usr/local/pywps/pywps.cfg).
[wps] encoding=utf-8 title=PyWPS Geo102 Server version=1.0.0 abstract=Sample WPS provider. See http://geo.fsv.cvut.cz/freegis/PyWPS, http://pywps.wald.intevation.org and http://www.opengeospatial.org/standards/wps. fees=none constraints=none serveraddress=http://geo102.fsv.cvut.cz/cgi-bin/pywps.py keywords=GRASS,GIS,WPS lang=en-US [provider] providerName=CTU in Prague, Faculty of Civil Engineering, Deparment of Geomatics individualName=Martin Landa positionName=GIS Lecturer deliveryPoint=Thakurova 7 city=Prague postalCode=166 29 country=cz electronicMailAddress=martin.landa@fsv.cvut.cz providerSite=http://geo102.fsv.cvut.cz/cgi-bin/pywps.cgi phoneVoice=False phoneFacsimile=False administrativeArea=False hoursofservice=0:00-24:00 contactinstructions=none [server] maxoperations=30 maxinputparamlength=1024 maxfilesize=3mb tempPath=/tmp processesPath= outputUrl=http://geo102.fsv.cvut.cz/pywps/outputs outputPath=/var/www/pywps/outputs logFile=/var/log/pywps.log logLevel=INFO [grass] path=/home/landa/src/grass_trunk/dist.x86_64-unknown-linux-gnu/bin/:/home/landa/src/grass_trunk/dist.x86_64-unknown-linux-gnu/scripts/ addonPath= version=7.0.0 gui=text gisbase=/home/landa/src/grass_trunk/dist.x86_64-unknown-linux-gnu ldLibraryPath=/home/landa/src/grass_trunk/dist.x86_64-unknown-linux-gnu/lib gisdbase=/work/geodata/grassdata [mapserver] mapserveraddress=http://geo102.fsv.cvut.cz/cgi-bin/mapserv projdatapath=/usr/share/proj projs=epsg:4326,epsg:102067,epsg:3059,epsg:900913
Vytvoříme adresář, do které bude zapisovat PyWPS výstupní soubory a nastavíme příslušná práva.
mkdir -p /var/www/pywps/outputs chown www-data:www-data /var/www/pywps/outputs
Připomeňme, že musí mít uživatel www-data právo zápisu do používané GRASS lokace.
chmod g+w /work/geodata/grassdata/nc_spm_08_grass7/
Ladění
Ve fázi ladění (debuging) nastavíme v konfiguračním souboru pywps.cfg na:
logLevel=INFO
Poté se ladící zprávy typu:
import logging
...
def execute(self):
...
# vypiš aktuální výpočetní region
logging.debug(read_command('g.region', flags='p'))
...
budou při spuštení služby (request=execute) zapisovat do souboru s logem (viz logFile
v souboru pywps.cfg), např.
PyWPS [2014-03-13 12:40:43,508] DEBUG: projection: 99 (Lambert Azimuthal Equal Area) zone: 0 datum: etrs89 ellipsoid: grs80 north: 6545921.33 south: 6539921.33 west: 1547820.86 east: 1553820.86 nsres: 25 ewres: 25 rows: 240 cols: 240 cells: 57600
Udržba serveru
Pokud proces na straně serveru vytváří výstupní data jako např. třetí verze služby pro výpočet viditelnosti, tak je vhodné adresář s těmito daty pravidelně promazávat.
Následující skript smaže z adresáře /var/www/pywps/outputs všechny soubory starší než 15 minut:
#!/bin/sh
DIR=/var/www/pywps/outputs
find $DIR -name '*' -type f -mmin +15 -delete
exit 0
Tento skript se automaticky spustí každých 15 minut pomocí služby cronjob:
*/15 * * * * /cesta/ke/skriptu