3.1 OGC 开放地理空间联盟标准


3.1 OGC 开放地理空间联盟标准

本节摘要:GIS 服务要互通靠标准。本节讲 OGC(开放地理空间联盟)制定的 WMS、WFS、WMTS 等协议——GIS 服务的通用语言。

本节导读

阅读完本节,你应当能够:

  1. 区分 WMS、WFS、WMTS、WCS
  2. 理解各协议的用途
  3. 用 OGC 协议请求服务

概念脉络

一、为什么需要 OGC 标准

不同 GIS 软件互不兼容,数据和服务难共享。OGC 制定标准协议,让任何客户端能消费任何符合标准的服务,实现互操作。

二、主要 OGC 协议

图 3-1 OGC 服务标准

图 3-1 OGC 服务标准

协议 全名 返回 用途
WMS Web Map Service 渲染图片 出图展示
WFS Web Feature Service 矢量要素 查询分析
WMTS Web Map Tile Service 瓦片图片 缓存加速出图
WCS Web Coverage Service 栅格数据 遥感影像

三、WMS 请求

WMS 用 HTTP GET 请求,参数指定图层、范围、尺寸:

http://server/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap &LAYERS=cities&BBOX=39,116,40,117&WIDTH=800&HEIGHT=600 &CRS=EPSG:4326&FORMAT=image/png

返回一张渲染好的地图图片。

四、WFS 请求

WFS 返回矢量数据(GML/GeoJSON),可查询可分析:

http://server/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature &TYPENAMES=cities&OUTPUTFORMAT=application/json

返回 FeatureCollection,前端能拿到几何和属性做分析。

五、WMTS 瓦片

WMTS 返回预渲染的瓦片,按层级行列索引,前端拼成地图。比 WMS 快(瓦片已缓存),但不能动态改样式。

六、矢量瓦片(Vector Tiles)

现代趋势是矢量瓦片(MVT,Mapbox Vector Tiles):服务端把矢量数据切成瓦片传给前端,前端渲染。兼顾 WMTS 的性能和 WFS 的可分析性,样式前端可控。

⚠️ 常见坑:要数据做分析却用 WMS——WMS 只返回图片拿不到数据。要数据用 WFS,要展示用 WMS/WMTS。

💡 关键直觉:WMS/WMTS 出图(看),WFS 取矢量(分析),WCS 取栅格(影像)。现代用矢量瓦片兼顾性能和分析。

七、如何发现一个 OGC 服务

拿到一个服务地址,第一件事是请求它的能力文档(GetCapabilities),它会告诉你这个服务提供了哪些图层、坐标系、格式、操作:

请求 WMS 能力文档 SERVICE=WMS&REQUEST=GetCapabilities 请求 WFS 能力文档 SERVICE=WFS&REQUEST=GetCapabilities

返回的 XML 里有 <Layer> 列表、每个图层的名称(LayerName)、默认坐标系、支持的文件格式。前端框架(OpenLayers 等)通常自带读取能力文档的组件,你只需要把服务地址填进去,它会自动列出图层。这个"先发现、再访问"的设计让 OGC 服务天然具备自描述能力,也是它和一堆私有接口的重要区别。

八、WFS 的条件查询

WFS 不只是"把整个图层拉下来",它支持按属性或空间条件过滤,减少传输量:

请求指定属性的要素 SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature &TYPENAMES=parcels&count=100 &CQL_FILTER=landuse='住宅' AND ST_INTERSECTS(geom, POLYGON((116 39,117 39,117 40,116 40,116 39)))

CQL(Common Query Language)是 OGC 的过滤语法,属性条件用普通比较,空间条件用 ST_INTERSECTS、ST_WITHIN 等函数。用上过滤后,前端从 WFS 拉的数据量能小一个数量级,是 Web GIS 性能优化的常用手段。

九、其他 OGC 协议

除了四大件,还有几个协议在特定场景会碰到:

协议 用途 典型场景
CSW 元数据目录服务 发现数据目录
WPS 地理处理服务 服务端执行分析算法
GML 地理标记语言 WFS 的默认数据格式
Filter Encoding 过滤编码标准 CQL 的 XML 形态
3D Tiles 三维瓦片标准 三维场景流式加载
GeoPackage 数据封装标准 离线数据交换

不需要背全,但要知道生态里有这些标准。实际项目中 80% 的需求由 WMS、WFS、WMTS 三个协议覆盖,遇到"找数据""调算法"的需求时,再查对应的 CSW 和 WPS 标准即可。

十、标准与实现的落差

理论上 OGC 标准保证互操作,实践中不同服务器实现仍有细节差异:有的对 VERSION 参数敏感,有的 CQL 支持不全,有的返回的坐标系范围不同。经验做法:先用 GetCapabilities 摸清对方支持的版本和格式,客户端优先用对方声明支持的能力;跨系统联调时,用 QGIS 或 OpenLayers 先连一次验证,再写正式代码。

十一、一个 WMS 服务的完整接入示例

用 OpenLayers 接入一个 WMS 图层,是 Web GIS 最常见的起步动作。流程是:先请求 GetCapabilities 确认图层名和坐标系,再在代码里注册图层源:

import TileLayer from 'ol/layer/Tile'; import TileWMS from 'ol/source/TileWMS'; const wmsLayer = new TileLayer({ source: new TileWMS({ url: '/geoserver/ows', params: { 'LAYERS': 'workspace:parcels', 'TILED': true, 'VERSION': '1.3.0' }, serverType: 'geoserver' }) }); map.addLayer(wmsLayer);

遇到图层不出图,按顺序排查:URL 是否指向服务根路径、LAYERS 名称是否和 GetCapabilities 里一致(注意工作区前缀)、坐标系是否匹配、服务端日志有没有报错。

十二、开放数据的价值

OGC 标准最大的价值是让数据成为公共基础设施。同一个图层发布成 WMS 后,业务系统、领导驾驶舱、公众门户、移动 App 都能按同一套接口消费,不需要为每个场景定制格式。这也是政府部门和大型企业偏爱标准协议的原因:接口是资产,标准让资产可复用。开发时遇到"要不要按标准来"的犹豫,倾向选标准,长期收益大于短期省事。

要点速记

  • OGC 标准:让不同 GIS 服务互通,通用语言。
  • WMS:返回渲染图片,出图展示。
  • WFS:返回矢量要素,查询分析。
  • WMTS:返回预渲染瓦片,缓存加速。
  • WCS:返回栅格数据,遥感影像。
  • 矢量瓦片:MVT 兼顾性能和可分析,样式前端控。

下一节讲地图服务器——怎么发布这些服务。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U