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 2.0.0 の ArcGIS Server 実装では、GetFeatureByID、ListStoredQueries、および DescribeStoredQueries という追加のオペレーションが定義されています。
WFS サービスを利用するために使用できるサードパーティ クライアントはさまざまです。WFS サービスを使用するには、クライアントが WFS 1.0.0、1.1.0、または 2.0.0 と、GML の Simple Features プロファイルをサポートする必要があります。また、ArcGIS Desktop は WFS サービスを利用できます。ArcMap 内での WFS サービスについては、「ArcMap で WFS サービスを追加する」をご参照ください。
WFS の URL 構造
サービスに接続するには、次の形式で URL を指定する必要があります。
http://gisserver.domain.com:6080/arcgis/services/<フォルダー名 (必要に応じて)>/<サービス名>/MapServer/WFSServer?
- サーバー名は、Web サーバー コンピューターの名前です。
- ポート番号は、Web サーバー コンピューターが他のコンピューターと通信する際に使用するポートです。
たとえば、ポート 6080 で動作している gisserver.domain.com サーバーの DemoFolder というフォルダーで、マップ サービス WFSDemoService の WFS ケーパビリティを有効にしている場合、GetCapabilities の URL は次のようになります。
http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities
フィルターの使用
Filter パラメーターを WFS リクエストで使用して、WFS サービス内の特定のフィーチャを取得することができます。Filter パラメーターの利点は、これが「WFS 1.1 Implementation Specification」のセクション 9.5 で定義された標準的なキーワードと値の組み合わせのエンコーディングの一部であり、HTTP リクエストの末尾に追加できる点です。WFS 1.0.0 および 1.1.0 サービスは、OGC OpenGIS FE (Filter Encoding) Implementation Specification 1.1.0 を使用します。WFS 2.0.0 は、バージョン 2.0.0 のフィルター仕様を使用します。
次の表に、適用できるフィルターの一覧を示します。
Geometry | Spatial | 論理 | Comparison | レコードの並べ替え |
---|---|---|---|---|
エンベロープ | BBOX | かつ | EqualTo | SortBy* |
ポイント | 等しい | もしくは | NotEqualTo | |
マルチポイント | Disjoint | Not | LessThan | |
LineString | 交差 | GreaterThan | ||
ポリゴン | 横切る | LessThanOrEqualTo | ||
接する | GreaterThanOrEqualTo | |||
含まれる | Like | |||
含む | の間にある | |||
重複する | NullCheck |
注意:
* SortBy フィルターは、エンタープライズ ジオデータベースに格納されたデータに基づく WFS サービスのみに適用することができます。
たとえば、WFS サービスに blockgroups という名前の FeatureType を作成した場合、以下の GetFeature リクエストを送信することにより、-122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 の範囲内で blockgroups フィーチャをリクエストできます。
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>
122.431577, 37.749936 といった特定のポイント フィーチャを含む blockgroups フィーチャをリクエストしたい場合には、以下の GetFeature リクエストを送信できます。
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>
注意:
WFS では、関連する名前空間の接頭辞をフィルター XML 文字列に含める必要があります。さらに、Web ブラウザーや Web サーバーによって不正に変換されるのを防ぐために、フィルター XML 文字列をサーバーへ送信する前に URL でエンコードします。
Web ブラウザーでの WFS 1.0.0 または 1.1.0 サービスの利用
以下の例では、URL パラメーターを使用して Web ブラウザーで WFS サービスと WFS-T 1.0.0 および 1.1.0 サービスと通信を行っています。Web ブラウザーで WFS 2.0.0 の操作を使用する方法については、後述の「Web ブラウザーでの WFS 2.0 サービスの利用」をご参照ください。
ケーパビリティの取得
このリクエストは、サービスを通じて利用できるすべてのフィーチャ タイプとファンクショナリティを GML 形式で返します。GetCapabilities 操作を使用するには、WFS サービスの URL をコピーしてアドレス バーに貼り付け、URL の末尾に「?service=WFS&request=getcapabilities」を追加します。
URL の例: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&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://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0
フィルターの追加
URL の最後に、フィーチャ タイプまたはフィーチャ テーブルの名前とともに次のリクエストを追加することにより、フィールド情報を取得する単一のフィーチャクラスまたはフィーチャ テーブルを指定することもできます。
?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&typeName=<フィーチャ タイプ>
次の例では、DescribeFeatureType リクエストを使用して、continent という名前のフィーチャ タイプに関するフィールド情報を特定しています。
URL の例: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent
GetFeature
このリクエストは、WFS サービスを通じて利用可能な特定のフィーチャ タイプに関する情報を返します。
GetFeature 操作を Web ブラウザーで使用するには、WFS URL をコピーしてアドレス バーに貼り付け、URL の末尾に「?service=WFS&version=1.1.0&request=GetFeature&typeName=<フィーチャ タイプ>」を追加します。これにより、フィーチャ タイプ内の各フィーチャまたは行に関するすべての属性およびジオメトリ情報が返されます。
URL の例: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities
フィルターの追加
リクエストにフィルターを追加して、返される結果を絞り込むこともできます。たとえば、指定した座標範囲内にあるすべての都市をリクエストすることができます。次の例では、指定した座標範囲内に 3 つの都市が位置しています。
URL の例: 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
Insert
Insert を使用すると、単一のトランザクション リクエスト内に新しいフィーチャを作成することができます。デフォルトでは、作成するフィーチャの初期状態は、GML3 を使用して表現され、DescribeFeatureType オペレーションで生成される GML3 アプリケーション スキーマを基準にして整合チェックする必要があります。
たとえば、次の POST のサンプルは、都市を表すポイント フィーチャを挿入します。
<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>
アップデート
Update を使用すると、単一のトランザクション リクエスト内のフィーチャを更新することができます。
<Update> エレメントには、1 つ以上の <Property> が含まれています。この <Property> は、必須の typeName 属性を使用して指定されるフィーチャ タイプに属するプロパティに、名前および置換値を指定します。<Property> エレメントには、<Name> エレメントが含まれています。この <Name> エレメントには、修正するフィーチャ プロパティの名前および指定のフィーチャ プロパティの置換値を含む <Value> エレメント (オプション) が含まれています。<Value> エレメントを削除すると、プロパティには NULL 値が割当てられます。プロパティに NULL 値を許可しない場合、WFS は、NULL 値は許可されないことを示す例外を生成する必要があります。
たとえば、次の POST のサンプルは、cities というデータセットのポイント フィーチャを更新します。
<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>
Delete
Delete を使用すると、単一のトランザクション リクエスト内の 1 つ以上の (単一タイプの) フィーチャを削除することができます。Delete は、<Filter> エレメントを使用して定義されます。<Filter> エレメントが、削除するフィーチャ インスタンスを 1 つも特定しない場合、削除リクエストは無視されます。
たとえば、次の POST のサンプルは、cities というデータセットの 2 つのフィーチャを削除します。
<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>
Web ブラウザーでの WFS 2.0 サービスの利用
WFS 2.0.0 仕様に準拠した ArcGIS Server の実装では、「WFS 2.0 仕様」の記述に従って、基本的な WFS プロファイルで必要なフィーチャが処理されます。これには、GetCapabilities、DescribeFeatureType、および GetFeature の操作 (上記を参照) が含まれます。WFS 2.0 の実装では、トランザクション、ストアド クエリ、および応答ページングもサポートされています。これらは、基本的な WFS プロファイルに含まれていません。
トランザクション
トランザクション操作は、WFS サービス内のフィーチャ インスタンスに適用されるデータ変換操作の記述に使用されます。トランザクション操作を使用すると、クライアントは WFS 内のフィーチャを作成、変更、置換、および削除できます。トランザクションが完了すると、WFS は、操作の完了ステータスを示す XML 応答ドキュメントを生成します。
ストアド クエリ
ストアド クエリを使用すると、複雑なフィルター クエリを WFS 2.0 によって格納し、基本的なリクエストを使用して実行できます。WFS 1.0.0 または 1.1.0 と同じ結果を得るには、フィルター エンコーディング仕様を使用してフィルターを記述し、それを WFS URL に追加する必要があります。ストアド クエリを構成することで、アプリケーションにおける WFS 2.0 の使用を拡大する次のようなメリットがもたらされます。
- 複雑なクエリを簡素化して、HTTP GET リクエストとして実行できます。
- ストアド クエリは、アプリケーションの開発コストを削減できます。これは、複雑なアドホック クエリや XPath 式ではなく特定のクエリをサポートするようアプリケーションを構成できるためです。
- HTTP GET/POST および SOAP とともに WFS 上に RESTful インターフェイスを確立でき、軽量クライアント アプリケーション内で WFS を使用できます。
GetFeatureByID、ListStoredQueries、および DescribeStoredQueries 操作を使用して、ストアド クエリをサポートできます (以下を参照)。
ストアド クエリ ファイルの作成
ストアド クエリ ファイルは、特定のサービスに関連する、公開者が作成したストアド クエリのリストを保持する XML ファイルです。WFS 2.0 でストアド クエリを使用するには、ストアド クエリ ファイルを作成し、そのストアド クエリ ファイルの URL を参照するようにサービスを構成します。
次のストアド クエリ ファイルのサンプルは、ArcGIS Server に付属の SampleWorldCities マップ サービスと連携します。このファイルを作成し、「ストアド クエリを使用するための WFS サービスの構成」の指示に従って、このファイルを使用するように SampleWorldCities マップ サービスを構成できます。別の WFS サービスと連携するようにファイルを修正することもできます。
<?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
GetFeatureByID 操作は、id という名前または xsd:string という型の 1 つの引数を受け取り、ID が id 引数の指定値と一致する 1 つのフィーチャを返します。
次のサンプルの URL は、GetFeatureByID ストアド クエリを呼び出し、1 つのフィーチャを取得して表示します。
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
ListStoredQueries 操作では、ArcGIS Server で使用できるストアド クエリの一覧が表示されます。クライアントは、一度に 1 つのストアド クエリだけを実行できます。次に例を示します。
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
DescribeStoredQueries 操作では、ArcGIS Server で使用できるストアド クエリが記述されます。これは WFS クライアントにとって便利な操作で、サーバーに問い合わせて、ストアド クエリの特性を理解し、ストアド クエリを実行するために送信する必要のあるパラメーターを知ることができます。
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>
GetFeature リクエストの一部としてのストアド クエリの実行
次の例は、myrank=3 パラメーターを使用してストアド クエリ (AttributeDemo) を呼び出す属性リクエストを示しています。
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
次の例では、coordinates パラメーターを使用してストアド クエリ (SpatialDemo) を呼び出し、バウンディング ボックス内にある米国の都市の一覧を取得します。この一覧から最初の 2 つの都市だけが返されます (startindex と 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
次の例では、ストアド クエリ (FunctionChat_Length) を呼び出します。サーバー上のこのストアド クエリは、名前の長さが 3 文字以上の都市をフィルターで除外するように記述されています。
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
応答ページング
応答ページングを使用すると、リクエストによって、取得するフィーチャの開始インデックスを指定できます。また、取得するフィーチャの数も指定できます。
次のクエリでは、ArcGIS Server とともにインストールされた SampleWorldCities マップ サービスを使用して、Brasilia と Goiania という 2 つの都市 (count=2) が返されます。
http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=1&count=2
リクエストを変更して、開始インデックスが 2 で始まるようにすると、返される最初の都市が Goiania になります。count=2 であるため、このリクエストで返される 2 つの都市は Goiania と 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