WPS: Unterschied zwischen den Versionen
Stefan (Diskussion | Beiträge) |
Stefan (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 25: | Zeile 25: | ||
Bemerkung: Es sollte mit nicht allzu grossem Aufwand möglich sein, einen Server-Software-Komponente um PostGIS herum zu konfigurieren oder ggf. schreiben. Das sollte man mal mit PyWPS oder ZOO probieren! | Bemerkung: Es sollte mit nicht allzu grossem Aufwand möglich sein, einen Server-Software-Komponente um PostGIS herum zu konfigurieren oder ggf. schreiben. Das sollte man mal mit PyWPS oder ZOO probieren! | ||
== Notizen zu PyWPS == | |||
PyWPS implementiert OGC WPS 1.0.0 in Python | |||
* standardisiert die Beschreibung und Ausführung von entfernten Prozessen mit Fokus auf räumlichen Daten/Operationen | |||
* Hat native GRASS-Schnittstelle | |||
Hier zwei Beispiel-Prozesse | |||
* Export: QGIS => Geo-DB | |||
* Import: Geo-DB => QGIS | |||
Beispiel (aus [http://wiki.postgresql.org/images/9/98/PGDay2010_-_ILMSraster.pdf Christian Schwartze, PGDay.eu 2010]): | |||
class Process(WPSProcess): | |||
def __init__(self): | |||
WPSProcess.__init__(self, identifier = "import_img", title= "Grid Calculation", | |||
version = "0.1", statusSupported = True) | |||
self.img = self.addComplexInput(identifier = "img", title = "Raster image", | |||
abstract = „Raster file for import", maxmegabites = "500", | |||
formats=[{"mimeType":"image/tiff"}]) | |||
self.pyramids = self.addLiteralInput(identifier = "pyramids", | |||
title = "Number of pyramid levels", type = types.IntType) | |||
self.gridsize = self.addLiteralInput(identifier = "gridsize", | |||
title = "Block size in cells", type = types.IntType) | |||
[…] | |||
self.debugOut = self.addLiteralOutput(identifier = "debug", | |||
title = "Debug Output", type = types.StringType) | |||
def execute(self): | |||
self.cmd("r.in.gdal input=%s output=img location=newloc" %(self.img.value)) | |||
self.cmd("g.gisenv set=LOCATION_NAME=newloc") | |||
[…] | |||
self.cmd("r.to.vect input=img_mask output=img_mask_v feature=area") | |||
[…] | |||
self.cmd("db.execute ‘ALTER TABLE ObereGera ADD COLUMN ax DOUBLE PRECISION’”) | |||
[…] | |||
self.cmd(“awk ...”) | |||
[…] | |||
self.debugOut.setValue("INFO: " + self.cmd("g.gisenv LOCATION_NAME")) | |||
return | |||
== Liste von 'freien' WPS-Servern == | == Liste von 'freien' WPS-Servern == | ||
Version vom 1. Februar 2011, 22:17 Uhr
Die OGC Web Processing Service (WPS) Spezifikation von OGC und ISO 19100 bietet einen Zugriff auf räumliche Methoden übers Internet. Es ist eine Maschine-Maschine-Service-Schnittstelle, um Prozesse zu veröffentlichen, zu finden und zu binden und zwar in einer standardisierten Art.
Siehe auch:
Kurzbeschreibung
WPS unterstützt GET, POST und kann auch mit dem SOAP-Standard genutzt werden. Obwohl WPS speziell für die Arbeit mit räumlich referenzierten Daten konzipiert wurde, ist die Spezifikation geeignet für jede Art von Daten.
WPS definiert drei Operationen:
- Der Request GetCapabilities liefert als Response Metadaten in XML zurück.
- Der Request DescribeProcess liefert eine Beschreibung eines Prozesses in XML zurück, einschliesslich der Ein-und Ausgaben.
- Der Request Execute löst den Prozess aus, dessen angekündigten Response .
WPS lässt sich beispielsweise mit den Open Source-Projekten PyWPS (siehe Python) und GRASS recht einfach realisieren.
WPS-Software (Open Source)
- PyWPS (Python): http://pywps.wald.intevation.org/ (mailing list pywps-devel)
- ZOO (C): http://www.zoo-project.org/
- Deegree (Java): http://demo.deegree.org/deegree-wps
- 52°North (Java): http://swing.brgm.fr:8080/wps_1_0/WebProcessingService
=> Siehe auch OGC's Compliance Testing Results 2010
Bemerkung: Es sollte mit nicht allzu grossem Aufwand möglich sein, einen Server-Software-Komponente um PostGIS herum zu konfigurieren oder ggf. schreiben. Das sollte man mal mit PyWPS oder ZOO probieren!
Notizen zu PyWPS
PyWPS implementiert OGC WPS 1.0.0 in Python
- standardisiert die Beschreibung und Ausführung von entfernten Prozessen mit Fokus auf räumlichen Daten/Operationen
- Hat native GRASS-Schnittstelle
Hier zwei Beispiel-Prozesse
- Export: QGIS => Geo-DB
- Import: Geo-DB => QGIS
Beispiel (aus Christian Schwartze, PGDay.eu 2010):
class Process(WPSProcess):
def __init__(self):
WPSProcess.__init__(self, identifier = "import_img", title= "Grid Calculation",
version = "0.1", statusSupported = True)
self.img = self.addComplexInput(identifier = "img", title = "Raster image",
abstract = „Raster file for import", maxmegabites = "500",
formats=[{"mimeType":"image/tiff"}])
self.pyramids = self.addLiteralInput(identifier = "pyramids",
title = "Number of pyramid levels", type = types.IntType)
self.gridsize = self.addLiteralInput(identifier = "gridsize",
title = "Block size in cells", type = types.IntType)
[…]
self.debugOut = self.addLiteralOutput(identifier = "debug",
title = "Debug Output", type = types.StringType)
def execute(self):
self.cmd("r.in.gdal input=%s output=img location=newloc" %(self.img.value))
self.cmd("g.gisenv set=LOCATION_NAME=newloc")
[…]
self.cmd("r.to.vect input=img_mask output=img_mask_v feature=area")
[…]
self.cmd("db.execute ‘ALTER TABLE ObereGera ADD COLUMN ax DOUBLE PRECISION’”)
[…]
self.cmd(“awk ...”)
[…]
self.debugOut.setValue("INFO: " + self.cmd("g.gisenv LOCATION_NAME"))
return
Liste von 'freien' WPS-Servern
G*-Suche: http://www.google.ch/search?q=inurl%3Agetcapabilities+wps
- SO!GIS: http://www.sogis1.so.ch/wps
- deegree WPS: http://demo.deegree.org/deegree-wps
- Agriculture and Agri-Food Canada: http://ngistc1.agr.gc.ca/geoproc2/servlet/SpatialOperation
- 52n: http://swing.brgm.fr:8080/wps_1_0/WebProcessingService