3.3. Web Feature Service (WFS)
QGIS Server に実装されている 1.0.0 及び 1.1.0 WFS 標準は、QGIS プロジェクトから地理的な地物を照会するための HTTP インターフェイスを提供します。典型的なWFSリクエストは、使用するQGISプロジェクトとクエリするレイヤを定義します。
サービスのバージョン番号に応じた仕様書:
QGIS Serverが提供する標準リクエスト
リクエスト |
説明 |
---|---|
サーバーに関する情報を含むXMLメタデータを返します |
|
選択された地物を返します |
|
地物の型とプロパティの説明を返します |
|
地物の挿入、更新または削除を可能にします |
3.3.1. GetCapabilities
OGC WFS 1.0.0及び1.1.0仕様に従った、GetCapabilities リクエストの標準パラメータ
パラメーター |
必須 |
説明 |
---|---|---|
はい |
サービスの名称 (WFS) |
|
はい |
リクエストの名称 (GetCapabilities) |
|
いいえ |
サービスのバージョン |
標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
QGISプロジェクトファイル |
VERSION
このパラメータでは、使用するサービスのバージョンを指定することができます。VERSION
パラメータに指定できる値は以下の通りです:
1.0.0
1.1.0
リクエストにバージョンが示されなかった場合、1.1.0
がデフォルトとして使われます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&...
3.3.2. GetFeature
OGC WFS 1.0.0及び1.1.0仕様に従った、GetFeature リクエストの標準パラメータ:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
サービスの名称 (WFS) |
|
はい |
リクエストの名称 (GetFeature) |
|
いいえ |
サービスのバージョン |
|
いいえ |
レイヤの名前 |
|
いいえ |
idで地物をフィルタする |
|
いいえ |
出力形式 |
|
いいえ |
結果の型 |
|
いいえ |
返すプロパティの名前 |
|
いいえ |
返す地物の最大数 |
|
いいえ |
座標参照系 |
|
いいえ |
OGCフィルターエンコーディング |
|
いいえ |
マップの範囲 |
|
いいえ |
結果を並び替える |
標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
QGISプロジェクトファイル |
|
いいえ |
ページング |
|
いいえ |
返すジオメトリの型 |
|
いいえ |
式フィルタ |
TYPENAME
このパラメータでは、レイヤ名を指定することができ、FEATUREID
がセットされていないときは必須です。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&TYPENAME=countries
FEATUREID
このパラメータでは、特定の地物のIDを指定することができ、typename.fid,typename.fid,...
のように形成されます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0,places.1
XMLレスポンス:
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=countries,places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
<gml:boundedBy>
...
</gml:boundedBy>
<gml:featureMember>
<qgs:countries gml:id="countries.1">
...
</qgs:countries>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.1">
...
</qgs:places>
</gml:featureMember>
</wfs:FeatureCollection>
OUTPUTFORMAT
このパラメータを使って、レスポンスの形式を指定することができます。VERSION
が 1.1.0
より大きいか等しい場合、GML3がデフォルトの形式です。それ以外の場合はGML2が使われます。
利用可能な値は次の通り:
gml2
text/xml; subtype=gml/2.1.2
gml3
text/xml; subtype=gml/3.1.1
geojson
application/vnd.geo+json
,application/vnd.geo json
application/geo+json
application/geo json
application/json
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0
&OUTPUTFORMAT=geojson
GeoJSONレスポンス:
{
"type":"FeatureCollection",
"bbox":[
-180,
-90,
180,
83.6236
],
"features":[
{
"bbox":[
-61.891113,
16.989719,
-61.666389,
17.724998
],
"geometry":{
"coordinates":[
"..."
],
"type":"MultiPolygon"
},
"id":"countries.1",
"properties":{
"id":1,
"name":"Antigua and Barbuda"
},
"type":"Feature"
}
]
}
RESULTTYPE
このパラメータを使って、返す結果の種類を指定することができます。利用可能な値は以下の通りです:
results
: デフォルトの動作hits
: 地物の数だけを返します
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&RESULTTYPE=hits
&...
PROPERTYNAME
このパラメータを使って、特定のプロパティを返すよう指定することができます。プロパティは TYPENAME
または FEATUREID
と共にマッピングされている必要があります:
有効なURLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places
対して、次のURLでは例外が返されます:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places,countries
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
<ServiceException code="RequestNotWellFormed">There has to be a 1:1 mapping between each element in a TYPENAME and the PROPERTYNAME list</ServiceException>
</ServiceExceptionReport>
MAXFEATURES
このパラメータは、リクエストによって返される地物の数を制限することができます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&MAXFEATURES=1000
注釈
このパラメータは、下層のベクタレイヤが重い場合にパフォーマンスを向上させるのに有効な場合があります。
SRSNAME
このパラメータは、BBOX
CRSと同様にレスポンス出力の空間参照系を指定することができます。パラメータは EPSG:XXXX
のように形成する必要があります。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&SRSNAME=EPSG:32620
FILTER
このパラメータは、OGC Filter Encoding standard で定義されている Filter Encoding 言語を使ってレスポンスをフィルタすることができます。例えば、以下のようになります:
http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
FILTER=<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>
型名が複数ある場合、フィルターは括弧で囲む必要があります:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&FILTER=(<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>)(<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>France</Literal></PropertyIsEqualTo></Filter>)
ポリゴンと交差する地物をフィルタする:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&VERSION=1.1.0
&TYPENAME=places
&FILTER=<Filter xmlns="http://www.opengis.net/ogc">
<Intersects>
<PropertyName>geometry</PropertyName>
<Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
<exterior>
<LinearRing>
<posList>
-0.6389 42.5922
10.2683 51.9106
14.5196 41.0320
-0.6389 42.5922
</posList>
</LinearRing>
</exterior>
</Polygon>
</Intersects>
</Filter>
BBOX
このパラメータを使用すると、現在のCRSに従った単位でマップの範囲を指定することができます。座標はカンマで区切る必要があります。
SRSNAME
パラメータは、範囲のCRSを指定することができます。指定しない場合、レイヤのCRSが使用されます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&BBOX=-11.84,42.53,8.46,50.98
FEATUREID
パラメータは BBOX
と共に使用することはできません。使用しようとすると、例外が発生します:
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
<ServiceException code="RequestNotWellFormed">FEATUREID FILTER and BBOX parameters are mutually exclusive</ServiceException>
</ServiceExceptionReport>
SORTBY
このパラメータは、プロパティ値に従って結果の地物をソートすることができます。パラメータは propertyname SORTRULE
のように形成する必要があります。
降順にソートする場合に SORTRULE
に指定できる値は次の通りです:
D
+D
DESC
+DESC
昇順にソートする場合に、SORTRULE
に指定できる値は次の通りです:
A
+A
ASC
+ASC
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&PROPERTYNAME=name
&MAXFEATURES=3
&SORTBY=name DESC
対応する結果です:
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
<gml:boundedBy>
...
</gml:boundedBy>
<gml:featureMember>
<qgs:places gml:id="places.90">
<qgs:name>Zagreb</qgs:name>
</qgs:places>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.113">
<qgs:name>Yerevan</qgs:name>
</qgs:places>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.111">
<qgs:name>Yaounde</qgs:name>
</qgs:places>
</gml:featureMember>
</wfs:FeatureCollection>
GEOMETRYNAME
このパラメータは、返す地物のジオメトリの種類を指定するために使用できます。利用可能な値は以下のとおりです:
extent
centroid
none
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&GEOMETRYNAME=centroid
&...
STARTINDEX
このパラメータはWFS 2.0では標準ですが、WFS 1.0.0では拡張です。
実際には、結果セットの一部の地物をスキップするために使用することができ、MAXFEATURES
と組み合わせることで、結果をページ送りする機能を提供します。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&STARTINDEX=2
&...
EXP_FILTER
このパラメータを使用すると、QGIS式でレスポンスをフィルタすることができます。型名が複数ある場合、;
文字でフィルタを区切ることができます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&EXP_FILTER="name"='Paris';"name"='France'
3.3.3. DescribeFeatureType
OGC WFS 1.0.0 及び 1.1.0 仕様に準拠した DescribeFeatureType リクエストの標準パラメータ:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
サービスの名称 (WFS) |
|
はい |
リクエストの名称 (DescribeFeatureType) |
|
いいえ |
サービスのバージョン |
|
いいえ |
レスポンスの形式 |
|
いいえ |
レイヤの名前 |
標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
QGISプロジェクトファイル |
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=DescribeFeatureType
&TYPENAME=countries
出力レスポンス:
<schema xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:qgs="http://www.qgis.org/gml" xmlns:gml="http://www.opengis.net/gml" targetNamespace="http://www.qgis.org/gml" version="1.0" elementFormDefault="qualified">
<import schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" namespace="http://www.opengis.net/gml"/>
<element type="qgs:countriesType" substitutionGroup="gml:_Feature" name="countries"/>
<complexType name="countriesType">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element minOccurs="0" type="gml:MultiPolygonPropertyType" maxOccurs="1" name="geometry"/>
<element type="long" name="id"/>
<element nillable="true" type="string" name="name"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>
3.3.4. Transaction
このリクエストでは、XML 文書を使用して、1 つまたは複数の地物を更新、削除、または追加することができます。削除 の操作は POST リクエストと OPERATION パラメータで行うことができ、 追加 と 更新 の操作は POST リクエストでのみ行うことができます。
OGC WFS 1.0.0 及び 1.1.0 仕様に準拠した Transaction リクエストの標準パラメータ:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
サービスの名称 (WFS) |
|
はい |
リクエストの名称 (Transaction) |
|
いいえ |
サービスのバージョン |
|
いいえ |
OGCフィルターエンコーディング |
|
いいえ |
マップの範囲 |
|
いいえ |
idで地物をフィルタする |
|
いいえ |
レイヤの名前 |
標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:
パラメーター |
必須 |
説明 |
---|---|---|
はい |
QGISプロジェクトファイル |
|
いいえ |
操作を指定します |
|
いいえ |
式フィルタ |
OPERATION
このパラメータを使用すると、専用の XML 文書を使用した POST リクエストを使用せずに、地物を削除することができます。
URLの例:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=Transaction
&OPERATION=DELETE
&FEATUREID=24
注釈
FEATUREID
、BBOX
、FILTER
の各パラメータは相互に排他的で、この順番で優先されます。
地物を追加する
POSTリクエストの例:
wget --post-file=add.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
使用する add.xml 文書:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Insert idgen="GenerateNew">
<qgs:places>
<qgs:geometry>
<gml:Point srsDimension="2" srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
<gml:coordinates decimal="." cs="," ts=" ">-4.6167,48.3833</gml:coordinates>
</gml:Point>
</qgs:geometry>
<qgs:name>Locmaria-Plouzané</qgs:name>
</qgs:places>
</wfs:Insert>
</wfs:Transaction>
地物を更新する
POSTリクエストの例:
wget --post-file=update.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
使用する update.xml 文書:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Update typeName="places">
<wfs:Property>
<wfs:Name>name</wfs:Name>
<wfs:Value>Lutece</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:FeatureId fid="24"/>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
地物を削除する
POSTリクエストの例:
wget --post-file=delete.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
使用する delete.xml 文書
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Delete typeName="places">
<ogc:Filter>
<ogc:FeatureId fid="24"/>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>