3.3. Web要素服务(WFS)

这个 1.0.01.1.0 QGIS Server中实现的WFS标准提供了一个HTTP接口来查询QGIS项目中的地理要素。典型的WFS请求定义了要使用的QGIS项目和要查询的层。

根据服务版本号的规范文档:

QGIS服务器提供的标准请求:

请求

描述

GetCapabilities

返回包含有关服务器的信息的XML元数据

GetFeature

返回要素选择

DescribeFeatureType

返回要素类型和属性的描述

Transaction

允许插入、更新或删除要素

3.3.1. GetCapabilities

的标准参数 GetCapabilities 请求符合OGC WFS 1.0.0和1.1.0规范:

参数

必填项

描述

SERVICE

服务的名称( WFS )

REQUEST

请求的名称( GetCapabilities )

VERSION

不是

服务的版本

除了标准参数外,QGIS Server还支持以下额外参数:

参数

必填项

描述

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

的标准参数 GetFeature 请求符合OGC WFS 1.0.0和1.1.0规范:

参数

必填项

描述

SERVICE

服务的名称( WFS )

REQUEST

请求的名称( GetFeature )

VERSION

不是

服务的版本

TYPENAME

不是

层的名称

FEATUREID

不是

按ID过滤要素

OUTPUTFORMAT

不是

输出格式

RESULTTYPE

不是

结果的类型

PROPERTYNAME

不是

要返回的属性的名称

MAXFEATURES

不是

要返回的最大要素数

SRSNAME

不是

坐标参考系

FILTER

不是

OGC过滤器编码

BBOX

不是

地图范围

SORTBY

不是

对结果进行排序

除了标准参数外,QGIS Server还支持以下额外参数:

参数

必填项

描述

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

此参数可用于指定响应的格式。如果 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

此参数允许使用 Filter Encoding 定义的语言 OGC Filter Encoding standard 。例如:

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>)

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

该参数是WFS2.0中的标准参数,但它是WFS1.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

的标准参数 DescribeFeatureType 请求符合OGC WFS 1.0.0和1.1.0规范:

参数

必填项

描述

SERVICE

服务的名称( WFS )

REQUEST

请求的名称( DescribeFeatureType )

VERSION

不是

服务的版本

OUTPUTFORMAT

不是

响应的格式

TYPENAME

不是

层的名称

除了标准参数外,QGIS Server还支持以下额外参数:

参数

必填项

描述

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. 交易记录

该请求允许更新、删除或添加一个或多个特性,这要归功于一个XML文档。这个 delete 操作可以通过POST请求以及 OPERATION 参数,而 add 以及 update 只能通过POST请求实现操作。

的标准参数 Transaction 请求符合OGC WFS 1.0.0和1.1.0规范:

参数

必填项

描述

SERVICE

服务的名称( WFS )

REQUEST

请求的名称( Transaction )

VERSION

不是

服务的版本

FILTER

不是

OGC过滤器编码

BBOX

不是

地图范围

FEATUREID

不是

按ID过滤要素

TYPENAME

不是

层的名称

除了标准参数外,QGIS Server还支持以下额外参数:

参数

必填项

描述

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>