简介

OGC Web地图服务(WMS)规范定义了一个HTTP接口,用于从服务器请求地理参考的地图图像。GeoServer支持WMS 1.1.1(使用最多的WMS版本)以及WMS 1.3.0
GeoServer还支持样式化图层描述符(SLD)标准对WMS规范的某些扩展,以控制地图输出的样式。

WMS可以做什么

WMS提供了用于请求地理空间地图图像的标准接口。这样做的好处是WMS客户端可以从多个WMS服务器请求图像,然后将它们组合到一个用户视图中。该标准保证了这些图像都可以像现实中那样完全重叠。许多服务器和客户端支持WMS

功能

名称 描述
Exceptions 发生异常
GetCapabilities 检索有关服务的元数据,包括支持的操作和参数以及可用层的列表
GetMap 检索指定区域和内容的地图图像
GetFeatureInfo 检索地图上像素位置的基础数据,包括几何和属性值
DescribeLayer 指示WFS或WCS检索有关该图层的其他信息。
GetLegendGraphic 检索地图生成的图例

下面就详细介绍一个每个功能类型。

Exceptions

WMS可以报告异常的格式。支持的异常值为:

格式 表达式 描述
XML格式 EXCEPTIONS=application/vnd.ogc.se_xml Xml输出。(默认格式)
图形 EXCEPTIONS=application/vnd.ogc.se_inimage 生成图像(在geoserver的图层预览功能中发生异常会使用)
空白 EXCEPTIONS=application/vnd.ogc.se_blank 生成空白图像
局部图 EXCEPTIONS=application/vnd.gs.wms_partial 这是一个GeoServer供应商参数,仅适用于getMap请求。返回渲染过程引发异常时渲染的所有内容。可以与WMS配置限制一起使用,以返回部分图像,即使由于超过这些限制之一而被终止的请求也是如此。它也可以与timeout vendor参数一起使用。
JSON格式 EXCEPTIONS=application/json 简单的Json表示形式。
JSONP EXCEPTIONS=text/javascript 返回以下格式的JsonP:paddingOutput(…jsonp…)。请参阅WMS供应商参数以更改回调名称。请注意,默认情况下禁用此格式(请参阅影响WMS的全局变量)。

GetCapabilities

该操作请求有关由WMS服务器提供的操作,服务和数据的元数据。
GetCapabilities操作的参数为:

参数名 是否必须 描述
service 服务名称。值是WMS
version 服务版本。值是一个1.0.0,1.1.0,1.1.1,1.3.0。
request 操作名称。值是GetCapabilities。

GeoServerGetCapabilities操作提供以下特定于供应商的参数。它们在WMS供应商参数部分中有完整记录。

参数名 是否必须 描述
namespace 将响应限制为给定名称空间中的层
format 以某种格式请求功能文档
rootLayer 标记以启用/禁用标准“根”顶层图层元素。值是对还是错。如果为false,则仅当存在多个顶级层时才包括Root元素,如果只有一层,则它将是根层本身。指定后,将以相同的行为覆盖全局WMS设置或图层/组设置。

GetCapabilities请求的一个示例:

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

有被传递到WMS服务器,三个参数service=wmsversion=1.1.1request=GetCapabilities。该service参数告诉WMS服务器即将收到WMS请求。该version参数表示正在请求哪个版本的WMS。该request参数指定GetCapabilities操作。WMS标准要求请求始终包含这三个参数。GeoServer放宽了这些要求(如果省略则通过设置默认版本),但是对于标准合规性,应始终指定它们。

响应是功能XML文档,该文档是WMS服务的详细说明。它包含三个主要部分:

参数名 描述
Service 包含服务元数据,例如服务于服务器的组织的服务名称,关键字和联系信息。
Request 描述WMS服务提供的操作以及每个操作的参数和输出格式。如果需要,可以将GeoServer配置为禁用对某些WMS操作的支持。
Request 列出可用的坐标系和图层。在GeoServer中,图层以“名称空间:图层”的形式命名。每一层都提供服务元数据,例如标题,摘要和关键字。

GetMap

GetMap操作是获取到服务器生成的地图。他的请求参数可以控制在地图上显示的一个或多个图层和样式,地图范围的边界框,目标空间参考系统以及输出的宽度,高度和格式。

响应是地图图像或其他地图输出工件,具体取决于请求的格式。GeoServer提供了多种输出格式,以WMS输出格式描述。

