Web ブラウザでの WFS サービスとの通信
WFS 準拠のサーバによってサポートされる各オペレーションのオンライン リソースは HTTP URL(Uniform Resource Locator)であるため、WFS サービスは REST(Representational State Transfer)サービスと見なすことができます。URL パラメータとこれらのオペレーションを使用して、サービスのメタデータ、フィーチャ タイプ情報、GML でエンコードされたフィーチャを WFS サービスから取得することができます。これらのオペレーションとパラメータの詳細については、「OGC WFS Specification」をご参照ください。
クライアントのタイプ
WFS サービスは、WFS をサポートするすべてのクライアントで使用できます。多くの場合、WFS サービスの最も単純なクライアントは Web ブラウザです。WFS リクエストは HTTP を通じて送信することができ、レスポンスまたは例外はブラウザを通じて返されます。すべての WFS サービスは、GetCapabilities、DescribeFeatureType、GetFeature の 3 つのオペレーションをサポートします。
WFS サービスを利用するために使用できるサードパーティ クライアントはさまざまです。WFS サービスを使用するには、クライアントが WFS 1.0.0 または 1.1.0 と、GML の Simple Features プロファイルをサポートする必要があります。また、ArcGIS for Desktop は WFS サービスを利用できます。ArcMap での WFS サービスの使用については、「ArcGIS for Desktop を使用して WFS を操作する方法」をご参照ください。
WFS の URL 構造
サービスに接続するには、次の形式で URL を指定する必要があります。
http://<サーバ名>:<ポート番号>/arcgis/services/<フォルダ名(必要に応じて)>/<サービス名>/<サービス タイプ>/WFSServer?
- サーバ名は、Web サーバ コンピュータの名前です。
- ポート番号は、Web サーバ コンピュータが他のコンピュータと通信する際に使用するポートです。
- サービス タイプは、WFS サービスをマップとジオデータベースのどちらから作成するかに応じて、それぞれ MapServer または GeoDataServer になります。
たとえば、ポート 6080 で動作している myserver サーバの DemoFolder というフォルダで、マップ サービス WFSDemoService の WFS ケーパビリティを有効にしている場合、URL は次のようになります。
http://myserver:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?request=GetCapabilities
同様に、ジオデータ サービスで WFS ケーパビリティを有効にした場合、URL は次のようになります。
http://myserver:6080/arcgis/services/DemoFolder/WFSDemoService/GeoDataServer/WFSServer?
フィルタの使用
Filter パラメータを WFS リクエストで使用して、WFS サービス内の特定のフィーチャを取得することができます。Filter パラメータの利点は、これが「WFS 1.1 Implementation Specification」のセクション 9.5 で定義された標準的なキーワードと値の組み合わせのエンコーディングの一部であり、HTTP リクエストの末尾に追加できる点です。WFS サービスは、OGC OpenGIS FE(Filter Encoding)Implementation Specification 1.1 を使用します。
次のフィルタを適用することができます。
ジオメトリ |
空間 |
論理演算 |
比較 |
レコードの並べ替え(Sort) |
---|---|---|---|---|
Envelope |
BBOX |
And |
EqualTo |
SortBy* |
Point |
Equals |
Or |
NotEqualTo | |
MultiPoint |
Disjoint |
Not |
LessThan | |
LineString |
Intersects |
GreaterThan | ||
Polygon |
Crosses |
LessThanOrEqualTo | ||
Touches |
GreaterThanOrEqualTo | |||
Within |
LIKE | |||
Contains |
Between | |||
Overlaps |
NullCheck |
* SortBy フィルタは、ArcSDE ジオデータベースに格納されたデータに基づく WFS サービスのみに適用することができます。
たとえば、WFS サービスに blockgroups という名前の FeatureType を作成した場合、以下の GetFeature リクエストを送信することにより、-122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 の範囲内で blockgroups フィーチャをリクエストできます。
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>
122.431577, 37.749936 といった特定のポイント フィーチャを含む blockgroups フィーチャをリクエストしたい場合には、以下の GetFeature リクエストを送信できます。
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 では、関連する名前空間の接頭辞をフィルタ XML 文字列に含める必要があります。さらに、Web ブラウザや Web サーバによって不正に変換されるのを防ぐために、フィルタ XML 文字列をサーバへ送信する前に URL でエンコードします。
Web ブラウザでの WFS サービスの利用
以下の例では、URL パラメータを使用して Web ブラウザで WFS サービスと通信を行っています。
GetCapabilities
このリクエストは、サービスを通じて利用できるすべてのフィーチャ タイプとファンクショナリティを GML 形式で返します。GetCapabilities 操作を使用するには、WFS サービスの URL をコピーしてアドレス バーに貼り付け、URL の末尾に「?request=getcapabilities」を追加します。
URL の例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=GetCapabilities
次の図は、GetCapabilities 操作から返されるファンクショナリティの例を示しています。
GetCapabilities は、利用可能なすべてのフィーチャクラスとテーブルのリストも返します。
DescribeFeatureType
このリクエストは、WFS サービスの 1 つ以上のフィーチャに関するフィールド情報を説明します。たとえば、フィールド名、フィールド タイプ、フィールドに許容される最小値と最大値、フィーチャクラスまたはフィーチャ テーブルのフィールドに設定されたその他の制約などがあります。
DescribeFeatureType 操作を使用するには、WFS URL をコピーしてアドレス バーに貼り付け、URL の末尾に「?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0」を追加します。フィーチャ サービスで利用できるフィーチャ タイプおよびテーブルごとに、すべてのフィールド情報が返されます。
URL の例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
フィルタの追加
URL の最後に、フィーチャ タイプまたはフィーチャ テーブルの名前とともに次のリクエストを追加することにより、フィールド情報を取得する単一のフィーチャクラスまたはフィーチャ テーブルを指定することもできます。
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=<フィーチャ タイプ>&VERSION=1.1.0
次の例では、DescribeFeatureType リクエストを使用して、cities という名前のフィーチャ タイプに関するフィールド情報を特定しています。
URL の例: 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
このリクエストは、WFS サービスを通じて利用可能な特定のフィーチャ タイプに関する情報を返します。
GetFeature 操作を Web ブラウザで使用するには、WFS URL をコピーしてアドレス バーに貼り付け、URL の末尾に「?request=getFeature&typename=<フィーチャ タイプ>」を追加します。これにより、フィーチャ タイプ内の各フィーチャまたは行に関するすべての属性およびジオメトリ情報が返されます。
URL の例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
フィルタの追加
リクエストにフィルタを追加して、返される結果を絞り込むこともできます。たとえば、指定した座標範囲内にあるすべての都市をリクエストすることができます。次の例では、指定した座標範囲内に 2 つの都市が位置しています。
URL の例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities&BBOX=46.90,-76.21,42.12,-72.88
FeatureID パラメータの操作
FeatureID パラメータを GetFeature リクエストで使用して、WFS サービス内の特定のフィーチャをリクエストすることができます。FeatureID パラメータは、フィーチャの OBJECTID ではなく、フィーチャ タイプとフィーチャ ID(gml:id)で構成されています。WFS サービス内にあるフィーチャのフィーチャ ID の形式は <フィーチャ タイプ>.<gml:id> です。WFS サービス内のフィーチャの gml:id を特定する 1 つの方法は、対象のフィーチャ タイプに GetFeature リクエストを行うことです。
gml:id は、シェープファイルに基づいた WFS サービス内のフィーチャでは使用できません。
たとえば、WFS サービスに Cities というフィーチャ タイプがあるとします。Cities に対して GetFeature リクエストを行うと、レスポンスには各フィーチャの gml:id が含まれます。
URL の例: http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&typename=cities
この例では、バンクーバー市のフィーチャ ID は cities.F293__1 です。以下のリクエストは、フィーチャ ID を使用して、バンクーバー市を具体的にリクエストする場合に使用することができます。
http://myserver:6080/arcgis/services/wfs_services/ArcSDE_wfs/GeoDataServer/WFSServer?request=getfeature&featureid=cities.F293__1