ZooWorkshop2010: Files
gfenoy edited this page Apr 1, 2021
·
2 revisions
As some files cause many trouble when we use copy and paste, we've put the examples in this page.
#python import osgeo.ogr import libxml2 def createGeometryFromWFS(my_wfs_response): doc=libxml2.parseMemory(my_wfs_response,len(my_wfs_response)) ctxt = doc.xpathNewContext() res=ctxt.xpathEval("/*/*/*/*/*[local-name()='Polygon' or local- name()='MultiPolygon']") for node in res: geometry_as_string=node.serialize() geometry=osgeo.ogr.CreateGeometryFromGML(geometry_as_string) return geometry return geometry def Boundary(conf,inputs,outputs): if inputs["InputPolygon"]["mimeType"]=="application/json": geometry=osgeo.ogr.CreateGeometryFromJson(inputs["InputPolygon"]["value"]) else: geometry=createGeometryFromWFS(inputs["InputPolygon"]["value"]) rgeom=geometry.GetBoundary() if outputs["Result"]["mimeType"]=="application/json": outputs["Result"]["value"]=rgeom.ExportToJson() outputs["Result"]["mimeType"]="text/plain" else: outputs["Result"]["value"]=rgeom.ExportToGML() geometry.Destroy() rgeom.Destroy() return 3
#xml <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net /wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 ../wpsExecute_request.xsd"> <ows:Identifier>Boundary</ows:identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>InputPolygon</ows:identifier> <ows:Title>Playground area</ows:title> <wps:Reference xlink:href="http://localhost:8082/geoserver/ows/?SERVICE=WFS&REQUEST=GetFeature&VERSION=1.0.0&typename=topp:states&SRS=EPSG:4326&FeatureID=states.15"/> </wps:input> </wps:datainputs> <wps:ResponseForm> <wps:ResponseDocument> <wps:Output> <ows:Identifier>Result</ows:identifier> <ows:Title>Area serviced by playground.</ows:title> <ows:Abstract>Area within which most users of this playground will live.</ows:abstract> </wps:output> </wps:responsedocument> </wps:responseform> </wps:execute>
#xml <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 ../wpsExecute_request.xsda"> <ows:Identifier>Boundary</ows:identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>InputPolygon</ows:identifier> <wps:Data> <wps:ComplexData mimeType="application/json"> { "type": "MultiPolygon", "coordinates": [ [ [ [ -105.998360, 31.393818 ], [ -106.212753, 31.478128 ], [ -106.383041, 31.733763 ], [ -106.538971, 31.786198 ], [-106.614441, 31.817728 ], [ -105.769730, 31.170780 ], [ -105.998360, 31.393818 ] ] ], [ [ [-94.913429, 29.257572 ], [ -94.767380, 29.342451 ], [ -94.748405, 29.319490 ], [-95.105415, 29.096958 ], [ -94.913429, 29.257572 ] ] ] ] } </wps:complexdata> </wps:data> </wps:input> </wps:datainputs> <wps:ResponseForm> <wps:ResponseDocument> <wps:Output> <ows:Identifier>Result</ows:identifier> <ows:Title>Area serviced by playground.</ows:title> <ows:Abstract>Area within which most users of this playground will live.</ows:abstract> </wps:output> </wps:responsedocument> </wps:responseform> </wps:execute>
#python def extractInputs(obj): if obj["mimeType"]=="application/json": return osgeo.ogr.CreateGeometryFromJson(obj["value"]) else: return createGeometryFromWFS(obj["value"]) return null def outputResult(obj,geom): if obj["mimeType"]=="application/json": obj["value"]=geom.ExportToJson() obj["mimeType"]="text/plain" else: obj["value"]=geom.ExportToGML()
#python def Boundary(conf,inputs,outputs): geometry=extractInputs(inputs["InputPolygon"]) rgeom=geometry.GetBoundary() outputResult(outputs["Result"],rgeom) geometry.Destroy() rgeom.Destroy() return 3
#python def ConvexHull(conf,inputs,outputs): geometry=extractInputs(inputs["InputPolygon"]) rgeom=geometry.ConvexHull() outputResult(outputs["Result"],rgeom) geometry.Destroy() rgeom.Destroy() return 3 def Centroid(conf,inputs,outputs): geometry=extractInputs(inputs["InputPolygon"]) if geometry.GetGeometryType()!=3: geometry=geometry.ConvexHull() rgeom=geometry.Centroid() outputResult(outputs["Result"],rgeom) geometry.Destroy() rgeom.Destroy() return 3
<h3>Single geometry processing</h3> <ul> <li> <input type="button" onclick="simpleProcessing(this.value);" value="Buffer"/> Distance: <input id="bufferDist" value="1"/> </li> <li> <input type="button" onclick="simpleProcessing(this.value);" value="ConvexHull"/> </li> <li> <input type="button" onclick="simpleProcessing(this.value);" value="Boundary"/> </li> <li> <input type="button" onclick="simpleProcessing(this.value);" value="Centroid"/> </li> </ul>
function multiProcessing(aProcess) { {| border=1 class="simple" ! hover.features.length == 0) |} return alert("No feature created!"); var url = '/zoo/'; var xlink = control.protocol.url +"?SERVICE=WFS&REQUEST=GetFeature&VERSION=1.0.0"; xlink += '&typename='+control.protocol.featurePrefix; xlink += ':'+control.protocol.featureType; xlink += '&SRS='+control.protocol.srsName; xlink += '&FeatureID='+select.features[0].fid; var GeoJSON = new OpenLayers.Format.GeoJSON(); try { var params = '<wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0/../wpsExecute_request.xsd">'; params += ' <ows:Identifier>'+aProcess+'</ows:identifier>'; params += ' <wps:DataInputs>'; params += ' <wps:Input>'; params += ' <ows:Identifier>InputEntity1</ows:identifier>'; params += ' <wps:Reference xlink:href="'+xlink.replace(/&/gi,'&')+'"/>'; params += ' </wps:input>'; params += ' <wps:Input>'; params += ' <ows:Identifier>InputEntity2</ows:identifier>'; params += ' <wps:Data>'; params += ' <wps:ComplexData mimeType="application/json"> '+GeoJSON.write(hover.features[0].geometry)+' </wps:complexdata>'; params += ' </wps:data>'; params += ' </wps:input>'; params += ' </wps:datainputs>'; params += ' <wps:ResponseForm>'; params += ' <wps:RawDataOutput>'; params += ' <ows:Identifier>Result</ows:identifier>'; params += ' </wps:rawdataoutput>'; params += ' </wps:responseform>'; params += ' </wps:execute>'; } catch(e) { alert(e); return false; } var request = new OpenLayers.Request.XMLHttpRequest(); request.open('POST',url,true); request.setRequestHeader('Content-Type','text/xml'); request.onreadystatechange = function() { if(request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) { var GeoJSON = new OpenLayers.Format.GeoJSON(); var features = GeoJSON.read(request.responseText); multi.removeFeatures(multi.features); multi.addFeatures(features); } } request.send(params); }