Die Online-Ressource jeder Operation, die von einem konformen WFS-Server unterstützt wird, ist eine HTTP Uniform Resource Locator (URL); deshalb kann ein WFS-Service als REST-Service (Representational State Transfer) betrachtet werden. Mithilfe von URL-Parametern können Sie diese Operationen verwenden, um Service-Metadaten, Informationen zu den Feature-Typen sowie GML-codierte Features vom WFS-Service zu erhalten. Diese Operationen und Parameter werden in den OGC-WFS-Spezifikationen aufgeführt.
Client-Typen
WFS-Services können von jedem Client verwendet werden, der WFS unterstützt. In den meisten Fällen ist der Standard-Client für einen WFS-Service ein Webbrowser. WFS-Anforderungen können über HTTP gestellt werden, und die Antworten oder Ausnahmen werden durch den Browser zurückgegeben. Jeder WFS-Service unterstützt drei primäre Operationen: GetCapabilities, DescribeFeatureType und GetFeature. In der ArcGIS Server-Implementierung von WFS 2.0.0 werden zusätzliche Vorgänge definiert: "GetFeatureByID", "ListStoredQueries" und "DescribeStoredQueries".
Es gibt viele Clients von Drittanbietern, mit denen WFS-Services verwendet werden können. Um WFS-Services zu verwenden, muss der Client WFS 1.0.0, 1.1.0 oder 2.0.0 und das GML-Profil "Simple Features" unterstützen. Darüber hinaus kann ArcGIS Pro mit WFS-Services verwendet werden. Hilfe zu WFS-Services in ArcGIS Pro finden Sie unter Hinzufügen von WFS-Services.
WFS-URL-Struktur
Um eine Verbindung mit dem Service herzustellen, müssen Sie die URL kennen, die dem folgenden Muster folgt:
http://gisserver.domain.com:6080/arcgis/services/<Ordnername (falls zutreffend)>/<Service-Name>/MapServer/WFSServer?
- Der Servername ist der Name des Webservercomputers.
- Die Portnummer bezeichnet den Port, den der Webservercomputer für die Kommunikation mit anderen Computern verwendet.
Wenn Sie beispielsweise die WFS-Funktion im Kartenservice WFSDemoService in einem Ordner namens DemoFolder aktivieren, der auf dem Server gisserver.domain.com an Port 6080 ausgeführt wird, sieht die GetCapabilities-URL wie folgt aus:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities
Verwenden von Filtern
Der Parameter "Filter" kann in WFS-Anforderungen verwendet werden, um bestimmte Features in einem WFS-Service aufzurufen. Der Vorteil des Filterparameters liegt darin, dass er Teil der Standardcodierung für das Schlüsselwort-/Wertpaar ist, die in der WFS 1.1 Implementation Specification im Abschnitt 9.5 definiert ist und an das Ende der HTTP-Anforderungen angehängt werden kann. WFS-Services der Versionen 1.0.0 und 1.1.0 verwenden Version 1.1 der OGC-Implementierungsspezifikation für OpenGIS Filter Encoding (FE). WFS 2.0.0 verwendet Version 2.0.0 der Filterspezifikation.
In der folgenden Tabelle sind die anwendbaren Filter aufgeführt:
Geometrie | Räumlich | Logisch | Vergleich | Sortieren |
---|---|---|---|---|
Envelope | BBOX | And | EqualTo | SortBy* |
Point | Equals | Or | NotEqualTo | |
Multipoint | Disjoint | Not | LessThan | |
LineString | Intersects | GreaterThan | ||
Polygon | Crosses | LessThanOrEqualTo | ||
Touches | GreaterThanOrEqualTo | |||
Within | Like | |||
Enthält | Between | |||
Overlaps | NullCheck |
Hinweis:
*Der SortBy-Filter kann nur auf WFS-Services angewendet werden, die auf Daten basieren, die in einer Enterprise-Geodatabase gespeichert sind.
Wenn Sie beispielsweise einen Feature-Typ mit der Bezeichnung "blockgroups" in einem WFS-Service erstellt haben, können Sie blockgroups-Features innerhalb der Ausdehnung -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 anfordern, indem Sie die folgende GetFeature-Anforderung senden:
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>Shape</ogc:PropertyName><gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:coordinates>37.7877919206256,-122.423192682619 37.7893634225143,-122.421377806544</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>
Um ein blockgroups-Feature anzufordern, das ein bestimmtes Punkt-Feature, wie 122.431577, 37.749936 enthält, können Sie folgende GetFeature-Anforderung senden:
http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:Contains><ogc:PropertyName>Shape</ogc:PropertyName><gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:pos srsName="urn:x-ogc:def:crs:EPSG:4326">37.749936 -122.431577</gml:pos></gml:Point></ogc:Contains></ogc:Filter>
Hinweis:
WFS erfordert das Vorhandensein von Namespace-Präfixen in der Filter-XML-Zeichenfolge. Um falsche Konvertierungen von Webbrowsern oder Webservern zu vermeiden, wird die Filter-XML-Zeichenfolge zusätzlich mit einer URL-Codierung versehen, bevor sie an den Server gesendet wird.
Verwenden des WFS-Service 1.0.0 oder 1.1.0 in einem Webbrowser
In den folgenden Beispielen werden URL-Parameter für die Kommunikation mit WFS- und WFS-T-Service 1.0.0 bzw. 1.1.0 in einem Webbrowser verwendet: Näheres über die Verwendung von Operationen für WFS 2.0.0 in einem Webbrowser können Sie dem nachstehenden Abschnitt Verwenden des WFS-Service 2.0 in einem Webbrowser entnehmen.
GetCapabilities
Diese Anforderung gibt alle über den Service verfügbaren Feature-Typen und Funktionen im GML-Format zurück. Um die GetCapabilities-Operation zu verwenden, kopieren Sie die WFS-Service-URL, fügen Sie sie in die Adressleiste ein, und fügen Sie am Ende der URL ?service=WFS&request=getcapabilities hinzu. Beispiel:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities
DescribeFeatureType
Diese Anforderung beschreibt die Feldinformationen von einem oder mehreren Features im WFS-Service. Dies schließt die Feldnamen, Feldtypen, zulässige Minimum- und Maximumfeldwerte und andere Einschränkungen für Felder der Feature-Classes oder der Tabellen ein.
Um die DescribeFeatureType-Operation zu verwenden, kopieren Sie die WFS-URL, fügen Sie sie in die Adressleiste ein, und fügen Sie am Ende der URL ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0 hinzu. Dadurch werden alle Feldinformationen für alle Feature-Typen und Tabellen zurückgegeben, die im Feature-Service verfügbar sind. Beispiel:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
Sie können auch eine einzelne Feature-Class oder Tabelle angeben, für die Sie die Feldinformationen benötigen, indem Sie die folgende Anforderung mit dem Namen des Feature-Typs oder der Tabelle an das Ende der URL anfügen:
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&typeName=<Feature-Typ hier eingeben>
Im folgenden Beispiel wird die DescribeFeatureType-Anforderung verwendet, um die Feldinformationen für den Feature-Typ "continent" zu identifizieren:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent
GetFeature
Diese Anforderung gibt Informationen zu speziellen Feature-Typen zurück, die über den WFS-Service verfügbar sind.
Um die GetFeature-Operation in einem Webbrowser zu verwenden, kopieren Sie die WFS-URL, fügen Sie sie in die Adressleiste ein, und fügen Sie am Ende der URL ?service=WFS&version=1.1.0&request=GetFeature&typeName=<Feature-Typ hier eingeben> hinzu. Dadurch werden alle Attribut- und Geometrieinformationen zu jedem Feature oder jeder Zeile im Feature-Typ zurückgegeben. Beispiel:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities
Sie können auch Filter in der Anforderung hinzufügen, um die zurückgegebenen Ergebnisse zu verfeinern. Sie können z. B. alle Orte anfordern, die sich innerhalb eines angegebenen Koordinatenbereichs befinden. Im folgenden Beispiel befinden sich drei Orte innerhalb eines angegebenen Koordinatenbereichs:
http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities&BBOX=46.90,-76.21,42.12,-72.88
Einfügen
"Einfügen" wird zum Erstellen von Features in einer einzelnen Transaktionsanforderung verwendet. Der ursprüngliche Status eines zu erstellenden Features wird anhand von GML3 ausgedrückt und muss relativ zu einem GML3-Anwendungsschema validiert werden, das durch die DescribeFeatureType-Operation erstellt wird.
Im folgenden POST-Beispiel wird z. B. ein Punkt-Feature eingefügt, das eine Stadt darstellt:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">>
<wfs:Insert>
<esri:Cities>
<esri:NAME>Tofino</esri:NAME>
<esri:CAPITAL>N</esri:CAPITAL>
<esri:PROV_NAME>British Columbia</esri:PROV_NAME>
<esri:POPULATION>12345</esri:POPULATION>
<esri:RepRowID>1000</esri:RepRowID>
<esri:Shape>
<gml:Point>
<gml:coordinates>59.163182034 -133.844892907</gml:coordinates>
</gml:Point>
</esri:Shape>
</esri:Cities>
</wfs:Insert>
</wfs:Transaction>
Aktualisieren
Mit "Aktualisieren" wird ein bzw. werden mehrere Features (eines einzelnen Typs) in einer einzelne Transaktionsanforderung aktualisiert.
Das Element <Update> enthält mindestens ein <propertyt>-Element, das den Namen und Ersatzwert für eine Eigenschaft angibt, die zu dem Feature-Typ gehört, der anhand des obligatorischen typeName-Attributs angegeben wird. Ein <property>-Element enthält ein <Name>-Element, das den Namen der zu ändernden Feature-Eigenschaft und ein optionales <value>-Element mit dem Ersatzwert für die benannte Feature-Eigenschaft umfasst. Wenn das <value>-Element weggelassen wird, bedeutet dies, dass der Eigenschaft ein NULL-Wert zugewiesen werden muss. Falls die Eigenschaft keine NULL-Werte erlaubt, muss das WFS eine Ausnahme auslösen, die angibt, dass der NULL-Wert unzulässig ist.
Im folgenden POST-Beispiel wird z. B. ein Punkt-Feature in einem Dataset namens "cities" aktualisiert:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">
<wfs:Update typeName="esri:cities">
<wfs:Property>
<wfs:Name>POPULATION</wfs:Name>
<wfs:Value>300000</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Halifax</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
Löschen
Mit "Löschen" wird ein bzw. werden mehrere Features (eines einzelnen Typs) in einer einzelne Transaktionsanforderung gelöscht. "Löschen" wird mit dem <Filter>-Element definiert. Falls das <Filter>-Element keine zu löschenden Feature-Instanzen identifiziert, wird die Löschanforderung ignoriert.
Im folgenden POST-Beispiel werden z. B. zwei Punkt-Features in einem Dataset namens "cities" gelöscht:
<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "2.0.0" service="WFS">
<wfs:Delete typeName="esri:cities">
<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Churchill</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Delete>
<wfs:Delete typeName="esri:cities">
<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Montreal</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
Verwenden des WFS-Service 2.0 in einem Webbrowser
Die ArcGIS Server-Implementierung der WFS 2.0-Spezifikation umfasst die erforderlichen Features des WFS-Grundprofils, wie in der WFS 2.0-Spezifikation angeführt. Dazu zählen die Operationen GetCapabilities, DescribeFeatureType und GetFeature (vorstehend beschrieben). Die WFS 2.0-Implementierung unterstützt auch Transaktionen, gespeicherte Abfragen und Antwortauslagerung, die nicht zum WFS-Grundprofil zählen.
Transaktionen
Als Transaktion werden Datentransformationsvorgänge beschrieben, die auf Feature-Instanzen in einem WFS-Service angewendet werden. Mithilfe von Transaktionen können Clients Features im WFS erstellen, ändern, ersetzen oder löschen. Nach Abschluss der Transaktion wird vom WFS ein XML-Antwortdokument generiert, aus dem der Status der Fertigstellung des Vorgangs hervorgeht.
Gespeicherte Abfragen
Mithilfe von gespeicherten Abfragen können komplexe Filterabfragen von WFS 2.0 gespeichert und unter Verwendung einer einfachen Anforderung ausgeführt werden. Um dasselbe Ergebnis mit WFS 1.0.0 oder 1.1.0 zu erzielen, müssten Sie einen Filter auf Grundlage einer Filter-Encodierungsspezifikation anlegen und diesen an die WFS-URL anhängen. Durch das Konfigurieren gespeicherter Abfragen stehen Ihnen die folgenden Vorteile zur Verfügung, mit denen der Einsatzbereich von WFS 2.0 in Anwendungen erweitert wird:
- Komplexe Abfragen lassen sich vereinfachen, sodass sie als HTTP-GET-Anforderungen ausgeführt werden können.
- Durch gespeicherte Abfragen fallen für die Entwicklung von Anwendungen weniger Kosten an, da sich hiermit spezifische Abfragen konfigurieren und komplizierte Ad-hoc-Anfragen und XPath-Ausdrücke vermeiden lassen.
- Zusätzlich zum WFS können neben HTTP GET/POST und SOAP auch RESTful-Schnittstellen eingerichtet werden, um WFS in einfachen Client-Anwendungen nutzen zu können.
Folgende Vorgänge stehen für die Unterstützung gespeicherter Abfragen zur Verfügung: GetFeatureByID, ListStoredQueries und DescribeStoredQueries (nachfolgend beschrieben).
Erstellen einer gespeicherten Abfragedatei
Bei einer gespeicherten Abfragedatei handelt es sich um eine .xml-Datei mit einer Liste der vom Publisher erstellten gespeicherten Abfragen, die für einen bestimmten Service relevant sind. Für die Nutzung gespeicherter Abfragen mit WFS 2.0 erstellen Sie eine gespeicherte Abfragedatei und konfigurieren den Service so, dass er auf die URL der Datei mit den gespeicherten Abfragen verweist.
Im folgenden Beispiel einer gespeicherten Abfragedatei wird der in ArcGIS Server enthaltene Kartenservice "SampleWorldCities" verwendet. Sie können dieses Beispiel verwenden und die Datei so ändern, dass sie einen anderen WFS-Service nutzt.
<?xml version="1.0" encoding="utf-8" ?>
<wfs:StoredQueryList
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:myns="http://www.someserver.com/myns"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"
service="WFS"
version="2.0.0">
<wfs:StoredQueryDefinition id="urn:StoredQueries:AttributeDemo">
<wfs:Title>Attribute request</wfs:Title>
<wfs:Abstract>test Attribute request</wfs:Abstract>
<wfs:Parameter name="myrank" type="xsd:double"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Literal>POP_RANK</fes:Literal>
<fes:Literal>${myrank}</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialDemo">
<wfs:Title>Spatial request</wfs:Title>
<wfs:Abstract>test Spatial Request</wfs:Abstract>
<wfs:Parameter name="coordinates" type="xsd:string"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName='myns:Cities'>
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>Shape</ogc:PropertyName>
<gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:coordinates>${coordinates}</gml:coordinates>
</gml:Box>
</ogc:BBOX>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialAndAttributeDemo">
<wfs:Title>Spatial and Attribute Request</wfs:Title>
<wfs:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName='myns:Cities'>
<ogc:Filter>
<fes:And>
<ogc:BBOX>
<ogc:PropertyName>Shape</ogc:PropertyName>
<gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:coordinates>0,0 90,180</gml:coordinates>
</gml:Box>
</ogc:BBOX>
<fes:PropertyIsGreaterThan>
<fes:Literal>POP</fes:Literal>
<fes:Literal>12000000</fes:Literal>
</fes:PropertyIsGreaterThan>
</fes:And>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:QueryCitiesByID">
<wfs:Title>Select feature by ID</wfs:Title>
<wfs:Abstract>test selecting feature by ID</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
<wfs:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</wfs:Title>
<wfs:Abstract>This query support all layers in the map</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities,myns:Continent,myns:World"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<!-- Cities -->
<wfs:Query typeName="myns:Cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- Continent -->
<wfs:Query typeName="myns:Continent">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- World -->
<wfs:Query typeName="myns:World">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>OBJECTID</ogc:Literal>
<ogc:Literal>${ID}</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<!-- -->
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionCHAR_LENGTH">
<wfs:Title>Function CHAR_LENGTH</wfs:Title>
<wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Cities"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Function name="CHAR_LENGTH">
<fes:Literal>CITY_NAME</fes:Literal>
</fes:Function>
<fes:Literal>2</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionSUBSTRING">
<wfs:Title>Function CHAR_LENGTH</wfs:Title>
<wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
<wfs:QueryExpressionText>
<wfs:Query typeName="myns:cities">
<fes:Filter>
<fes:PropertyIsEqualTo>
<fes:Function name="SUBSTRING">
<fes:Literal>CITY_NAME</fes:Literal>
<fes:Literal>2</fes:Literal>
<fes:Literal>3</fes:Literal>
</fes:Function>
<fes:Literal>os</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:MyStoredQuery">
<wfs:Title>MyStoredQuery</wfs:Title>
<wfs:Abstract>some tested MyStoredQuery</wfs:Abstract>
<wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:Within>
<ogc:ValueReference>Shape</ogc:ValueReference>
${AreaOfInterest}
</ogc:Within>
</ogc:Filter>
</wfs:Query>
<wfs:Query typeName="myns:cities">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:Literal>POP_RANK</ogc:Literal>
<ogc:Literal>3</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Parks">
<fes:Filter>
<fes:Within>
<fes:ValueReference>geometry</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Lakes">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Rivers">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
<wfs:StoredQueryDefinition id="urn:StoredQueries:FeaturesInPolygon">
<wfs:Title>Features In Polygon</wfs:Title>
<wfs:Abstract>Find all the features in a Polygon.</wfs:Abstract>
<wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
<wfs:QueryExpressionText
returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
isPrivate="false">
<wfs:Query typeNames="myns:Parks">
<fes:Filter>
<fes:Within>
<fes:ValueReference>geometry</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Lakes">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
<wfs:Query typeNames="myns:Rivers">
<fes:Filter>
<fes:Within>
<fes:ValueReference>region</fes:ValueReference>
${AreaOfInterest}
</fes:Within>
</fes:Filter>
</wfs:Query>
</wfs:QueryExpressionText>
</wfs:StoredQueryDefinition>
</wfs:StoredQueryList>
GetFeatureByID
Beim Vorgang "GetFeatureByID" wird anhand eines einzelnen Arguments vom Typ xsd:string mit dem Namen id ein einzelnes Feature zurückgegeben, dessen Kennung dem unter id angegebenen Argumentwert entspricht.
Mit der folgenden Beispiel-URL wird die gespeicherte Abfrage "GetFeatureByID" aufgerufen, bei der ein einzelnes Feature abgerufen und angezeigt wird:
http://gisserver.domain.com/arcgis/services/SampleWorldCities/MapServer/WFSServer?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&ID=Cities.1
ListStoredQueries
Mit dem Vorgang "ListStoredQueries" werden die auf ArcGIS Server verfügbaren gespeicherten Abfragen aufgelistet. Der Client kann jeweils eine gespeicherte Abfrage ausführen, z. B.:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=ListStoredQueries&service=WFS&version=2.0.0
DescribeStoredQueries
Mit dem Vorgang "DescribeStoredQueries" werden die auf ArcGIS Server verfügbaren gespeicherten Abfragen beschrieben. Dieser Vorgang dient WFS-Clients zur Abfrage des Servers, zum Verständnis der Art der gespeicherten Abfrage und zum Identifizieren der Parameter, die für die Ausführung der gespeicherten Abfrage gesendet werden müssen.
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=DescribeStoredQueries&service=WFS&version=2.0.0
Ausführen einer gespeicherten Abfrage als Teil einer "GetFeature"-Anforderung
Im folgenden Beispiel ist eine Attribut-Abfrage dargestellt, bei der eine gespeicherte Abfrage (AttributeDemo) mithilfe des Parameters myrank=3 aufgerufen wird:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=5&STOREDQUERY_ID=urn:StoredQueries:AttributeDemo&myrank=3
Im nachfolgenden Beispiel wird eine gespeicherte Abfrage (SpatialDemo) mithilfe des Parameters coordinates aufgerufen, um Städte in den USA aufzulisten, die sich in einem umgebenden Rechteck befinden. Von dieser Liste werden nur die ersten beiden Städte zurückgegeben (beachten Sie die Verwendung von "startindex" und "count"):
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=2&STOREDQUERY_ID=urn:StoredQueries:SpatialDemo&coordinates=0,-180%2090,0
Im folgenden Beispiel wird eine gespeicherte Abfrage (FunctionChar_Length) aufgerufen. Mit der gespeicherten Abfrage auf dem Server werden Städte herausgefiltert, deren Namen mehr als zwei Zeichen enthalten:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=Cities&STOREDQUERY_ID=urn:StoredQueries:FunctionCHAR_LENGTH
Antwortauslagerung
Mit der Antwortauslagerung kann in einer Anforderung der abzurufende Startindex des Features angegeben werden. Außerdem kann man eingeben, wieviele Features abgerufen werden sollen.
Der in ArcGIS Server installierte Kartenservice "SampleWorldCities" gibt in der folgenden Abfrage zwei Städte (count=2), Brasilia und Goiania, zurück:
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=1&count=2
Wenn Sie die Abfrage ändern und den Parameter "startindex" bei 2 beginnen lassen, ist Goiania die erste zurückgegebene Stadt. Da der Parameter "count=2" lautet, werden zwei Städte zurückgegeben: Goiania und Campo Grande.
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=2&count=2
Benutzerdefinierter Parameter "ForceEPSGAxisOrder"
ForceEPSGAxisOrder ist ein benutzerdefinierter Parameter, der mit einer WFS GetFeature-Anforderung gesendet werden kann, wenn das GeoJSON-Ausgabeformat angefordert wird. Standardmäßig werden vom GeoJSON-Ausgabeformat Koordinaten in WGS84 mit der Achsenreihenfolge Längengrad, Breitengrad ausgegeben, um Konformität mit der GeoJSON-Spezifikation RFC 7946 zu wahren. Bei der Einstellung "true" für diesen Parameter wird die Rückgabe der Koordinatenachsenreihenfolge gemäß Definition des angegebenen EPSG-Codes erzwungen. Beispielsweise werden die Koordinaten bei der folgenden Abfrage in der Achsenreihenfolge Breitengrad, Längengrad zurückgegeben, da dies in EPSG:4326 entsprechend definiert ist:
https:///arcgis/services/SampleWorldCities/MapServer/WFSServer?service=wfs&version=2.0.0&&request=GetFeature&typeNames=cities&outputFormat=GEOJSON&srsName=EPSG:4326&ForceEPSGAxisOrder=true