Suite

En Python, comment encoder et décoder des données complexes pour un appel OWSLib WPS à PyWPS-4 ?


En Python, comment puis-je encoder des données « complexes » (vecteurs) pour un appel WPS qui renvoie simplement les données et décode les données à partir du résultat. J'avais l'intention d'utiliser OWSLib côté client et PyWPS-4 côté serveur.

C'est ce que j'ai pour le moment pour le serveur :

import flask import pywps class EchoVector(pywps.Process): def __init__(self): inputs = [pywps.ComplexInput('message', 'Input message', supported_formats=[pywps.Format('application/gml+xml')] , mode=pywps.validator.mode.MODE.STRICT)] output = [pywps.ComplexOutput('response', 'Output response', supported_formats=[pywps.Format('application/gml+xml')])] super( EchoVector, self).__init__( self._handler, identifier="echo_vector", title="Echo Vector Test", abstract="Renvoie le vecteur donné", version="1.0.0.0", entrées=entrées, sorties=sorties, store_supported=True, status_supported=True ) def _handler(self, request, response): response.outputs['response'].data = request.inputs['message'][0].data return response app = flask.Flask( __name__) wps_processes = [EchoVector()] service = pywps.Service(wps_processes) @app.route('/wps', methodes=['GET', 'POST']) def wps(): return service bind_host="127.0 .0.1" app.run(threaded=True,host=bind_host)

Voici ce que j'ai jusqu'à présent pour le client:

import owslib.wps import collections url = "http://127.0.0.1:5000/wps" wps = owslib.wps.WebProcessingService(url, verbose=False, skip_caps=True) wps.getcapabilities() process_name = "echo_vector" entrées = [("message", owslib.wps.GMLMultiPolygonFeatureCollection([[(-102.8184, 39.5273), (-102.8184, 37.418), (-101.2363, 37.418), (-101.2363, 39.5273), (-102.8184, 39.5273))] ]))] execution = wps.execute(process_name, entrées) pour la sortie dans execution.processOutputs : owslib.wps.printInputOutput(output)

Je reçois une exception "Valeur mimeType non valide/xml pour le message d'entrée".

Ce code est également disponible dans ce référentiel GitHub


Le problème ici est que les OGRExporter vers GMLne déclare pas de préfixe d'espace de noms / uri dans la sortie, ce qui rendrait les analyseurs XML ExecuteResponse étouffés. J'ai ouvert un ticket GDAL pour résoudre ce problème.

En attendant, comme solution de contournement, vous pouvez ajuster la sortie deExporter vers GMLcomme décrit ici, c'est-à-dire :

def _setNamespace(xml, prefix, uri): return xml.replace('>', ' xmlns:%s="%s">' % (prefix, uri), 1) better_gml = _setNamespace(geom.ExportToGML(), 'gml', 'http://www.opengis.net/gml')


Voir la vidéo: Koodataan PYTHONILLA Kouluruoka-kone! Miskan Ohjelmointinurkka (Octobre 2021).