Closed JuergenWeichand closed 7 years ago
Beauftragt - Umsetzung zum 11.07.2017
Wurde mit https://github.com/Intevation/downloadclient/commit/a02c25104a0b608cc123d0e85d1d8e777930e440 umgesetzt und wird mit dem nächsten Pull Request ausgeliefert.
Mit https://github.com/gdi-by/downloadclient/pull/84 steht dies nun zur Verfügung
Ergänzung notwendig, warten auf nächsten PR.
Mit dem in #84 eingebrachten Code werden Requests zwar, sofern durch den Server unterstützt, per Post gemacht, allerdings sind diese Form/URL Encoded. Manche Server unterstützen dies zwar, dies entspricht aber nicht dem Standard. Benötigt wird hier ein in XML formulierter Request, wie er bspw. für eine StoredQuery
oben angegeben wurde. Der zweite für uns wichtige Request, alle Features innerhalb einer Boundingbox, ist hier dargestellt: http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#331
http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#407 beschreibt wie der GetFeature Request aussehen darf.
Bitte Requests weiterhin nach WFS 2.0.0 erstellen, da oben aufgeführte Beispiele auch WFS 2.0.2 beruhen.
@dmth Beispielanfragen für alle benötigten POST-Requests stehen hier zur Verfügung. https://github.com/JuergenWeichand/geospatial-webservices-examples/tree/master/ows/wfs/2.0.0/weichand
Bei GetFeature-Anfragen über wfs:Query
muss der jeweilige Namensraum der typeNames
dynamisch gesetzt werden.
Vielen Dank, das wird die Sache vereinfachen.
Eine erste Implementierung der XML-POST-Requests für GetFeature-Anfragen wurde mithilfe der unteren beiden Beispiele abgeschlossen. Dabei traten noch folgende Probleme auf:
Die Verwendung von <fes:ValueReference>bvv:geometry</fes:ValueReference>
führt in Verbindung mit den typeNames zu folgendem Fehler:
_Illegal property name: bvv:geometry for feature type bvv:gmdex
Nach Entfernen des ValueReference-Tags wird die Anfrage normal beantwortet.
Die Validierung der erzeugten Requests gegen das WFS2 xsd-Schema ist nur bei Stored Query Anfragen erfolgreich. Queries mit BBOX lassen sich nicht erfolgreich validieren. Dies gilt allerdings auch für das o.g. Beispiel.
Ein Beispiel für eine Anfrage, die beide Probleme verursacht ist:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="2.0.0"
outputFormat="KML"
resultType="hits"
xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd
http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd" >
<wfs:Query typeNames="bvv:gmd_ex" xmlns:bvv="http://www.geodaten.bayern.de" srsName="urn:ogc:def:crs:EPSG::4326">
<fes:Filter>
<fes:BBOX>
<fes:ValueReference>bvv:geometry</fes:ValueReference>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
<gml:lowerCorner>48.57207 10.36604</gml:lowerCorner>
<gml:upperCorner>49.52498 12.05576</gml:upperCorner>
</gml:Envelope>
</fes:BBOX>
</fes:Filter>
</wfs:Query>
</wfs:GetFeature>
@awoestmann Wird das für den Filter zu verwendete Attribut über ValueReference
spezifiziert, so muss es im Datenmodell des WFS vorhanden sein. Im Fall von http://geoserv.weichand.de:8080/geoserver/wfs ist die korrekte Attributbezeichnung bvv:geom
und nicht bvv:geometry
. Hierzu ist stets die Verarbeitung der DescribeFeatureType
-Response notwendig.
Wird das optionale ValueReference
-Element nicht angegeben, so wirkt der BBOX-Filter auf alle vorhandenen Geometrie-Attribute. Ich schlage daher vor auf ValueReference bei den BBOX-Filtern zu verzichten.
Für die Validierung des Beispiels benötigen Sie zusätzlich die gml.xsd. Alternativ ist eine Validierung über die im Header angegebenen Schemas möglich.
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd
http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd" >
Bei meinem heutigen Test wurden die folgenden Requests an den Server (http://geoserv.weichand.de:8080/geoserver/wfs) geposted:
Request über Kartenauswahl, liefert Daten:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
service="WFS" version="2.0.0" outputFormat="GML2"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd">
<wfs:Query xmlns:bvv="http://www.geodaten.bayern.de" typeNames="bvv:gmd_ex" srsName="urn:ogc:def:crs:EPSG::4326">
<fes:Filter>
<fes:BBOX>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
<gml:lowerCorner>48.04938 8.9121</gml:lowerCorner>
<gml:upperCorner>50.38455 12.84167</gml:upperCorner>
</gml:Envelope>
</fes:BBOX>
</fes:Filter>
</wfs:Query>
</wfs:GetFeature>
Stored-Query mit BBox: liefert keine Daten
<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
service="WFS" version="2.0.0" outputFormat="GML2"
resultType="hits"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd">
<wfs:StoredQuery id="bboxQuery">
<wfs:Parameter name="x1">48.04938</wfs:Parameter>
<wfs:Parameter name="y1">8.9121</wfs:Parameter>
<wfs:Parameter name="y2">12.84167</wfs:Parameter>
<wfs:Parameter name="x2">50.38455</wfs:Parameter>
</wfs:StoredQuery>
</wfs:GetFeature>
(Abfrage liefert zwar GML, dieses enhält jedoch keine Features, auch mit getauschten Koordinaten nicht)
Stored Query München: Liefert Daten
<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
service="WFS" version="2.0.0"
outputFormat="GML2"
resultType="hits"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd">
<wfs:StoredQuery id="GemeindeMuenchenEpsg31468" />
</wfs:GetFeature>
Für die "Inspire Pre-Defined WFS BeispielQuery" werden auch daten zurückgeliefert. Ich gehe daher davon aus, dass wir die Parameter korrekt zusammen setzen.
@JuergenWeichand wenn das so weit passt, machen wir gerne die Tage einen PR mit der Korrektur fertig.
Gruß Dustin
Mit https://github.com/gdi-by/downloadclient/pull/87 die genannte Verbesserung als PR bereit gestellt.
PR #87 hatte einen bug, nun Verifizierung mit PR #88
Verifiziert mit PR #88. Gefixed. Issue wird geschlossen
[LDBV] Der DownloadClient sendet aktuell alle Anfragen per HTTP-GET an die WebServer (Ausnahme Verfügbarkeitsprüfung über HTTP-HEAD).
Dies gilt auch für WFS GetFeature-Anfragen. Werden in den StoredQueries Parameter vorgesehen, die einen sehr großen Wert annehmen (z. B: umfangreiches GML-Polygon), so ist eine Anfrage über den DownloadClient – aufgrund der Beschränkungen von HTTP-GET – nicht mehr möglich.
Aus diesem Grund sollten GetFeature-Anfragen per HTTP-POST gestellt werden, sofern dies vom WFS unterstützt wird.
Eine Beispielanfrage sieht wie folgt aus: http://geoserv.weichand.de:8080/geoserver/wfs