PyWPS

Z FreeGIS portál
Přejít na: navigace, hledání

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

Externí odkazy