WFS参考

这个 Web Feature Service (WFS)是开放地理空间联盟(OGC)创建的一个标准,用于在互联网上使用HTTP创建、修改和交换矢量格式的地理信息。WFS以地理标记语言(GML)编码和传输信息,GML是XML的一个子集。

WFS的当前版本是 2.0.0 .GeoServer支持版本2.0.0、1.1.0和1.0.0。尽管版本之间存在一些重要的差异,但请求语法通常保持不变。

相关的OGC规范 Web地图服务(WMS) 定义了以数字图像格式交换地理信息的标准。

WFS的好处

WFS标准定义了以独立于基础数据源的方式提供对离散地理特征的访问和支持交易的框架。通过发现、查询、锁定和事务操作的组合,用户可以以一种方式访问源空间和属性数据,从而允许他们查询、设置样式、编辑(创建、更新和删除)和下载单个功能。WFS的事务功能还支持协作映射应用程序的开发和部署。

操作

WFS的所有版本都支持这些操作:

操作

描述

GetCapabilities

生成一个元数据文档,描述服务器提供的WFS服务以及有效的WFS操作和参数。

DescribeFeatureType

返回WFS服务支持的功能类型的描述

GetFeature

返回从数据源中选择的要素,包括几何图形和属性值

LockFeature

阻止通过持久功能锁编辑功能

Transaction

通过创建、更新和删除编辑现有要素类型

以下操作可用于 仅2.0.0版

操作

描述

GetPropertyValue

从数据存储中为使用查询表达式标识的一组功能检索功能属性的值或复杂功能属性的部分值

GetFeatureWithLock

返回所选功能并对这些功能应用锁

CreateStoredQuery

在WFS服务器上创建存储的查询

DropStoredQuery

从WFS服务器删除存储的查询

ListStoredQueries

返回WFS服务器上存储的查询的列表

DescribeStoredQueries

返回描述存储在WFS服务器上的查询的元数据文档

以下操作可用于 仅1.1.0版

操作

描述

GetGMLObject

按ID从WFS检索功能和元素

备注

在下面的示例中,虚构的URL http://example.com/geoserver/wfs 用于说明。要测试示例,请替换有效WFS的地址。此外,尽管请求通常在一行中定义,但为了清晰起见,在提供的示例中添加了中断。

GetCapabilities

这个 GetCapabilities 操作是向WFS服务器请求操作和服务列表,或者 能力 ,由该服务器支持。

要使用http发出get请求,请执行以下操作:

http://example.com/geoserver/wfs?
  service=wfs&
  version=1.1.0&
  request=GetCapabilities

使用post的等效请求:

<GetCapabilities
 service="WFS"
 xmlns="http://www.opengis.net/wfs"
 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"/>

GET请求最容易解码,但POST请求是等效的。

getCapabilities的参数为:

参数

必修的?

描述

service

是的

服务名称值为 WFS

version

是的

服务版本值是当前版本号。必须提供完整的版本号(“1.1.0”、“1.0.0”),而不是缩写形式(“1”或“1.1”)。

request

是的

操作名称值为 GetCapabilities

尽管根据规范,上述所有参数在技术上都是必需的,但是如果请求中省略了任何参数,geoserver将提供默认值。

getCapabilities响应是一个冗长的XML文档,其格式对于每个支持的版本都是不同的。getCapabilities文档中有五个主要组件:

成分

描述

ServiceIdentification

包含请求的基本头信息,例如 TitleServiceType . 这个 ServiceType 指示支持哪些版本的WFS。

ServiceProvider

提供有关发布WFS服务的公司的联系信息,包括电话、网站和电子邮件。

OperationsMetadata

描述WFS服务器支持的操作以及每个操作的参数。WFS服务器可能配置为不响应上面列出的操作。

FeatureTypeList

列出WFS服务器发布的功能类型。表单中列出了功能类型 namespace:featuretype .还列出了特征类型的默认投影,以及所述投影中数据的边界框。

Filter_Capabilities

