znlgis 博客

GIS开发与技术分享

第4章 OGC标准服务

4.1 OGC标准概述

4.1.1 什么是OGC

开放地理空间联盟(Open Geospatial Consortium,简称OGC)是一个国际性的自愿共识标准组织,成立于1994年。OGC的使命是使地理信息和服务具有FAIR特性:可查找(Findable)、可访问(Accessible)、可互操作(Interoperable)和可重用(Reusable)。

OGC标准的重要性体现在:

4.1.2 GeoServer支持的OGC标准

GeoServer实现了多种OGC标准,按功能分类如下:

数据服务标准: | 标准 | 全称 | 主要用途 | |——|——|———| | WMS | Web Map Service | 地图图像服务 | | WMTS | Web Map Tile Service | 地图瓦片服务 | | WFS | Web Feature Service | 矢量要素服务 | | WCS | Web Coverage Service | 栅格覆盖服务 | | WPS | Web Processing Service | 空间处理服务 |

样式标准: | 标准 | 全称 | 主要用途 | |——|——|———| | SLD | Styled Layer Descriptor | 地图样式定义 | | SE | Symbology Encoding | 符号编码规范 |

编码标准: | 标准 | 全称 | 主要用途 | |——|——|———| | GML | Geography Markup Language | 地理数据XML编码 | | KML | Keyhole Markup Language | Google Earth格式 | | Filter | Filter Encoding | 查询条件编码 |

4.1.3 OGC API新标准

OGC正在开发新一代的Web API标准,GeoServer也在逐步支持:

这些新标准基于OpenAPI规范,更易于使用和集成。

4.2 WMS服务详解

4.2.1 WMS概述

Web Map Service(WMS)是最基础的OGC地图服务标准。WMS允许客户端请求按指定参数渲染的地图图像。

WMS的主要特点:

4.2.2 WMS操作

WMS定义了三个核心操作:

1. GetCapabilities

获取服务的元数据,包括可用图层、支持的格式等。

http://localhost:8080/geoserver/wms?
  service=WMS&
  version=1.1.1&
  request=GetCapabilities

返回XML格式的服务描述文档,包含:

2. GetMap

请求渲染的地图图像。

http://localhost:8080/geoserver/wms?
  service=WMS&
  version=1.1.1&
  request=GetMap&
  layers=workspace:layer1,workspace:layer2&
  styles=style1,style2&
  bbox=-180,-90,180,90&
  width=800&
  height=400&
  srs=EPSG:4326&
  format=image/png&
  transparent=true

GetMap参数说明:

参数 必需 说明
service 固定为WMS
version WMS版本,如1.1.1或1.3.0
request 固定为GetMap
layers 图层名称,多个用逗号分隔
styles 样式名称,可为空
bbox 边界框,格式为minx,miny,maxx,maxy
width 图像宽度(像素)
height 图像高度(像素)
srs/crs 坐标参考系统
format 输出格式,如image/png
transparent 是否透明背景
bgcolor 背景颜色
exceptions 异常报告格式

3. GetFeatureInfo

查询地图上某点的要素信息。

http://localhost:8080/geoserver/wms?
  service=WMS&
  version=1.1.1&
  request=GetFeatureInfo&
  layers=workspace:layer&
  query_layers=workspace:layer&
  styles=&
  bbox=-180,-90,180,90&
  width=800&
  height=400&
  srs=EPSG:4326&
  x=400&
  y=200&
  info_format=application/json&
  feature_count=10

GetFeatureInfo特有参数:

参数 说明
query_layers 要查询的图层
x, y 查询点的像素坐标
info_format 返回信息的格式
feature_count 最大返回要素数

4.2.3 WMS 1.1.1与1.3.0的区别

WMS有两个主要版本在使用:1.1.1和1.3.0。主要区别包括:

方面 WMS 1.1.1 WMS 1.3.0
坐标参数 SRS CRS
坐标顺序 x,y (经度,纬度) 取决于CRS定义
边界框顺序 minx,miny,maxx,maxy 可能是miny,minx,maxy,maxx
异常格式 application/vnd.ogc.se_xml XML

特别注意:在WMS 1.3.0中,对于EPSG:4326等地理坐标系,边界框的顺序变为纬度在前,经度在后。这是很多客户端出错的原因。

