Wxs mapscript
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 Abfangen der Ausgaben von OWS-Requests in einen Puffer, indem der "Contet-type:" Header Value abgefangen wird, und das Abfangen 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 abzufangen.