3.3. Web Feature Service (WFS)

QGIS Server に実装されている 1.0.0 及び 1.1.0 WFS 標準は、QGIS プロジェクトから地理的な地物を照会するための HTTP インターフェイスを提供します。典型的なWFSリクエストは、使用するQGISプロジェクトとクエリするレイヤを定義します。

サービスのバージョン番号に応じた仕様書:

QGIS Serverが提供する標準リクエスト

リクエスト

説明

GetCapabilities

サーバーに関する情報を含むXMLメタデータを返します

GetFeature

選択された地物を返します

DescribeFeatureType

地物の型とプロパティの説明を返します

Transaction

地物の挿入、更新または削除を可能にします

3.3.1. GetCapabilities

OGC WFS 1.0.0及び1.1.0仕様に従った、GetCapabilities リクエストの標準パラメータ

パラメーター

必須

説明

SERVICE

はい

サービスの名称 (WFS)

REQUEST

はい

リクエストの名称 (GetCapabilities)

VERSION

いいえ

サービスのバージョン

標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:

パラメーター

必須

説明

MAP

はい

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 リクエストの標準パラメータ:

パラメーター

必須

説明

SERVICE

はい

サービスの名称 (WFS)

REQUEST

はい

リクエストの名称 (GetFeature)

VERSION

いいえ

サービスのバージョン

TYPENAME

いいえ

レイヤの名前

FEATUREID

いいえ

idで地物をフィルタする

OUTPUTFORMAT

いいえ

出力形式

RESULTTYPE

いいえ

結果の型

PROPERTYNAME

いいえ

返すプロパティの名前

MAXFEATURES

いいえ

返す地物の最大数

SRSNAME

いいえ

座標参照系

FILTER

いいえ

OGCフィルターエンコーディング

BBOX

いいえ

マップの範囲

SORTBY

いいえ

結果を並び替える

標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:

パラメーター

必須

説明

MAP

はい

QGISプロジェクトファイル

STARTINDEX

いいえ

ページング

GEOMETRYNAME

いいえ

返すジオメトリの型

EXP_FILTER

いいえ

式フィルタ

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

このパラメータを使って、レスポンスの形式を指定することができます。VERSION1.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 リクエストの標準パラメータ:

パラメーター

必須

説明

SERVICE

はい

サービスの名称 (WFS)

REQUEST

はい

リクエストの名称 (DescribeFeatureType)

VERSION

いいえ

サービスのバージョン

OUTPUTFORMAT

いいえ

レスポンスの形式

TYPENAME

いいえ

レイヤの名前

標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:

パラメーター

必須

説明

MAP

はい

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 リクエストの標準パラメータ:

パラメーター

必須

説明

SERVICE

はい

サービスの名称 (WFS)

REQUEST

はい

リクエストの名称 (Transaction)

VERSION

いいえ

サービスのバージョン

FILTER

いいえ

OGCフィルターエンコーディング

BBOX

いいえ

マップの範囲

FEATUREID

いいえ

idで地物をフィルタする

TYPENAME

いいえ

レイヤの名前

標準のものに加えて、QGISサーバーでは以下の追加パラメータをサポートしています:

パラメーター

必須

説明

MAP

はい

QGISプロジェクトファイル

OPERATION

いいえ

操作を指定します

EXP_FILTER

いいえ

式フィルタ

OPERATION

このパラメータを使用すると、専用の XML 文書を使用した POST リクエストを使用せずに、地物を削除することができます。

URLの例:

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=Transaction
&OPERATION=DELETE
&FEATUREID=24

注釈

FEATUREIDBBOXFILTER の各パラメータは相互に排他的で、この順番で優先されます。

地物を追加する

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>