GetMap操作的标准参数为:

参数名 是否必须 描述
service 服务名称。值是WMS。
version 服务版本。值可以是1.0.0,1.1.0,1.1.1,1.3.0。
request 操作名称。值是GetMap。
layers 要在地图上显示的图层。值是层名称的逗号分隔列表。
styles 渲染图层的样式。值是样式名称的逗号分隔列表,如果需要默认样式,则为空。列表中的样式名称可能为空,以使用默认的图层样式。
srs/crs 地图输出的空间参考系统。格式是EPSG:nnn。 crs是WMS 1.3.0中使用的参数。
bbox 地图范围的边界框。格式是 minx,miny,maxx,maxy以SRS 为单位。
width 地图输出的宽度(以像素为单位)。
height 地图输出的高度,以像素为单位。
format 地图输出的格式。有关支持的值,请参阅WMS输出格式。
transparent 地图背景是否应该透明。值是true或false。默认为false
bgcolor 地图图像的背景色。格式是RRGGBB。默认为FFFFFF(白色)。
exceptions 报告异常的格式。默认值为application/vnd.ogc.se_xml。
time 地图数据的时间值或范围。有关更多信息,请参见GeoServer WMS中的时间支持。
sld 引用StyledLayerDescriptor XML文件的URL,该URL 可以控制或增强地图图层和样式
sld_body URL编码的StyledLayerDescriptor XML文档,用于控制或增强地图图层和样式

下面的示例是在SRS:'EPGS:4326'中使用默认样式,将图层输出为PNGWMS请求:

http://localhost:8080/geoserver/wms?
request=GetMap
&service=WMS
&version=1.1.1
&layers=topp%3Astates
&styles=population
&srs=EPSG%3A4326
&bbox=-145.15104058007,21.731919794922,-57.154894212888,58.961058642578&
&width=780
&height=330
&format=image%2Fpng

使用GetMap XML文档的示例WMS请求为:

<?xml version="1.0" encoding="UTF-8"?>
<ogc:GetMap xmlns:ogc="http://www.opengis.net/ows"
            xmlns:gml="http://www.opengis.net/gml"
   version="1.1.1" service="WMS">
   <StyledLayerDescriptor version="1.0.0">
      <NamedLayer>
        <Name>topp:states</Name>
        <NamedStyle><Name>population</Name></NamedStyle>
      </NamedLayer>
   </StyledLayerDescriptor>
   <BoundingBox srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
      <gml:coord><gml:X>-130</gml:X><gml:Y>24</gml:Y></gml:coord>
      <gml:coord><gml:X>-55</gml:X><gml:Y>50</gml:Y></gml:coord>
   </BoundingBox>
   <Output>
      <Format>image/png</Format>
      <Size><Width>550</Width><Height>250</Height></Size>
   </Output>
</ogc:GetMap>

time参数允许按时间切片和空间图块过滤数据集以进行渲染。

GetFeatureInfo

GetFeatureInfo操作是请求地图上给定位置要素的空间和属性数据。它与WFS GetFeature操作类似,但是在输入和输出方面都不太灵活。由于GeoServer提供了WFS服务,因此建议尽可能不要使用GetFeatureInfo
GetFeatureInfo操作的一个优点是他的请求使用来自返回的WMS图像的(x,y)像素值。对于有时候获取不到地理参考坐标,这个操作还是很方便的。
GetFeatureInfo操作的标准参数是:

参数名 是否必须 描述
service 服务名称。值是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 功能信息响应的格式。有关值,请参见下文。
feature_count 要返回的最大特征数。默认值为1。
x / i 地图上查询点的X坐标,以像素为单位。左侧为0。 i是WMS 1.3.0中使用的参数键。
y / j 地图上查询点的Y坐标,以像素为单位。0是顶部。 j是WMS 1.3.0中使用的参数键。
exceptions 报告异常的格式。默认值为application/vnd.ogc.se_xml。

GeoServer支持多种GetFeatureInfo响应输出格式。默认的格式是服务器上定义的HTML格式。为了最大程度地控制和定制,客户端应使用GML3并对原始数据本身进行样式设置。支持的格式为:

格式 表达式 描述
文本 info_format=text/plain 简单文本输出。(默认格式)
GML 2 info_format=application/vnd.ogc.gml 仅适用于简单功能(请参阅复杂功能)
GML 3 info_format=application/vnd.ogc.gml/3.1.1 适用于简单功能和复杂功能(请参阅“ 复杂功能”)
HTML info_format=text/html 使用服务器上定义的HTML模板。有关如何对HTML输出进行模板化的信息,请参见GetFeatureInfo模板。
JSON格式 info_format=application/json 简单的Json表示形式。
JSONP info_format=text/javascript 返回JSONP形式:parseResponse(...json...)。请参阅WMS供应商参数以更改回调名称。请注意,默认情况下禁用此格式(请参阅影响WMS的全局变量)。

GeoServerGetFeatureInfo操作提供以下特定于供应商的参数。

参数名 是否必须 描述
buffer 查询点周围搜索半径的宽度。
cql_filter 过滤返回的数据,采用ECQL格式
filter 以OGC过滤器格式过滤返回的数据
propertyName 要返回的特征属性
exclude_nodata_result 设置为true时,当要素的查询像素值为nodata时,将返回NaN。

下面的示例是从topp:states图层以HTML格式请求要素信息:

http://localhost:8080/geoserver/wms?
request=GetFeatureInfo
&service=WMS
&version=1.1.1
&layers=topp%3Astates
&styles=
&srs=EPSG%3A4326
&format=image%2Fpng
&bbox=-145.151041%2C21.73192%2C-57.154894%2C58.961059
&width=780
&height=330
&query_layers=topp%3Astates
&info_format=text%2Fhtml
&feature_count=50
&x=353
&y=145
&exceptions=application%2Fvnd.ogc.se_xml

GeoJSON格式的特征信息的示例请求为:

http://localhost:8080/geoserver/wms?
&INFO_FORMAT=application/json
&REQUEST=GetFeatureInfo
&EXCEPTIONS=application/vnd.ogc.se_xml
&SERVICE=WMS
&VERSION=1.1.1
&WIDTH=970&HEIGHT=485&X=486&Y=165&BBOX=-180,-90,180,90
&LAYERS=COUNTRYPROFILES:grp_administrative_map
&QUERY_LAYERS=COUNTRYPROFILES:grp_administrative_map
&TYPENAME=COUNTRYPROFILES:grp_administrative_map

请求的结果:

{
"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
]
}

DescribeLayer

DescribeLayer操作主要是通过了解基于SLD-WMS客户端使用。为了制作SLD,需要知道数据的结构。WMSWFS都有执行此操作的操作,因此DescribeLayer操作仅将客户端路由到适当的服务。
DescribeLayer操作的标准参数是:

参数名 是否必须 描述
service 服务名称。值是WMS。
version 服务版本。值是1.1.1。
request 操作名称。值是DescribeLayer。
layers 同GetMap
exceptions 报告异常的格式。默认值为application/vnd.ogc.se_xml。

GeoServer支持多种DescribeLayer响应输出格式。最常用的格式是服务器样式的HTML模板。支持的格式为:

格式 表达式 描述
文本 output_format=text/xml 与默认值相同。
GML 2 output_format=application/vnd.ogc.wms_xml 默认格式。
JSON格式 output_format=application/json 简单的Json表示形式。
JSONP output_format=text/javascript 返回以下格式的JsonP:paddingOutput(…jsonp…)。请参阅WMS供应商参数以更改回调名称。请注意,默认情况下禁用此格式(请参阅影响WMS的全局变量)。

对图层组上的JSON格式的特征描述的示例请求为:

http://localhost:8080/geoserver/wms?service=WMS
&version=1.1.1
&request=DescribeLayer
&layers=sf:roads,topp:tasmania_roads,nurc:mosaic
&outputFormat=application/json

请求结果:

{
  version: "1.1.1",
  layerDescriptions: [
    {
        layerName: "sf:roads",
        owsURL: "http://localhost:8080/geoserver/wfs/WfsDispatcher?",
        owsType: "WFS",
        typeName: "sf:roads"
    },
    {
        layerName: "topp:tasmania_roads",
        owsURL: "http://localhost:8080/geoserver/wfs/WfsDispatcher?",
        owsType: "WFS",
        typeName: "topp:tasmania_roads"
    },
    {
        layerName: "nurc:mosaic",
        owsURL: "http://localhost:8080/geoserver/wcs?",
        owsType: "WCS",
        typeName: "nurc:mosaic"
    }
  ]

GetLegendGraphic

可以查看这篇文章 https://docs.geoserver.org/stable/en/user/services/wms/get_legend_graphic/index.html#get-legend-graphic