4.2.4 GeoServer WMS扩展功能

GeoServer在标准WMS基础上提供了许多扩展功能:

SLD参数:

动态传递样式定义:

&SLD=http://example.com/style.sld
&SLD_BODY=<StyledLayerDescriptor>...</StyledLayerDescriptor>

视点参数(Vendor Parameters):

&env=key1:value1;key2:value2    # 环境变量
&cql_filter=attribute='value'   # CQL过滤
&viewparams=param1:value1       # 视图参数
&format_options=dpi:300         # 格式选项

时间和高程维度:

&time=2023-01-01T00:00:00Z      # 时间维度
&elevation=100                  # 高程维度

4.2.5 WMS配置

在GeoServer中配置WMS服务:

  1. 进入”服务” > “WMS”
  2. 可配置的选项包括:

基本设置:

输出限制:

水印:

4.3 WFS服务详解

4.3.1 WFS概述

Web Feature Service(WFS)提供对矢量要素的访问和操作。与WMS返回图像不同,WFS返回实际的要素数据,包括几何和属性。

WFS的主要特点:

4.3.2 WFS服务级别

WFS定义了三个服务级别:

级别 支持的操作 说明
Basic GetCapabilities, DescribeFeatureType, GetFeature 只读访问
XLink Basic + GetGmlObject 支持XLink引用
Transactional XLink + Transaction, LockFeature 支持编辑操作

4.3.3 WFS操作

1. GetCapabilities

获取服务元数据:

http://localhost:8080/geoserver/wfs?
  service=WFS&
  version=2.0.0&
  request=GetCapabilities

2. DescribeFeatureType

获取要素类型的结构描述:

http://localhost:8080/geoserver/wfs?
  service=WFS&
  version=2.0.0&
  request=DescribeFeatureType&
  typeNames=workspace:layer

返回GML应用模式(XSD),描述要素的属性结构。

3. GetFeature

获取要素数据:

http://localhost:8080/geoserver/wfs?
  service=WFS&
  version=2.0.0&
  request=GetFeature&
  typeNames=workspace:roads&
  count=100&
  outputFormat=application/json

GetFeature参数说明:

参数 WFS 1.x WFS 2.0 说明
typeName typeName typeNames 要素类型名称
maxFeatures maxFeatures count 最大返回数量
propertyName propertyName propertyName 返回的属性
featureId featureId resourceId 要素ID
filter filter filter XML过滤条件
bbox bbox bbox 空间范围
sortBy sortBy sortBy 排序字段
startIndex - startIndex 起始位置

4. Transaction(WFS-T)

执行要素编辑操作(插入、更新、删除):

插入要素:

<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="2.0.0"
  xmlns:wfs="http://www.opengis.net/wfs/2.0"
  xmlns:gml="http://www.opengis.net/gml/3.2"
  xmlns:topp="http://www.example.com/topp">
  <wfs:Insert>
    <topp:roads>
      <topp:name>New Road</topp:name>
      <topp:type>highway</topp:type>
      <topp:geom>
        <gml:LineString srsName="EPSG:4326">
          <gml:posList>116.3 39.9 116.4 39.95</gml:posList>
        </gml:LineString>
      </topp:geom>
    </topp:roads>
  </wfs:Insert>
</wfs:Transaction>

更新要素:

<wfs:Transaction>
  <wfs:Update typeName="topp:roads">
    <wfs:Property>
      <wfs:ValueReference>topp:name</wfs:ValueReference>
      <wfs:Value>Updated Name</wfs:Value>
    </wfs:Property>
    <fes:Filter>
      <fes:ResourceId rid="roads.1"/>
    </fes:Filter>
  </wfs:Update>
</wfs:Transaction>

删除要素:

<wfs:Transaction>
  <wfs:Delete typeName="topp:roads">
    <fes:Filter>
      <fes:ResourceId rid="roads.1"/>
    </fes:Filter>
  </wfs:Delete>
</wfs:Transaction>

4.3.4 CQL过滤

GeoServer支持CQL(Common Query Language)作为简化的过滤语法:

属性过滤:

CQL_FILTER=name='Beijing'
CQL_FILTER=population > 1000000
CQL_FILTER=name LIKE 'Bei%'
CQL_FILTER=type IN ('highway', 'primary')

