结合GetCapabilities文档详解WFS服务

一、WFS 核心概念

WFS 是 OGC 制定的矢量数据服务标准,提供地理要素的增删改查能力。区别于 WMS(地图服务),WFS 直接操作地理要素(点、线、面)而非渲染图片。

关键特性:

  • 要素级操作:支持精确查询和编辑单个地理要素
  • 多格式支持:GML、GeoJSON、CSV、KML 等输出格式
  • 事务支持:通过 Transaction 操作实现数据编辑
  • 复杂查询:支持空间关系、属性过滤、函数计算

关键能力

1. 支持的 WFS 版本

  • 2.0.01.1.01.0.0
  • 获取服务元数据
http://localhost:8086/geoserver/lzugis/wfs?service=WFS&acceptversions=2.0.0&request=GetCapabilities

2. 核心操作与参数

  • GetFeature(数据查询)

    • 输出格式:支持 application/jsontext/csvGMLKMLSHAPE-ZIP 等。
    • 分页约束:默认返回上限 1000000 条记录(CountDefault=1000000)。
    • 示例请求(GeoJSON 格式):
      http://localhost:8086/geoserver/lzugis/wfs?service=WFS&version=2.0.0&request=GetFeature&typeNames=lzugis:base_province&outputFormat=application/json
      
  • Transaction(数据编辑)

    • 支持 Insert/Update/Delete 操作。
    • 输入格式:application/gml+xml; version=3.2
    • 示例 XML 请求(插入新要素):
      <wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs/2.0"
                       xmlns:gml="http://www.opengis.net/gml/3.2"
                       xmlns:lzugis="https://lzugis.cn">
        <wfs:Insert>
          <lzugis:buildings>
            <lzugis:name>New Building</lzugis:name>
            <lzugis:geom>
              <gml:Polygon srsName="EPSG:4326">
                <gml:exterior>
                  <gml:LinearRing>
                    <gml:posList>10.0 20.0 11.0 20.0 11.0 21.0 10.0 21.0 10.0 20.0</gml:posList>
                  </gml:LinearRing>
                </gml:exterior>
              </gml:Polygon>
            </lzugis:geom>
          </lzugis:buildings>
        </wfs:Insert>
      </wfs:Transaction>
      

3. 空间查询能力

  • 空间运算符
    IntersectsWithinDisjointBBOX(边界框查询)等。
  • 几何类型
    支持 PointLineStringPolygonMultiPolygon 等。
  • 示例(查询与某区域相交的要素):
    http://localhost:8086/geoserver/lzugis/wfs?request=GetFeature&typeNames=lzugis:base_province&CQL_FILTER=INTERSECTS(the_geom, POLYGON((10 20, 15 20, 15 25, 10 25, 10 20)))&outputFormat=application/json
    

4. 属性查询能力

  • 比较运算符
    PropertyIsEqualToPropertyIsLike(模糊匹配)、PropertyIsNull 等。
  • 示例(名称包含 "Park" 的要素):
    http://localhost:8086/geoserver/lzugis/wfs?request=GetFeature&typeNames=lzugis:base_province&CQL_FILTER=NAME LIKE '%广%'&outputFormat=application/json
    

5. 函数支持

文档中列出 200+ 函数,涵盖几何、数学、字符串、栅格处理等:

  • 几何函数buffer()centroid()area()
  • 栅格函数Contour()(生成等值线)、CropCoverage()(裁剪栅格)。
  • 示例(计算要素面积):
# 返回名称和面积
http://localhost:8086/geoserver/lzugis/wfs?request=GetFeature&typeNames=lzugis:base_province&   PROPERTYNAME=NAME,area(the_geom)&outputFormat=application/json

二、WFS 核心接口详解

1. 元数据接口

接口名称 描述 示例请求
GetCapabilities 获取服务能力文档 http://localhost:8086/geoserver/lzugis/wfs?service=WFS&acceptversions=2.0.0&request=GetCapabilities
DescribeFeatureType 获取要素结构定义 http://localhost:8086/geoserver/lzugis/wfs?request=DescribeFeatureType&typeNames=lzugis:base_province

2. 数据查询接口

接口名称 描述 关键参数
GetFeature 获取要素数据 typeNames (图层名), outputFormat, CQL_FILTER, PROPERTYNAME
GetPropertyValue 获取特定属性值 valueReference (属性名), resolve (引用解析)

3. 数据编辑接口

接口名称 描述 操作类型
Transaction 要素增删改 <wfs:Insert>, <wfs:Update>, <wfs:Delete>
LockFeature 锁定要素防并发冲突 releaseAction (ALL/SOME)

4. 存储查询接口

接口名称 描述
CreateStoredQuery 创建预定义查询
ListStoredQueries 列出所有存储查询
DescribeStoredQueries 获取存储查询详情

三、WFS 使用场景与示例

场景 1:基础数据查询

获取 GeoJSON 格式的道路数据

http://localhost:8086/geoserver/lzugis/wfs?service=WFS&version=2.0.0&request=GetFeature&typeNames=lzugis:base_province&outputFormat=application/json

场景 2:空间关系查询

查询与特定区域相交的数据

http://localhost:8086/geoserver/lzugis/wfs?request=GetFeature&typeNames=lzugis:base_province&CQL_FILTER=INTERSECTS(the_geom, POLYGON((10 20, 15 20, 15 25, 10 25, 10 20)))&outputFormat=application/json

场景 3:属性过滤查询

查询人口大于 100 万的城市

http://localhost:8086/geoserver/lzugis/wfs?request=GetFeature&typeNames=lzugis:base_province&CQL_FILTER=count > 5&outputFormat=application/json

场景 4:数据编辑事务

插入新道路要素 (XML 请求)

<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs/2.0"
                 xmlns:lzugis="https://lzugis.cn">
  <wfs:Insert>
    <lzugis:roads>
      <lzugis:name>New Highway</lzugis:name>
      <lzugis:geom>
        <gml:LineString srsName="EPSG:4326">
          <gml:posList>102.0 2.0 103.0 3.0</gml:posList>
        </gml:LineString>
      </lzugis:geom>
    </lzugis:roads>
  </wfs:Insert>
</wfs:Transaction>

通过合理利用 WFS 的强大功能,可构建从简单数据展示到复杂地理分析的全栈空间应用。GeoServer 的完整函数支持(如 HeatmapBarnesSurface 等)使其成为专业地理分析的理想平台。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容