0、 前言
由于不是地信专业学生,在刚开始WebGIS相关工作时,对地图服务这个概念一直不理解,搞不清ArcGIS发布的服务、WMS服务、切片服务、WebGIS框架leaflet中tileLayer/featureLayer等等概念。最近有时间,正好做一个梳理。
1、GIS服务器
Web服务器提供网络服务,使得我们可以上网冲浪,GIS服务器提供GIS数据服务,使得我们可以遵循某些规范访问地理数据或者地理服务。
GIS服务器软件通常基于HTTP等协议,包括:开源的GeoServer
、MapServer
,商用的Esri的ArcGIS Enterprise
套件等。GIS服务器可以是独立的软件,也可以是某个Web服务器的一个插件。例如,ArcGIS Enterprise套件就是自成一家,GeoServer就是Tomcat的一个war包插件。
Q:GIS数据一定要放在GIS服务器上吗? A:不一定。诸如geojson这样的静态数据,可以直接放到普通web服务器上,通过http的get或post请求交换数据;诸如gltf、3dtiles三维数据,开源服务器尚未支持三维服务,OGC组织也没有3DGIS服务规范,只好放在普通web服务器上。但是,成熟的二维数据,做成GIS数据服务( 是有利于前端开发者进行调用、渲染、数据查询、云处理的。
2、GIS 服务标准服务
通常来说,我们说的GIS服务是指GIS数据服务
。但是,其实GIS服务还可以提供计算服务,也即GIS处理服务
。 GIS数据服务包含很多:
- OGC标准服务
- 各大GIS厂家自己的服务(一般会兼容OGC):Arcgis、SuperMap
本节只介绍OGC标准服务,其他服务可查阅相关文档。
OGC 标准服务
OGC全称——开放地理空间信息联盟(Open Geospatial Consortium), 是一个比较“官方”的标准化机构。它的主要目的就是制定与空间信息、基于位置服务相关的标准。 OGC目前提供的标准多达几十种,包括我们常用到的WMS、WFS、WCS、WMTS 等等,还有一些地理数据信息的描述文档,比如 KML、SFS(简单对象描述)、GML、SLD(地理数据符号化) 等。下面介绍几种常见的标准服务接口。
WMS-提供访问地理数据的网络地图服务
Web地图服务(Web Map Server,WMS)利用具有地理空间信息的数据制作地图。本质就是把数据发布之后将其变成图片再切分的服务,和其他服务不同的是它是实时切片,就是网页向服务器发送请求,服务器才会开始切片,切完了才会发给网页。能够根据用户的请求返回相应的地图,包括 PNG,GIF,JPEG 等栅格形式或者是 SVG 和 WEB CGM 等矢量形式。 WMS支持网络协议 HTTP,所支持的操作是由 URL 定义的。
- 缺点:因为是现做,所以慢。
- 优点:能保证数据的时效性,同时更新了数据之后不必重新切片,管理方便。 适合数据更新频率高,数据量并不大的数据。
**WMS 请求方式:**WMS 支持标准 HTTP 中标准的 GET 请求和 POST 请求方式,不过对于 WMS 来说,基本都是基于 GET 方式的服务请求。
WMS标准主要定义了用于创建和显示地图图像的三大操作:GetCapabilities
(获取服务能力),GetMap
(获取地图)和 GetFeatureInfo
(获取对象信息-点击查询)。其中 GetMap 为核心操作,此操作得到一副地图图像。**GetCapabilities**
:它是对服务信息内容和要求参数的一种描述。其中包括有当前服务提供商的一些基本信息以及当前服务的一些能力,而对于使用 WMS 服务的客户端来说,能获取到的所有信息全部包含在此文档中,当客户端发送一个服务中没有提供图片格式时,此时服务端没有能力处理此请求。在使用 WMS 服务时需要确认当前服务提供的能力,以便在使用过程中发生一些不必要的麻烦。向客户端提供当前地图服务器可以提供的空间信息类型和范围、具体的图层信息和显示样式、支持的查询方式、没有查询结果时(异常)的缺省返回信息格式等服务描述信息。
GetCapabilities
请求 URL 的参数:
请求参数 | 必选(M)/可选(O) | 说明 |
---|---|---|
VERSION=version | O | 请求版本,URL 中可选的请求参数,当没有使用时就使用当前服务提供商提供的最高的 WMS 版本服务 |
SERVICE=WMS | M | 服务类型 |
REQUEST=GetCapabilities | M | 请求名,请求中必须设置当前请求的操作,可以设置 request 的值为 Getcapabilities、GetMap、GetFeatureInfo |
FORMAT=MIME_type | O | 服务元数据的输出格式 |
UPDATESEQUENCE=string | O | 用于控制缓冲存储的数字序列或字符串 |
GetMap
:返回一个地图影像,其地理空间参考和大小参数是明确定义了的,需要明确地指定出操作本身遵循的 WMS 规范的版本号以及需要显示的具体图层、对应的坐标范围、返回图像的大小格式等。
GetMap 请求的参数:
请求参数 | 必选的(M)/可选的(O) | 说明 |
---|---|---|
VERSION=version | M | 请求版本 |
REQUEST=GetMap | M | 请求名称 |
LAYERS=layer_list | M | 以逗号隔开的一个或多个图层列表,若存在 SLD 参数则是可选的 |
STYLES=style_list | M | 以逗号隔开的请求图层的一个再现风格列表,若存在 SLD 参数则是可选的 |
CRS=namespace:identifier | M | 坐标参考系 |
BBOX=minx,miny,maxx,maxy | M | 以 SRS 单位表示的边界框变焦(左下角,右上角) |
WIDTH=output_width | M | 以像素表示的地图图像宽度 |
HEIGHT=output_height | M | 以像素表示的地图图像高度 |
FORMAT=output_format | M | 地图输出格式 |
TRANSPARENT=TRUE | FALSE | O |
BGCOLOR=color_value | O | 以十六进制RGB颜色值表示的背景颜色(default=0xFFFFFF) |
EXCEPTIONS=exception_format | O | WMS通告异常的格式(default=SE_XML) |
TIME=time | O | 请求层的时间值 |
ELEVATION=elevation | O | 请求层的高程 |
Other sample dimension(s) | O | 其他适当维度的值 |
Vendor-specific parameters | O | 可选的实验性参数 |
对 GetMap 的响应:对有效的 GetMap 请求的响应必须是一张地图,它包含了所请求的具有地理参考坐标的信息层,使用的是期望的样式,并且采用了指定的空间参考系、范围框、大小和透明性。一个无效的 GetMap 请求必须产生一个按请求的 Exceptions 格式输出的错误信息(或在极端情况下回答一个网络协议错误)。
**GetFeatureInfo**
**:**返回显示在地图上的某些特殊要素的信息 。该操作向 WMS 的客户端程序提供了进一步查询特定空间实体信息的能力。这种操作往往是由客户程序在 WMS 服务器先前返回的地图上指定了一个空间实体,进而提交查询而形成。支持 GetFeatureInfo 操作的仅仅是那些定义或继承了属性 queryable="1" 的层。对于其他层,客户端不能发送 GetFeatureInfo 请求。如果一个 WMS 不支持该请求而遇到了它,则应该应答一个适当格式的服务异常。 GetFeatureInfo
请求参数
请求参数 | 必须(M)/可选(O) | 描述 |
---|---|---|
version=version | M | 请求版本 |
request=GetFeatureInfo | M | 请求名称 |
map request part | M | 地图请求参数的部分拷贝,这些参数产生了需要查询其信息的地图 |
query_layers=layer_list | M | 用逗号分隔的需要查询的一个或多个层的列表 |
info_format=output_format | M | 要素信息的返回格式(MIME类型) |
feature_count=number | O | 需要返回其信息的要素个数(default=1) |
x=pixel_column | M | 用像素表达的要素的X坐标(以左上角坐标为0) |
y=pixel_row | M | 用像素表达的要素的Y坐标(以左上角坐标为0) |
exceptions=exception_format | O | wms 报告已成信息采用的格式 |
WMTS-WMS的变种:网络地图切片服务
WMTS 标准定义了一些操作,这些操作允许用户访问瓦片服务。 TMS是tile mp service的缩写,是一种瓦片地图服务,也称之为WMTS
(web map tile service)。与WMS不同的是它是将切片保存到了本地,第一次加载时会慢,因为它是根据请求实时将切片保存到了本地,再第二次加载同一位置的切片时速度就会变快,因为此时已经保存到本地,直接读取。采用了缓存技术能够缓解 WebGIS 服务器端数据处理的压力,提高交互响应速度,大幅改善在线地图应用客户端的用户体验。
- 缺点:不够灵活,一旦数据更新,就要重新生成一次切片。
- 优点:加载速度快。
数据更新频繁且地理范围大的情况下不建议使用。
WFS-提供增删改查矢量数据的网络要素服务
Web要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删除等事务操作,是对Web地图服务的进一步深入。 与WMS相比,简单来说,**WMS是基础,是显示地图的,WFS是高级一点的,在WMS的基础上可以实现对地图数据的增删改查等操作。 **
WCS-网络覆盖服务
WCS标准定义了一些操作,这些操作允许用户访问“Coverage”数据,如卫星影像、数字高程数据等,也就是栅格数据。 有矢量就有栅格,与WFS形成对比,WCS的C,就是栅格数据的意思。 WCS也有几个功能:
- GetCapabilities(获取服务的元信息)
- DescribeCoverage(获取Coverage的描述信息)
- GetCoverage(获取Coverage)
TMS/XYZ 服务
TMS、XYZ 也是用于提供地图切片的服务,不过他们并非 OGC 定义的标准,但它已经得到了广泛的应用和支持,并被许多地图供应商和开发者采用。
- XYZ:XYZ切片服务是一种简单的URL模式,用于请求地图切片。它采用
http://example.com/{z}/{x}/{y}.{format}
的URL模板,其中{z}表示缩放级别,{x}和{y}表示切片的行列号,{format}表示切片的格式(例如,png、jpg等)。XYZ切片服务,常用于一些开源地图库和地图平台,如Leaflet和OpenLayers。 **TMS**
(Tile Map Service):TMS与XYZ类似,也使用行列号和缩放级别来请求切片,只是 URL模板略有不同。TMS的URL模板为http://example.com/{z}/{x}/{y}.{format}
,与XYZ一样,只是TMS的行列号顺序相反。TMS也是一种非常常见的切片服务标准,在一些地图服务器和GIS软件中得到广泛支持。
3、GIS处理服务
遵循一种规范,可以**将繁重的处理任务交由服务器运行,然后根据规范,将处理结果返回给前端。**这在普通的web服务中是理所当然的事情,只不过加上GIS数据这个壳儿,事情就变得有点复杂了起来。
其实OGC组织是有这么一个规范的,叫WPS
——Web Process Service。
Web 处理服务 (WPS)
是用于发布地理空间过程、算法和计算的 OGC 服务。 WPS 服务可作为GIS服务器的扩展,为数据处理和地理空间分析提供执行操作。
Esri ArcGIS Enterprise中的Server和Portal都原生支持了WPS,并且有比WPS更强大的GP服务。
4、 总结
- GIS服务与互联网开发中的服务类似,只不过提供的是地图相关的服务。
- OGC定义了一系列GIS服务的标准,包括WMS/WTMS/WFS/WCS等等,各大GIS厂商也都基本支持了这些标准
- WebGIS框架如leaflet中的tileLayer/FeatureLayer等与OGC这些标准的服务不是一个概念,注意区分。