空间过滤:

CQL_FILTER=BBOX(geom, 116, 39, 117, 40)
CQL_FILTER=INTERSECTS(geom, POINT(116.3 39.9))
CQL_FILTER=WITHIN(geom, POLYGON((116 39, 117 39, 117 40, 116 40, 116 39)))
CQL_FILTER=DWITHIN(geom, POINT(116.3 39.9), 1000, meters)

组合条件:

CQL_FILTER=type='highway' AND population > 100000
CQL_FILTER=name='Beijing' OR name='Shanghai'

4.3.5 WFS输出格式

GeoServer WFS支持多种输出格式:

格式 MIME类型 说明
GML2 text/xml; subtype=gml/2.1.2 GML 2.1.2格式
GML3 text/xml; subtype=gml/3.1.1 GML 3.1.1格式
GML32 text/xml; subtype=gml/3.2 GML 3.2格式
GeoJSON application/json JSON格式
CSV text/csv 逗号分隔值
Shapefile application/zip Shapefile压缩包
KML application/vnd.google-earth.kml+xml Google Earth格式

4.4 WCS服务详解

4.4.1 WCS概述

Web Coverage Service(WCS)提供栅格覆盖数据的访问。与WMS返回渲染图像不同,WCS返回原始栅格数据,保留像元值信息。

WCS的适用场景:

4.4.2 WCS操作

1. GetCapabilities

http://localhost:8080/geoserver/wcs?
  service=WCS&
  version=2.0.1&
  request=GetCapabilities

2. DescribeCoverage

获取覆盖数据的详细描述:

http://localhost:8080/geoserver/wcs?
  service=WCS&
  version=2.0.1&
  request=DescribeCoverage&
  coverageId=workspace__coverage

3. GetCoverage

获取覆盖数据:

http://localhost:8080/geoserver/wcs?
  service=WCS&
  version=2.0.1&
  request=GetCoverage&
  coverageId=workspace__coverage&
  format=image/tiff&
  subset=x(116,117)&
  subset=y(39,40)&
  scalefactor=0.5

GetCoverage参数:

参数 说明
coverageId 覆盖数据标识符
format 输出格式
subset 子集范围
scalefactor 缩放因子
rangesubset 波段子集

4.5 WMTS服务详解

4.5.1 WMTS概述

Web Map Tile Service(WMTS)提供预生成的地图瓦片服务。WMTS的主要优势是高性能,因为瓦片是预先渲染好的。

WMTS与WMS的比较:

方面 WMS WMTS
响应内容 动态渲染的图像 预缓存的瓦片
性能 较慢 很快
灵活性 高(任意范围和尺寸) 低(固定的瓦片级别)
存储需求 需要缓存存储空间
适用场景 低频访问、复杂查询 高频访问、底图服务

4.5.2 瓦片金字塔

WMTS基于瓦片金字塔结构,每个级别的瓦片大小相同(通常256×256像素),但覆盖的地理范围不同:

Level 0: 1个瓦片覆盖全球
Level 1: 4个瓦片覆盖全球
Level 2: 16个瓦片覆盖全球
...
Level n: 4^n个瓦片覆盖全球

4.5.3 WMTS操作

1. GetCapabilities

http://localhost:8080/geoserver/gwc/service/wmts?
  service=WMTS&
  version=1.0.0&
  request=GetCapabilities

2. GetTile(KVP方式)

http://localhost:8080/geoserver/gwc/service/wmts?
  service=WMTS&
  version=1.0.0&
  request=GetTile&
  layer=workspace:layer&
  style=&
  tilematrixset=EPSG:4326&
  tilematrix=EPSG:4326:10&
  tilerow=512&
  tilecol=1024&
  format=image/png

3. GetTile(RESTful方式)

GeoServer支持RESTful风格的瓦片请求:

http://localhost:8080/geoserver/gwc/service/wmts/rest/
  {layer}/{style}/{tilematrixset}/{tilematrix}/{tilerow}/{tilecol}?format={format}

示例:

http://localhost:8080/geoserver/gwc/service/wmts/rest/
  workspace:layer/default/EPSG:4326/EPSG:4326:10/512/1024?format=image/png

