Wxs mapscript

From OSGeo
Jump to navigation Jump to search

MapScript wrappers für WxS Services

(angefangene deutsche Übersetzung der englischsprachigen Seite http://mapserver.gis.umn.edu/docs/howto/wxs_mapscript, bitte weiter übersetzen und ggf. korrigieren)

Einführung

Mit der Implementierung von Mapserver RFC 16 in Mapserver 4.9 hat Mapscript nun die Fähigkeit OGC-Webdienstaufrufe und wie WMC, WCS und WFS auszuführen.

Dies macht es möglich, basierend auf Informationen aus dem Original-Request ein Map-Objekt dynamisch zu konfigurieren und den Output der abgearbeiteten Requests für weitergehende Nachbearbeitung abzufangen.

Python Beispiel

Das folgende einfache in Python geschriebene Beispiel zeigt ein Script, das intern den Map-Namen ausgibt, aber auch normale Mapserver-Prozesse benutzt.

import mapscript
req = mapscript.OWSRequest()
req.loadParams()
map = mapscript.mapObj( '/u/www/maps/ukpoly/ukpoly.map' )
map.OWSDispatch( req )

Das OWS-Request-Objekt ist zum Managen einer geparsten Liste von OWS-Processing-Optionen. In dem obigen Beispiel werden sie über die Umgebung mit dem Aufruf loadParams(), welcher sie (wie mapserv das auch machen würde) von QUERY_STRING holt und parsed, geladen.

Dann laden wir die Karte und rufen OWSDispatch mit den gegebenen Argumenten der Karte auf. Standardmäßig werden die Ergebnisse des verschickten Requests in stdout geschrieben, welche sie zum Client zurückgibt.

import mapscript
req = mapscript.OWSRequest()
req.setParameter( 'SERVICE', 'WMS' )
req.setParameter( 'VERSION', '1.1.0' )
req.setParameter( 'REQUEST', 'GetCapabilities' )
map = mapscript.mapObj( '/u/www/maps/ukpoly/ukpoly.map' )
map.OWSDispatch( req )

Das vorherige Beispiel hat alle Ergebnisse zum Client direkt zurück geschickt. Aber in machen Fällen wollen wir die Möglichkeit haben, das Ergebnis unserer Requests abzufangen, und es vielleicht in einer bestimmten Art zu modifizieren. Im folgenden Beispiel zwängen wir die ungeliebten OGC-Mime-Type-Fehler in einfache text/html (Achtung! - kein Standard!)

import mapscript
req = mapscript.OWSRequest()
req.loadParams()
map = mapscript.mapObj( '/u/www/maps/ukpoly/ukpoly.map' )
mapscript.msIO_installStdoutToBuffer()
map.OWSDispatch( req )
content_type = mapscript.msIO_stripStdoutBufferContentType()
content = mapscript.msIO_getStdoutBufferBytes()
if content_type == 'vnd.ogc.se_xml':
  content_type = 'text/xml'
print 'Content-type: ' + content_type
print
print content

Das Beispiel zeigt das Einfangen von Ausgaben von OWS-Requests in einen Puffer, indem der "Contet-type:" Header Value eingefangen wird und das Einfangen des aktuellen Inhalts als Binärdaten. Die Funktion msIO_getStdoutBufferBytes() gibt dem stdout einen Puffer als Byte-Array. Wenn das Ergebnis als Text erkannt wird, kann die die Funktion msIO_getStdoutBufferString() dagegen gebraucht werden, um es als String für einfachere Textmanipulationen einzufangen.