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 Desktop mit WFS-Services verwendet werden. Hilfe zur Verwendung von WFS-Services in ArcMap finden Sie unter Hinzufügen eines WFS-Services in ArcMap.
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>/<Service-Typ>/WFSServer?
- Der Servername ist der Name des Webservercomputers.
- Die Portnummer bezeichnet den Port, den der Webservercomputer für die Kommunikation mit anderen Computern verwendet.
- Der Service-Typ kann entweder MapServer oder GeoDataServer sein, je nachdem, ob Sie den WFS-Service aus einer Karte oder einer Geodatabase erstellt haben.
Wenn Sie beispielsweise die WFS-Funktion in dem Kartenservice mit der Bezeichnung WFSDemoService in einem Ordner namens DemoFolder aktivieren, der auf dem Server gisserver.domain.com am Port 6080 ausgeführt wird, sieht die URL wie folgt aus:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities
Dementsprechend sieht die URL folgendermaßen aus, wenn Sie die WFS-Funktion für einen Geodatenservice aktivieren:
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/GeoDataServer/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* |
Punkt | Equals | Or | NotEqualTo | |
Multipoint | Disjoint | Not | LessThan | |
LineString | Intersects | GreaterThan | ||
Polygon | Crosses | LessThanOrEqualTo | ||
Touches | GreaterThanOrEqualTo | |||
Within | Like | |||
Contains | 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>
Wenn Sie ein blockgroups-Feature anfordern möchten, 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 von 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.
URL-Beispiel: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities
Die folgende Grafik ist ein Beispiel für die Funktionalität, die von der GetCapabilities-Operation zurückgegeben wird:
Die GetCapabilities-Operation gibt auch eine Liste aller verfügbaren Feature-Classes und Tabellen zurück:
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.
URL-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
Hinzufügen von Filtern
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>&VERSION=1.1.0
Im folgenden Beispiel wird die DescribeFeatureType-Anforderung verwendet, um die Feldinformationen für den Feature-Typ "continent" zu identifizieren:
URL-Beispiel: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent&VERSION=1.1.0
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 ?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.
URL-Beispiel: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?request=getfeature&typename=cities
Hinzufügen von Filtern
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:
URL-Beispiel: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
Einfügen
"Einfügen" wird zum Erstellen neuer 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 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 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 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
Gespeicherte Abfragen ermöglichen die Speicherung von komplexen Filterabfragen mit WFS 2.0 und deren Ausführung mithilfe einer Standardanforderung. 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.
- Es lässt sich ein WFS implementieren, um nur gespeicherte Abfragen zu unterstützen, wodurch der Administrator den Zugriff der Benutzer auf die Daten steuern kann.
- 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, die eine Liste mit vom Publisher erstellten gespeicherten Abfragen enthält, 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.
Das folgende Beispiel einer gespeicherten Abfragedatei arbeitet mit dem Kartenservice "SampleWorldCities", der in ArcGIS for Server enthalten ist. Erstellen Sie die Datei und konfigurieren Sie den Service, der sie verarbeiten soll, gemäß den Anweisungen unter Konfigurieren eines WFS-Service zur Verwendung gespeicherter Abfragen. Sie können die Datei auch dahingehend ä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 mit dem Namen ID bzw. vom Typ xsd:string 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 for 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
<wfs:ListStoredQueriesResponse version="2.0.0" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.opengis.net/ogc http://schemas.opengis.net/filter/2.0/filter.xsd http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsAll.xsd http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/fes/2.0 http://schemas.opengis.net/filter/2.0/filterAll.xsd">
<wfs:StoredQuery id="urn:StoredQueries:AttributeDemo">
<ows:Title>Attribute request</ows:Title>
<ows:Abstract>test Attribute request</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:StoredQueries:SpatialDemo">
<ows:Title>Spatial request</ows:Title>
<ows:Abstract>test Spatial Request</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:StoredQueries:SpatialAndAttributeDemo">
<ows:Title>Spatial and Attribute Request</ows:Title>
<ows:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</ows:Abstract>
</wfs:StoredQuery><wfs:StoredQuery id="urn:StoredQueries:QueryCitiesByID">
<ows:Title>Select feature by ID</ows:Title>
<ows:Abstract>test selecting feature by ID</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
<ows:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</ows:Title>
<ows:Abstract>This query support all layers in the map</ows:Abstract>
</wfs:StoredQuery><wfs:StoredQuery id="urn:StoredQueries:FunctionCHAR_LENGTH">
<ows:Title>Function CHAR_LENGTH</ows:Title>
<ows:Abstract>test Function CHAR_LENGTH</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:StoredQueries:FunctionSUBSTRING">
<ows:Title>Function CHAR_LENGTH</ows:Title>
<ows:Abstract>test Function CHAR_LENGTH</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:StoredQueries:MyStoredQuery">
<ows:Title>MyStoredQuery</ows:Title>
<ows:Abstract>some tested MyStoredQuery</ows:Abstract>
</wfs:StoredQuery>
<wfs:StoredQuery id="urn:StoredQueries:FeaturesInPolygon">
<ows:Title>Features In Polygon</ows:Title>
<ows:Abstract>Find all the features in a Polygon.</ows:Abstract>
</wfs:StoredQuery>
</wfs:ListStoredQueriesResponse>
DescribeStoredQueries
Mit dem Vorgang "DescribeStoredQueries" werden die auf ArcGIS for Server verfügbaren gespeicherten Abfragen beschrieben. Dieser Vorgang dient WFS-Clients zur Abfrage des Servers und zum Verständnis der Art der gespeicherten Abfrage sowie 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
<wfs:DescribeStoredQueriesResponse version="2.0.0" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.opengis.net/ogc http://schemas.opengis.net/filter/2.0/filter.xsd http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsAll.xsd http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/fes/2.0 http://schemas.opengis.net/filter/2.0/filterAll.xsd">
<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:DescribeStoredQueriesResponse>
Ausführung einer gespeicherten Abfrage als Teil einer "GetFeature"-Abfrage
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 Koordinaten aufgerufen, um Städte in den USA aufzulisten, die sich in einem vorgegebenen 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 (FunctionChat_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 zurück (count=2): Brasilia und Goiania.
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