3.3. Web要素服务(WFS)
这个 1.0.0 和 1.1.0 QGIS Server中实现的WFS标准提供了一个HTTP接口来查询QGIS项目中的地理要素。典型的WFS请求定义了要使用的QGIS项目和要查询的层。
根据服务版本号的规范文档:
QGIS服务器提供的标准请求:
请求 |
描述 |
---|---|
返回包含有关服务器的信息的XML元数据 |
|
返回要素选择 |
|
返回要素类型和属性的描述 |
|
允许插入、更新或删除要素 |
3.3.1. GetCapabilities
的标准参数 GetCapabilities 请求符合OGC WFS 1.0.0和1.1.0规范:
参数 |
必填项 |
描述 |
---|---|---|
是 |
服务的名称( WFS ) |
|
是 |
请求的名称( GetCapabilities ) |
|
不是 |
服务的版本 |
除了标准参数外,QGIS Server还支持以下额外参数:
参数 |
必填项 |
描述 |
---|---|---|
是 |
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规范:
参数 |
必填项 |
描述 |
---|---|---|
是 |
服务的名称( WFS ) |
|
是 |
请求的名称( GetFeature ) |
|
不是 |
服务的版本 |
|
不是 |
层的名称 |
|
不是 |
按ID过滤要素 |
|
不是 |
输出格式 |
|
不是 |
结果的类型 |
|
不是 |
要返回的属性的名称 |
|
不是 |
要返回的最大要素数 |
|
不是 |
坐标参考系 |
|
不是 |
OGC过滤器编码 |
|
不是 |
地图范围 |
|
不是 |
对结果进行排序 |
除了标准参数外,QGIS Server还支持以下额外参数:
参数 |
必填项 |
描述 |
---|---|---|
是 |
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
此参数允许使用 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规范:
参数 |
必填项 |
描述 |
---|---|---|
是 |
服务的名称( WFS ) |
|
是 |
请求的名称( DescribeFeatureType ) |
|
不是 |
服务的版本 |
|
不是 |
响应的格式 |
|
不是 |
层的名称 |
除了标准参数外,QGIS Server还支持以下额外参数:
参数 |
必填项 |
描述 |
---|---|---|
是 |
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规范:
参数 |
必填项 |
描述 |
---|---|---|
是 |
服务的名称( WFS ) |
|
是 |
请求的名称( Transaction ) |
|
不是 |
服务的版本 |
|
不是 |
OGC过滤器编码 |
|
不是 |
地图范围 |
|
不是 |
按ID过滤要素 |
|
不是 |
层的名称 |
除了标准参数外,QGIS Server还支持以下额外参数:
参数 |
必填项 |
描述 |
---|---|---|
是 |
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>