4.5.4 TileMatrixSet

TileMatrixSet定义了瓦片的坐标系统和级别结构。常用的TileMatrixSet包括:

名称 坐标系 说明
EPSG:4326 WGS84地理坐标 全球范围
EPSG:900913 Web墨卡托 Google/OSM兼容
EPSG:3857 Web墨卡托 标准代码

4.5.5 GeoWebCache配置

GeoServer集成了GeoWebCache(GWC)来提供瓦片缓存功能:

启用图层缓存:

  1. 进入”瓦片缓存” > “图层缓存”
  2. 找到要缓存的图层
  3. 点击配置图标
  4. 设置缓存选项:
    • 启用缓存
    • 选择TileMatrixSet
    • 选择输出格式
    • 设置过期时间

预生成瓦片:

  1. 进入”瓦片缓存” > “种子和截断”
  2. 选择图层
  3. 配置种子参数:
    • 缩放级别范围
    • 地理范围
    • 线程数
  4. 点击”提交”开始生成

4.6 WPS服务详解

4.6.1 WPS概述

Web Processing Service(WPS)提供空间处理和分析功能。WPS允许客户端在服务器端执行地理处理操作。

WPS的适用场景:

4.6.2 WPS操作

1. GetCapabilities

获取可用的处理过程列表:

http://localhost:8080/geoserver/wps?
  service=WPS&
  version=1.0.0&
  request=GetCapabilities

2. DescribeProcess

获取特定处理过程的详细描述:

http://localhost:8080/geoserver/wps?
  service=WPS&
  version=1.0.0&
  request=DescribeProcess&
  identifier=JTS:buffer

3. Execute

执行处理过程:

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute service="WPS" version="1.0.0"
  xmlns:wps="http://www.opengis.net/wps/1.0.0"
  xmlns:ows="http://www.opengis.net/ows/1.1"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <ows:Identifier>JTS:buffer</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>geom</ows:Identifier>
      <wps:Data>
        <wps:ComplexData mimeType="application/wkt">
          POINT(116.3 39.9)
        </wps:ComplexData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>distance</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>0.01</wps:LiteralData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

4.6.3 常用WPS处理过程

GeoServer提供了大量内置的处理过程:

JTS空间操作:

矢量处理:

栅格处理:

4.7 服务配置与优化

4.7.1 全局服务设置

在GeoServer中配置服务的全局参数:

服务元数据:

输出限制:

4.7.2 图层服务配置

针对单个图层的服务配置:

  1. 进入图层编辑页面
  2. 在”发布”标签页配置服务选项
  3. 可配置:
    • 是否在某服务中发布
    • 默认样式
    • 查询限制

4.7.3 服务异常处理

配置错误响应的格式和内容:

WMS异常格式:

异常处理策略:

4.7.4 CORS配置

跨域资源共享(CORS)配置,允许Web应用从不同域访问GeoServer服务:

在web.xml中配置:

<filter>
  <filter-name>cross-origin</filter-name>
  <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  <init-param>
    <param-name>allowedOrigins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>allowedMethods</param-name>
    <param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
  </init-param>
</filter>

本章小结

本章详细介绍了GeoServer支持的OGC标准服务:

  1. OGC标准概述:理解OGC的作用和GeoServer支持的标准
  2. WMS服务:学习地图图像服务的操作和参数
  3. WFS服务:掌握矢量要素服务的访问和编辑
  4. WCS服务:了解栅格覆盖数据服务
  5. WMTS服务:学习地图瓦片服务和缓存配置
  6. WPS服务:了解Web处理服务的使用方法

OGC标准服务是GeoServer的核心功能,深入理解这些服务对于有效使用GeoServer至关重要。

在下一章中,我们将学习如何使用SLD和CSS创建地图样式,实现丰富的地图可视化效果。

思考与练习

  1. 使用GetMap请求获取一张PNG格式的地图图像。
  2. 使用WFS GetFeature请求获取JSON格式的矢量数据。
  3. 使用CQL_FILTER进行空间和属性查询。
  4. 配置图层的WMTS缓存,预生成一定范围的瓦片。
  5. 使用WPS执行一个缓冲区分析操作。
  6. 比较WMS 1.1.1和1.3.0版本在坐标顺序上的差异。