Več

Kako v kodi Python kodirati in dekodirati kompleksne podatke za klic OWSLib WPS na PyWPS-4?

Kako v kodi Python kodirati in dekodirati kompleksne podatke za klic OWSLib WPS na PyWPS-4?


Kako v Pythonu lahko kodiram "zapletene" (vektorske) podatke za klic WPS, ki samo odmeva podatke in dekodira podatke iz rezultata. Nameraval sem uporabiti OWSLib na strani odjemalca in PyWPS-4 na strani strežnika.

To, kar imam do zdaj za strežnik:

uvozna bučka 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)] outputs = [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 = "Vrne dani vektor", različica = "1.0.0.0", inputs = inputs, outputs = outputs, 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', methods = ['GET', 'POST']) def wps (): return service bind_host = "127.0 .0.1 "app.run (navoj = True, gostitelj = bind_host)

Za stranko imam to do zdaj:

uvoz owslib.wps uvoz zbirk url = "http://127.0.0.1:5000/wps" wps = owslib.wps.WebProcessingService (url, verbose = False, skip_caps = True) wps.getcapabilities () process_name = "echo_vector" inputs = [("message", owslib.wps.GMLMultiPolygonFeatureCollection ([[(- - 102,8184, 39,5273), (-102,8184, 37,418), (-101,2363, 37,418), (-101,2363, 39,5273), (-102,8184, 39,5273 ]))] izvedba = wps.execute (ime_procesa, vhodi) za izhod v izvedbi.processOutputs: owslib.wps.printInputOutput (output)

Dobil sem izjemo "Neveljavna vrednost mimeType text / xml za vhodno sporočilo".

Ta koda je na voljo tudi v tem skladišču GitHub


Tu je težava v OGRExportToGMLv izhodu ne deklarira predpone / uri imenskega prostora, zaradi česar bi bili analizatorji dušilke ExecuteResponse XML Odprl sem vstopnico GDAL za to.

V vmesnem času lahko prilagodite izhodno vrednost zaExportToGMLkot je opisano tukaj, tj .:

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