第7章 OGC Web Map Service
GeoServer各服务完全按照OGC的标准实现,或者简单的说OGC标准就是GeoServer的API文档,掌握OGC服务标准对于深入学习和使用GeoServer起着非常重要的作用。
本章将简单介绍下OGC的WMS服务标准,更详细的介绍可以参考OGC官方文档(http://www.opengeospatial.org/standards/wms)。
7.1 WMS版本差异
OGC WMS有两个非常重要的版本,1.1.1和1.3.0,这两个版本间有一些细微差别:
-
在1.1.1中,使用EPSG命名空间指定的地理坐标系统按照经度/纬度(x/y)的轴顺序定义。在1.3.0中,轴顺序相反,是纬度/经度(y/x)。
例如, WGS84 SRS (EPSG:4326)的WMS 1.1.1请求如下:
geoserver/wms?VERSION=1.1.1&REQUEST=GetMap&SRS=epsg:4326&BBOX=-180,-90,180,90&…而在1.3.0中则是:
geoserver/wms?VERSION=1.3.0&REQUEST=GetMap&CRS=epsg:4326&BBOX=-90,-180,90,180&…
-
在GetMap操作中,1.1.1版本的坐标参数为srs,而1.3.0中为crs。但在GeoServer中,无论哪个版本,GeoServer都支持这两个参数名。
-
在GetFeatureInfo操作中,1.3.0中的x和y参数称为i和j。但在GeoServer中,无论哪个版本,GeoServer都支持这两个参数名,除非在遵循CITE的模式下。
OGC Web地图服务实现规范(版本1.1.1),请参考官方文档:
http://portal.opengeospatial.org/files/?artifact_id=1081&version=1&format=pdf
OGC Web地图服务实现规范(版本1.3.0),请参考官方文档:
http://portal.opengeospatial.org/files/?artifact_id=14416
7.2 WMS 操作
WMS请求中包含以下操作(对于从事于web开发的人员来说,把它称作接口可能更好理解):
WMS请求可以执行以下操作:
操作 | 描述 |
---|---|
Exceptions | 发生异常时调用。 |
GetCapabitities | 返回服务级元数据,它是对服务信息内容和请求参数的一种描述。 |
GetMap | 指定地理空间参考和范围,返回一个静态地图图片。 |
GetFeatureInfo | 返回显示在地图上某像素位置的要素的信息。 |
DescribeLayer | 返回WFS或WCS相关图层的其他信息。 |
GetLegendGraphic | 返回地图的图例信息。 |
7.2.1 GetCapabilities
GetCapabilities操作获取WMS的功能文档,包括支持的操作,地图服务,数据等元数据信息。
GetCapabilities的请求参数:
参数 | 是否必须 | 描述 |
---|---|---|
service | 是 | 服务名称,对于WMS服务,当然是“WMS”了。 |
version | 是 | 服务版本,可以是1.0.0, 1.1.0, 1.1.1, 1.3.0。 |
request | 是 | 操作名称,这里是GetCapabilities。 |
namespace | 否 | 返回指定命名空间的图层。 |
format | 否 | 指定返回文档格式。 |
下面是一个GetCapabilities请求示例:
http://localhost:8080/geoserver/wms?service=wms&version=1.1.1&request=GetCapabilities
在GeoServer中,可以设置默认版本,从而可以在GetCapabilities中不指定version。但是就WMS标准而言,应该指定这个参数。
WMS默认以XML格式返回一个功能文档,它详细描述了WMS服务,包括三个主要部分:
Service | 包含服务元数据,如服务名称、关键字和服务提供方的联系信息(参见3.1.1)。 |
---|---|
Request | 描述WMS服务提供的操作以及每个操作的输入参数和输出格式(参见3.1.12)。如果需要,GeoServer可以禁用对某些WMS操作的支持。 |
Layer | 列出可用的坐标系统和图层。在GeoServer中,图层以“namespace:layer”的形式命名。每个图层都提供元数据信息,如标题、摘要和关键字等(参见3.1.2)。 |
GeoServer的WMS功能文档可通过欢迎页面中的服务能力获取,请参见1.2.8节。
7.2.2 GetMap
GetMap操作请求服务器渲染地图并返回一张静态图片。WMS服务的GetMap操作非常灵活,不仅可以指定地图的范围,生成图片的大小,图片格式,还可以指定需要绘制的一个或多个图层及其样式,目标空间参考系统等。
GetCapabilities的请求参数:
参数 | 是否必须 | 描述 |
---|---|---|
service | 是 | 服务名称,对于WMS服务,当然是“WMS”了。 |
version | 是 | 服务版本,可以是1.0.0, 1.1.0, 1.1.1, 1.3.0。 |
request | 是 | 操作名称,这里是GetMap。 |
layers | 是 | 需要在地图上显示的图层。可以是单个图层名或以逗号分隔的图层名称列表。 |
styles | 是 | 图层的样式。以逗号分隔的样式名称列表,每个样式对应一个图层。样式名称在列表中可以为空,表示使用默认图层样式(在图层发布是指定的样式,参见2.3.2)。 |
srs或crs | 是 | 地图绘制时采用的空间参照系,值是EPSG代码,格式如EPSG:nnn。crs在WMS 1.3.0中使用。 |
bbox | 是 | 输出地图的范围。由minx,miny,maxx,maxy四个值组成,单位是SRS对应的单位。 |
width | 是 | 输出地图的宽度,以像素为单位。 |
height | 是 | 地图输出的高度,以像素为单位。 |
format | 是 | 地图输出的格式,例如image/png。 |
transparent | 否 | 地图背景是否透明,默认是false。 |
bgcolor | 否 | 地图的背景颜色,其值格式RRGGBB。默认为FFFFFF(白色)。 |
exceptions | 否 | 当发生异常时,输出异常的格式。默认值是application/vnd.ogc.se_xml。 |
time | 否 | 地图数据的时间值或范围,例如time=2018-12-16T00:00:00.0Z/2018-12-16T10:00:00.0Z。只有在发布图层时启用了时间维度(参见2.3.3),该值才会生效。 |
elevation | 否 | 高程。只有在发布图层时启用了高程维度(参见2.3.3),该值才会生效。 |
cql_filter | 否 | 过滤器参数。 |
angle | 否 | 输出图片旋转角度。 |
sld | 否 | 引用样式描述文件的URL,用于控制或增强地图图层的样式。 |
sld_body | 否 | 样式描述,用于控制或增强地图图层的样式。 |
下面是一个GetMap请求示例:
它将返回一个大小为780*330的png图片。
7.2.3 GetFeatureInfo
GetFeatureInfo操作请求地图上与某一位置相交的要素的空间和属性数据。它类似于WFS的GetFeature操作,但在输入和输出方面都远没有WFS
GetFeature灵活。建议使用WFS服务代替GetFeatureInfo。
GetFeatureInfo的请求参数:
参数 | 是否必须 | 描述 |
---|---|---|
service | 是 | 服务名称,对于WMS服务,当然是“WMS”了。 |
version | 是 | 服务版本,可以是1.0.0, 1.1.0, 1.1.1, 1.3.0。 |
request | 是 | 操作名称,这里是GetFeatureInfo。 |
layers | 是 | 同GetMap。 |
styles | 是 | 同GetMap。 |
srs或crs | 是 | 同GetMap。 |
bbox | 是 | 同GetMap。 |
width | 是 | 同GetMap。 |
height | 是 | 同GetMap。 |
query_layers | 是 | 用于查询的图层列表,以逗号分隔。 |
info_format | 否 | 返回的要素信息格式。如text,html,gml,json等。 |
feature_count | 否 | 返回的最大要素个数,默认为1。 |
x或i | 是 | 当前地图上查询点的x坐标,以像素为单位。i在WMS 1.3.0中使用。 |
y或j | 是 | 当前地图上查询点的y坐标,以像素为单位。j在WMS 1.3.0中使用。 |
exceptions | 否 | 当发生异常时,输出异常的格式。默认值是application/vnd.ogc.se_xml。 |
注意:如果要对图层组发送GetFeatureInfo请求,则必须将该图层组中的所有图层设置为“可查询”才能获得结果(请参阅2.3.2中的WMS
Settings)。
下面是一个返回格式为GeoJson格式的GetFeatureInfo请求示例:
返回结果如下所示:
{
“type”: “FeatureCollection”,
“features”: [{
“type”: “Feature”,
“id”: “dt_gaul_geom.fid-138e3070879”,
“geometry”: {
“type”: “MultiPolygon”,
“coordinates”: [[[[XXXXXXXXXX,
XXXXXXXXXX],
…[XXXXXXXXXX,
XXXXXXXXXX]]]]
},
“geometry_name”: “at_geom”,
“properties”: {
“bk_gaul”: X,
“at_admlevel”: 0,
“at_iso3”: “XXX”,
“ia_name”: “XXXX”,
“at_gaul_l0”: X,
“bbox”: [XXXX,
XXXX,
XXXX,
XXXX]
}
}],
“crs”: {
“type”: “EPSG”,
“properties”: {
“code”: “4326”
}
},
“bbox”: [XXXX,
XXXX,
XXXX,
XXXX]
}
7.2.4 DescribeLayer
只有知道图层数据的结构,才能制作合适的样式。WMS和WFS针对不同的数据类型提供了获取数据结构的操作,而DescribeLayer只是指引用户应该使用哪个服务。
DescribeLayer的请求参数:
参数 | 是否必须 | 描述 |
---|---|---|
service | 是 | 服务名称,对于WMS服务,当然是“WMS”了。 |
version | 是 | 服务版本,可以是1.1.1。 |
request | 是 | 操作名称,这里是DescribeLayer。 |
layers | 是 | 同GetMap。 |
outputFormat | 否 | 输出格式,默认为xml。 |
exceptions | 否 | 当发生异常时,输出异常的格式。默认值是application/vnd.ogc.se_xml。 |
下面是一个返回格式为GeoJson格式的DescribeLayer请求示例:
返回结果如下所示:
{
version: “1.1.1”,
layerDescriptions: [
{
layerName: “sf:roads”,
owsURL: “http://localhost:8080/geoserver/wfs/WfsDispatcher?”,
owsType: “WFS”,
typeName: “sf:roads”
},
{
layerName: “nurc:mosaic”,
owsURL: “http://localhost:8080/geoserver/wcs?”,
owsType: “WCS”,
typeName: “nurc:mosaic”
}
]
7.2.5 GetLegendGraphic
GetLegendGraphic操作根据图层样式或输入的样式参数绘制图例,并生成图片返回给客户端。
GetLegendGraphic的请求参数:
参数 | 是否必须 | 描述 |
---|---|---|
request | 是 | 操作名称,这里是GetLegendGraphic。 |
layer | 是 | 要生成图例的图层,不支持多个。 |
style | 否 | 要生成图例的图层样式。如果没有指定,则选择默认样式。样式可以是可用于该图层的任何有效样式。 |
featuretype | 否 | 要生成图例的图层的要素类型。如果图层只有一个要素类型,则不需要该参数。 |
rule | 否 | 如果指定,则生成图例时只绘制指定样式规则;否则,绘制所有规则。 |
scale | 否 | 该参数对应在rule中定义的样式显示比例尺的分母,在没有指定rule的情况下,设置该参数,获取只在该比例尺下显示的样式图例。 |
sld | 否 | 引用样式描述文件的URL,用于控制或增强地图图层的样式。 |
sld_body | 否 | 样式描述,用于控制或增强地图图层的样式。 |
format | 是 | 用于返回图例的文件格式的MIME类型。 |
width | 否 | 指定返回图片中每个样式或规则的宽度(不包含图例的标题),以像素为单位。 |
height | 否 | 指定返回图片中每个样式或规则的高度,以像素为单位。 |
exceptions | 否 | 当发生异常时,输出异常的格式。默认值是application/vnd.ogc.se_xml。 |
language | 否 | 允许为样式标题和规则标题设置语言;如果不能以指定的语言提供,将使用默认标题。具体使用方法可参考2.7.8 |
下面是一个返回格式为png图片的GetLegendGraphic请求示例: