Kommunikation mit einem WFS-Service in einem Webbrowser
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 ein Webbrowser der einfachste Client für einen WFS-Service. WFS-Anforderungen können über HTTP gestellt werden, und die Antworten oder Ausnahmen werden durch den Browser zurückgegeben. Alle WFS-Services unterstützen drei Operationen: GetCapabilities, DescribeFeatureType und GetFeature.
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 oder 1.1.0 und das Simple Features-GML-Profil unterstützen. Außerdem kann ArcGIS for Desktop mit WFS-Services verwendet werden. Hilfe zur Verwendung von WFS-Services in ArcMap finden Sie unter So arbeiten Sie mit WFS und ArcGIS for Desktop.
WFS-URL-Struktur
Um eine Verbindung mit dem Service herzustellen, müssen Sie die URL kennen, die dem folgenden Muster folgt:
http://<Servername>:<Portnummer>/arcgis/services/<Ordnername (sofern vorhanden)>/<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 Karten-Service mit der Bezeichnung WFSDemoService in einem Ordner namens DemoFolder aktivieren, der auf dem Server myserver am Port 6080 ausgeführt wird, sieht die URL wie folgt aus:
http://myserver:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?request=GetCapabilities
Dementsprechend sieht die URL folgendermaßen aus, wenn Sie die WFS-Funktion für einen Geodaten-Service aktivieren:
http://myserver:6080/arcgis/services/DemoFolder/WFSDemoService/GeoDataServer/WFSServer?
Verwenden von Filtern
Der Parameter "Filter" kann in WFS-Anforderungen verwendet werden, um bestimmte Feature in einem WFS-Service aufzurufen. Der Vorteil des Filterparameters liegt darin, dass er Teil der Standardkodierung 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 verwenden die OGC OpenGIS Filter Encoding Implementation Specification (FE) Version 1.1.
Folgende Filter können angewendet werden:
Geometrie |
Räumlich |
Logisch |
Vergleich |
Sortieren |
---|---|---|---|---|
Envelope |
BBOX |
Und |
EqualTo |
SortBy* |
Punkt |
Gleich |
Oder |
NotEqualTo | |
Multipoint |
Disjoint |
Nicht |
LessThan | |
LineString |
Schneidet |
GreaterThan | ||
Polygon |
Kreuzt |
LessThanOrEqualTo | ||
Berührt |
GreaterThanOrEqualTo | |||
Innerhalb |
Wie | |||
Enthält |
Zwischen | |||
Überlappungen |
NullCheck |
*Der SortBy-Filter kann nur auf WFS-Services angewendet werden, die auf Daten basieren, die in einer ArcSDE-Geodatabase gespeichert sind.
Wenn Sie beispielsweise einen FeatureType mit der Bezeichnung "blockgroups" in einem WFS-Service erstellt haben, können Sie blockgroup-Features innerhalb der Ausdehnung -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 anfordern, indem Sie die folgende GetFeature-Anforderung senden:
http://myserver: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://myserver: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>
WFS erfordert das Vorhandensein von Namespace-Präfixen in der Filter-XML-Zeichenfolge. Um falsche Konvertierungen von Webbrowsern oder Webservern zu vermeiden, versehen Sie die Filter-XML-Zeichenfolge zusätzlich mit einer URL-Kodierung, bevor Sie sie an den Server senden.
Verwenden des WFS-Service in einem Webbrowser
In den folgenden Beispielen werden URL-Parameter für die Kommunikation mit einem WFS-Service in einem Webbrowser verwendet:
GetCapabilities
Diese Anforderung gibt alle über den Service verfügbare Feature-Typen und Funktionalität 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 ?request=getcapabilities hinzu.
URL-Beispiel: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=GetCapabilities
Die folgende Grafik ist ein Beispiel für die Funktionalität, die von der GetCapabilities-Operation zurückgegeben wird:
GetCapabilities 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://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/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
Unten im Beispiel wird die DescribeFeatureType-Anforderung verwendet, um die Feldinformationen für den Feature-Typ "Cities" zu identifizieren.
URL-Beispiel: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=cities&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://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
Hinzufügen von Filtern
Sie können auch Filter in der Anforderung hinzufügen, um die Ergebnisse zu verfeinern, die zurückgegeben werden. Sie können z. B. alle Orte anfordern, die sich innerhalb eines angegebenen Koordinatenbereichs befinden. Unten im Beispiel befinden sich zwei Orte innerhalb eines angegebenen Koordinatenbereichs:
URL-Beispiel: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
Arbeiten mit dem FeatureID-Parameter
Der Parameter "FeatureID" kann in GetFeature-Anforderungen verwendet werden, um bestimmte Feature in einem WFS-Service anzufordern. Der Parameter "FeatureID" besteht aus dem Feature-Typ und der Feature-ID (gml:id), nicht aus der OBJECTID des Features. Das Format einer Feature-ID für ein Feature in einem WFS-Service ist <FeatureType>.<gml:id>. Eine Methode, um die gml:id eines Features in einem WFS-Service zu identifizieren, besteht darin, eine GetFeature-Anforderung bzgl. des betreffenden Feature-Typs zu stellen.
Für Features in WFS-Services, die auf Shapefiles basieren, werden keine gml:ids bereitgestellt.
Angenommen, in einem WFS-Service gibt es einen Feature-Typ mit dem Namen "Cities". Wenn Sie eine GetFeature-Anforderung für "Cities" stellen, schließt die Antwort die gml:id für jedes Feature ein.
URL-Beispiel: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
In diesem Beispiel wäre die Feature-ID für die Stadt Vancouver cities.F293__1. Die folgende Anforderung könnte verwendet werden, um speziell die Stadt Vancouver mithilfe der Feature-ID anzufordern:
http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&featureid=cities.F293__1