列出可用于形成查询谓词的筛选器或表达式,例如, SpatialOperators (如 EqualsTouchesComparisonOperators (如 LessThanGreaterThan )。getCapabilities文档中不包括筛选器本身。

DescribeFeatureType

DescribeFeatureType 在请求实际数据之前,请求有关单个功能类型的信息。具体来说,该操作将请求给定特征类型的特征和属性列表,或者列出可用的特征类型。

描述FeatureType的参数为:

参数

必修的?

描述

service

是的

服务名称值为 WFS

version

是的

服务版本值是当前版本号

request

是的

操作名称值为 DescribeFeatureType

typeNames

是的

要描述的功能类型的名称 (typeName 对于WFS 1.1.0及更早版本)

exceptions

报告异常的格式默认值为 application/vnd.ogc.se_xml

outputFormat

定义用于描述要素类型的方案描述语言

要返回功能类型列表,GET请求如下。此请求将返回按命名空间排序的功能类型列表:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=DescribeFeatureType

列出有关调用的特定功能类型的信息 namespace:featuretype ,GET请求为:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=DescribeFeatureType&
  typeNames=namespace:featuretype

GetFeature

这个 GetFeature 操作从数据源返回一组功能。

此请求将对给定层执行GetFeature请求 namespace:featuretype ::

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype

执行此命令将返回给定功能类型(可能是大量数据)中所有功能的几何图形。要限制输出,可以通过包含附加参数将getFeature请求限制为单个功能, featureID 以及提供特定特征的ID。在这种情况下,GET请求是:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature

如果功能的ID未知,但仍要限制返回的功能的数量,请使用 count WFS 2.0.0或 maxFeatures 早期WFS版本的参数。在下面的例子中, N 表示要返回的功能数::

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  count=N
http://example.com/geoserver/wfs?
  service=wfs&
  version=1.1.0&
  request=GetFeature&
  typeName=namespace:featuretype&
  maxFeatures=N

具体返回的n个特性取决于数据的内部结构。但是,可以基于属性值对返回的选择进行排序。在下面的示例中,使用 sortBy=attribute 参数(替换 attribute 使用要排序的属性)::

http://example.com/geoserver/wfs?
   service=wfs&
   version=2.0.0&
   request=GetFeature&
   typeNames=namespace:featuretype&
   count=N&
   sortBy=attribute

默认的排序操作是按升序排序。有些WFS服务器要求指定排序顺序,即使需要升序排序。在这种情况下,附加一个 +A 请求。相反,添加 +D 按以下降序排序的请求:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  count=N&
  sortBy=attribute+D

没有义务使用 sortBy 具有 count 在getfeature请求中,但是它们可以一起使用,以更有效地管理返回的功能选择。

要按属性而不是按功能限制GetFeature请求,请使用 propertyName 在表单中键入 propertyName=attribute .可以指定单个属性,也可以指定由逗号分隔的多个属性。要在所有功能中搜索单个属性,需要以下请求:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  propertyName=attribute

对于只有一个功能的单个属性,请同时使用这两个功能 featureIDpropertyName ::

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature&
  propertyName=attribute

对于单个功能中的多个属性,请使用逗号分隔的值列表 propertyName ::

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature&
  propertyName=attribute1,attribute2

虽然上述GetFeature请求的排列集中于非空间参数,但也可以基于几何图形查询功能。虽然GET空间查询请求中的可用选项有限(使用过滤器的POST请求中有更多可用选项),但支持按边界框(bbox)筛选。

bbox参数允许您搜索包含(或部分包含)在用户定义坐标框中的功能。bbox参数的格式为 bbox=a1,b1,a2,b2,[crs] 在哪里? a1b1a2b2 表示坐标值。可选 crs 参数用于命名bbox坐标的crs(如果它们与FeatureTypes本机crs不同)。传递给bbox参数的坐标顺序取决于所使用的坐标系(这就是为什么坐标语法不用 xy

要为返回的要素指定坐标系,请附加 srsName=CRS 到WFS请求,其中 CRS 是要使用的坐标参考系。

至于要指定边界框的哪些角,唯一的要求是首先提供底角(左或右)。例如,左下和右上,或右下和左上。

基于边界框(使用FeatureTypes本机CRS)返回功能的示例请求:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  srsName=CRS&
  bbox=a1,b1,a2,b2

要使用带有不同于FeatureTypes本机CRS的CRS的边界框请求功能,请执行以下操作:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  srsName=CRS&
  bbox=a1,b1,a2,b2,CRS

LockFeature

A LockFeature 操作提供了一个长期的功能锁定机制,以确保编辑事务的一致性。如果一个客户机在将某个功能提交回WFS之前获取了该功能并进行了一些更改,则锁会阻止其他客户机对同一功能进行任何更改,从而确保可以序列化事务。如果WFS服务器支持此操作,它将在服务器的getCapabilities响应中报告。

实际上,很少有客户机支持此操作。

交易

这个 交易 操作可以创建、修改和删除WFS发布的功能。每个事务将由零个或多个插入、更新和删除元素组成,并按顺序执行每个事务元素。每个地理服务器事务都是 原子的 也就是说,如果任何元素失败,则放弃事务,并且数据不变。支持的WFS服务器 交易 有时称为WFS-T服务器。 geoserver完全支持事务。

有关事务语法的更多信息,请参阅 WFS specification 而在 GeoServer sample requests .

GetGMLObject

备注

此操作的有效期为 仅限WFS版本1.1.0 .

A GetGMLObject 操作接受GML对象(特征或几何体)的标识符并返回该对象。此操作仅在需要 复杂的特征 通过允许客户机只提取复杂功能的嵌套属性的一部分。因此,这种操作并没有被客户机应用程序广泛使用。

GetPropertyValue

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A GetPropertyValue 操作从数据源中检索由查询标识的给定功能集的功能属性值或复杂功能属性值的一部分。

此示例仅检索 topp:states 层:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetPropertyValue&
  typeNames=topp:states&
  valueReference=the_geom

POST请求中的相同示例:

<wfs:GetPropertyValue service='WFS' version='2.0.0'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'
 valueReference='the_geom'>
  <wfs:Query typeNames='topp:states'/>
</wfs:GetPropertyValue>

要检索其他属性的值,请更改 valueReference 参数。

GetFeatureWithLock

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A GetFeatureWithLock 操作类似于 GetFeature 操作,除了当功能集从WFS服务器返回时,这些功能也会在后续事务操作之前被锁定。

此post示例检索 topp:states 层,但另外,将这些功能锁定5分钟。

<wfs:GetFeatureWithLock service='WFS' version='2.0.0'
 handle='GetFeatureWithLock-tc1' expiry='5' resultType='results'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'
 valueReference='the_geom'>
  <wfs:Query typeNames='topp:states'/>
</wfs:GetFeatureWithLock>

要调整锁定时间,请更改 expiry 参数。

CreateStoredQuery

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A CreateStoredQuery 操作在WFS服务器上创建存储的查询。存储查询的定义编码在 StoredQueryDefinition 参数,并为引用提供ID。

这个post示例创建一个新的存储查询(称为“mystoredquery”),它过滤 topp:states 在给定感兴趣区域内对这些功能进行分层 (${{AreaOfInterest}} ):

<wfs:CreateStoredQuery service='WFS' version='2.0.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'
 xmlns:fes='http://www.opengis.org/fes/2.0'
 xmlns:gml='http://www.opengis.net/gml/3.2'
 xmlns:myns='http://www.someserver.com/myns'
 xmlns:topp='http://www.openplans.org/topp'>
  <wfs:StoredQueryDefinition id='myStoredQuery'>
    <wfs:Parameter name='AreaOfInterest' type='gml:Polygon'/>
    <wfs:QueryExpressionText
     returnFeatureTypes='topp:states'
     language='urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression'
     isPrivate='false'>
      <wfs:Query typeNames='topp:states'>
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>the_geom</fes:ValueReference>
             ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
</wfs:CreateStoredQuery>

DropStoredQuery

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A DropStoredQuery 操作删除以前由CreateStoredQuery操作创建的存储查询。请求接受要删除的查询的ID。

此示例将删除ID为的存储查询 myStoredQuery ::

http://example.com/geoserver/wfs?
  request=DropStoredQuery&
  storedQuery_Id=myStoredQuery

POST请求中的相同示例:

<wfs:DropStoredQuery
 xmlns:wfs='http://www.opengis.net/wfs/2.0'
 service='WFS' id='myStoredQuery'/>

ListStoredQueries

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A ListStoredQueries 操作返回WFS服务器当前维护的存储查询的列表。

此示例列出了服务器上所有存储的查询::

http://example.com/geoserver/wfs?
  request=ListStoredQueries&
  service=wfs&
  version=2.0.0

POST请求中的相同示例:

<wfs:ListStoredQueries service='WFS'
 version='2.0.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'/>

DescribeStoredQueries

备注

此操作的有效期为 仅限WFS 2.0.0版 .

A DescribeStoredQuery 操作返回有关WFS服务器维护的每个存储查询的详细元数据。可以通过提供特定查询的ID来请求对单个查询的描述。如果没有提供ID,则描述所有查询。

此示例描述ID为的现有存储查询 urn:ogc:def:query:OGC-WFS::GetFeatureById ::

http://example.com/geoserver/wfs?
  request=DescribeStoredQueries&
  storedQuery_Id=urn:ogc:def:query:OGC-WFS::GetFeatureById

POST请求中的相同示例:

<wfs:DescribeStoredQueries
 xmlns:wfs='http://www.opengis.net/wfs/2.0'
 service='WFS'>
  <wfs:StoredQueryId>urn:ogc:def:query:OGC-WFS::GetFeatureById</wfs:StoredQueryId>
</wfs:DescribeStoredQueries>

例外情况

WFS还支持许多报告异常的格式。支持的异常报告值包括:

格式

句法

描述

XML

exceptions=text/xml

(默认) XML输出

JSON

exceptions=application/json

简单JSON

JSONP

exceptions=text/javascript

以以下形式返回一个JSONP:parseResponse(...JSONP...)。看见 WMS供应商参数 更改回调名称。请注意,此格式在默认情况下处于禁用状态(请参见 影响WMS的全局变量 )。