网络地图服务(WMS)

我们如何在网上发布地图?

如果我们使用HTTP请求,所有这些都可能是有效的:

让我们就URL格式达成一致

如果我们同意如何对URL进行编码,下面的httpget请求将从西班牙巴斯克地区的一个省获得地图

Link

 http://b5m.gipuzkoa.net/ogc/wms/gipuzkoa_wms?
service=wms&
version=1.3.0&
request=getmap&
layers=udal_barrutiak_limites_municipales&
styles=&
crs=epsg:23030&
bbox=530000,4740000,610000,4820000&
width=600&
height=600&
format=image/png
http://b5m.gipuzkoa.net/ogc/wms/gipuzkoa_wms?
service=wms&
version=1.3.0&
request=getmap&
layers=udal_barrutiak_limites_municipales&
styles=&
crs=epsg:23030&
bbox=530000,4740000,610000,4820000&
width=600&
height=600&
format=image/png

WMS

  • OGC网络地图服务接口标准(WMS)定义了一组接口(例如,如何编码URL的规则)用于在互联网上请求地图图像。

  • WMS使客户机很容易根据需要请求更改参数(如尺寸和坐标参考系)的图像。

WMS服务器

  • 提供有关服务可以生成哪些地图的信息

  • 生成地图

  • 回答有关地图内容的查询

收益

  • WMS客户端可以从多个WMS服务器请求图像,然后将它们组合成一个视图供用户使用。

  • 该标准保证这些图像可以使用一个通用的地理空间坐标参考系相互叠加。

  • 数百台服务器和客户机支持WMS。

与其他OGC标准的关系

  • OGC Web地图图块服务接口标准(WMTS):WMTS标准更适合只需要静态映射的高度可伸缩系统(许多并发请求)。它用可缓存的静态地图块来补充WMS标准。WMS服务器可以用作WMTS服务的数据源或呈现引擎。

  • OGC Web功能服务(WFS):WFS标准更适合于空间数据的扩展查询功能。它提供对地理要素数据的编程访问。WMS和WFS经常一起使用。同时发布WMS和WFS的组织通常使用相同的数据源。

WMS运行概述

WMS操作

  • GetCapabilities

  • GetMap

  • GetFeatureInfo (可选)

  • DescribeLayer (可选)

  • GetLegendGraphic (可选)

GetCapabilities

  • 返回有关WMS服务器的元数据,包括如何生成WMS请求以及可以使用哪些参数。

  • 元数据包括支持的图像格式和层的可用性。

  • 每个层的元数据包括:边界框、坐标系、数据的URI以及图层是否不透明。

GetCapabilities演示

This is a link to a GetCapabilities request.

http://metaspatial.net/cgi-bin/ogc-wms.xml?
SERVICE=WMS&
VERSION=1.3
REQUEST=GetCapabilities&

GetCapabilities参数

有三个参数(和值)被传递到WMS服务器, SERVICE=WMSVERSION=1.3REQUEST=GetCapabilities .

  • SERVICE 参数告诉服务器WMS请求即将到来。

  • VERSION 参数告诉服务器正在请求哪个版本的WMS。

  • REQUEST 参数告诉服务器请求的操作是 GetCapabilities 操作。

GetCapabilities参数和接受值

Parameter

Required

Description

SERVICE

是的

服务名称。值是 WMS

VERSION

是的

服务版本。价值是 1.0.01.1.01.1.11.3

REQUEST

是的

操作名称。值是 GetCapabilities

GetCapabilities响应

响应是一个功能XML文档,其中包含WMS服务的详细描述。它包含三个主要部分:

Service

包含服务元数据,如服务名称、关键字和操作服务器的组织的联系信息。

Request

描述WMS服务提供的操作以及每个操作的参数和输出格式。

Layer

列出可用的坐标系和图层。在某些服务器(如Geoserver)中,层的命名形式为“名称空间:层". 每层提供服务元数据,如标题、摘要和关键字。

GetCapabilities层样式部分

GetCapabilites响应包含 部分,其中详细说明了该层可用的样式。在下面的示例中,可用的样式是 违约 .

获取功能-层

<Layer queryable="0" opaque="0" cascaded="0">
  <Name>nationalparks</Name>
  <Title>National Parks</Title>
  <EX_GeographicBoundingBox>
    <westBoundLongitude>-4.43064</westBoundLongitude>
    <eastBoundLongitude>1.99728</eastBoundLongitude>
    <southBoundLatitude>50.3532</southBoundLatitude>
    <northBoundLatitude>55.5917</northBoundLatitude>
  </EX_GeographicBoundingBox>
  <BoundingBox CRS="EPSG:27700"
         minx="246828" miny="56378.4" maxx="652374" maxy="633117"/>
  <Style>
   ...
  </Style>
</Layer>

GetCapabilities层样式部分

<Layer queryable="0" opaque="0" cascaded="0">
  ...
  <Style>
    <Name>default</Name>
    <Title>default</Title>
    <LegendURL width="110" height="22">
      <Format>image/png</Format>
      <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
         xlink:type="simple"
         xlink:href="..."/>
    </LegendURL>
  </Style>
</Layer>

GetMap

  • 返回地图图像。

  • GetMap请求中指定的参数包括:地图的宽度和高度、坐标参考系、渲染样式和图像格式。

  • 指定参数值所需的信息,例如 layersstylesSpatial Reference Systems (SRS) 可从能力文件中获得。

GetMap-请求示例

Link to a GetMap request.

http://metaspatial.net/cgi-bin/ogc-wms.xml?
VERSION=1.3.0&
REQUEST=GetMap&
SERVICE=WMS&
LAYERS=DTM,Overview,Raster_250K,Topography,nationalparks,Infrastructure,Places&
STYLES=,,,,,,&
CRS=EPSG:27700&
BBOX=424735.97883597884,96026.98412698413,467064.02116402116,127773.01587301587&
WIDTH=400&
HEIGHT=300&
FORMAT=image/png&
BGCOLOR=0xffffff&
TRANSPARENT=TRUE&
EXCEPTIONS=XML

来自GetMap请求的示例图像

../../_images/getmap-demo.png

GetMap-请求

...
LAYERS=DTM,Overview,Raster_250K,Topography,nationalparks,Infrastructure,Places
...
CRS=EPSG:27700&
BBOX=424735.97883597884,96026.984126984...
WIDTH=400&
HEIGHT=300&
FORMAT=image/png&
BGCOLOR=0xffffff&
TRANSPARENT=TRUE&
EXCEPTIONS=XML
  • 该服务提供七个地图层:DTM、Overview等。

  • 坐标参考系EPSG:27700是国家电网参考系统。

  • 返回的图像是PNG透明格式,宽度400像素,高度300像素,背景颜色为白色(十六进制代码=0xffffff)。

GetMap-请求-示例2

没有概述层的GetMap <http://metaspatial.net/cgi-bin/ogc-wms.xml?VERSION=1.3.0&REQUEST=GetMap&SERVICE=WMS&LAYERS=DTM,Raster_250K,Topography,nationalparks,Infrastructure,Places&CRS=EPSG:27700&BBOX=424735.97883597884,96026.98412698413,467064.02116402116,127773.01587301587&WIDTH=400&HEIGHT=300&FORMAT=image/png> _。

../../_images/metaspatial.net_GetMap_opaque.png
LAYERS=DTM,Raster_250K,Topography,nationalparks,Infrastructure,Places

GetMap透明度/透明度

地图图像可以覆盖其他服务器的地图。在这些情况下,以支持透明度(如alpha通道)的格式请求顶层图像可能会有帮助。然后我们可以看到下面的地图图像。

../../_images/GetMap_opaque.png

GetMap比例限制

重要的是要了解每个层在未显示时都可能有缩放限制。例如,同时显示“Overview”和“Raster k”是没有意义的,因为它们包含相同的数据,但具有不同的泛化级别。因此,它们具有互斥的比例限制,因此它们永远不会返回到一个图像中。缩放限制由服务器设置,不必由客户端配置。

<Name>Raster_250K</Name>
<MaxScaleDenominator>60000</MaxScaleDenominator>
<MinScaleDenominator>250000</MinScaleDenominator>

<Name>Overview</Name>
<MinScaleDenominator>250000</MinScaleDenominator>

GetMap-缩放

  • 客户端可以通过计算BBOX(边界框)参数的新值来“放大”和“缩小”地图。这同样适用于所有地图导航功能,如平移或选择一个全新的区域。

  • 需要注意的是,服务器只向客户机返回图像,而不返回有关大小、坐标系、比例等的其他信息

挤压的地图

宽高比不是1:1时发生?例如 WIDTH=200&HEIGHT=300

you get squashed Map

../../_images/GetMap_squashed.png

重投影贴图

更改参数: CRS 原稿是左边的=EPSG:22770和在右侧CRS上=爱普生:4326。

../../_images/GetMap_EPSG_27700_4326.png

获取参数

Parameter

Required

Description

service

是的

服务名称。值是 WMS

version

是的

服务版本。价值是 1.0.01.1.01.1.11.3

request

是的

操作名称。值是 GetMap

layers

是的

要在地图上显示的图层。值是以逗号分隔的层名称列表。

styles

是的

要在其中渲染层的样式。值是以逗号分隔的样式名列表,如果需要默认样式,则为空。样式名在列表中可能为空,以使用默认层样式。

srs or crs

是的

地图输出的空间参考系统。值的形式为 EPSG:nnn . crs 是WMS 1.3.0中使用的参数键。

bbox

是的

地图范围的边界框。值是 minx,miny,maxx,maxy 以SRS为单位。

width

是的

地图输出的宽度,以像素为单位。

height

是的

地图输出的高度,以像素为单位。

format

是的

映射输出的格式。

transparent

地图背景是否应透明。值为 truefalse . 默认是 false

bgcolor

地图图像的背景色。值的形式为 RRGGBB . 默认是 FFFFFF (白色)。

exceptions

报告异常的格式。默认值为 application/vnd.ogc.se_xml

time

地图数据的时间值或范围。

sld

引用StyledLayerDescriptor XML文件的URL,该文件控制或增强地图图层和样式设置

sld_body

URL编码的StyledLayerDescriptor XML文档,用于控制或增强地图图层和样式设置

GetFeatureInfo

  • 返回与地图图像坐标相关的信息(例如数据)。支持此操作的层被标记为“可查询”。

  • 它类似于wfsgetfeature操作,但是在输入和输出方面都不太灵活。

  • 唯一的优势 GetFeatureInfo 请求使用来自返回的WMS图像的(x,y)像素值。

  • 对于不能执行真正地理参考的天真客户机来说,这更容易使用。

GetFeatureInfo

在查询对象之前,我们需要查看地图。我们使用GetMap请求来获取地图图像:

http://metaspatial.net/cgi-bin/ogc-wms.xml?
VERSION=1.3.0&
REQUEST=GetMap&
SERVICE=WMS&
LAYERS=Overview,Raster_250K,nationalparks,Topography,Infrastructure,osm_points&
WIDTH=400&
HEIGHT=300&
CRS=EPSG:27700&
BBOX=427966.6666666667,106800,431833.3333333333,109700&
FORMAT=image/png&
EXCEPTIONS=XML

结果如下:

../../_images/new-forest_national-park_map.png

在下一步中,用户必须单击地图。假设用户点击了位置:::

X=231
Y=280

然后客户端执行此请求

http://metaspatial.net/cgi-bin/ogc-wms.xml?
VERSION=1.3.0&
REQUEST=GetFeatureInfo&
SERVICE=WMS&
LAYERS=osm_points&
QUERY_LAYERS=osm_points&
WIDTH=400&
HEIGHT=300&
CRS=EPSG:27700&
BBOX=427966.6666666667,106800,431833.3333333333,109700&
INFO_FORMAT=text/html&
EXCEPTIONS=XML&
X=231& Y=280

链接到 GetFeatureInfo 请求。

GetFeatureInfo-HTML中的响应

如果请求的功能在服务器中找到,它将返回它们。在本例中,服务器找到一个名为“the Crown Stirup”的酒吧和一个名为“Ye Old Crown and Stirup”的公共汽车站,并在HTML文件中返回它们。

../../_images/GetFeatureInfo_result.png

GetFeatureInfo-GML中的响应

<osm_points_feature>
      <gml:boundedBy>
        <gml:Box srsName="EPSG:27700">
          <gml:coordinates>
          430172.215950,107071.994504 430172.215950,107071.994504
          </gml:coordinates>
        </gml:Box>
      </gml:boundedBy>
      <osm_id>503420358</osm_id>
      <timestamp>2009-09-20T16:44:15Z</timestamp>
      <name>Ye Old Crown and Stirrup</name>
      <type>bus_stop</type>
    </osm_points_feature>
  </osm_points_layer>

标记层,告诉客户端GetFeatureInfo可用

在GetCapabilities文档中,层应该具有 queryable="1"

<Layer queryable="1" opaque="0" cascaded="0">
  <Name>osm_points</Name>
  <Title>OpenStreetMap point objects</Title>
  <CRS>EPSG:4326</CRS>

GetFeatureInfo-参数

Parameter

Required

Description

SERVICE

是的

服务名称。值是 WMS

VERSION

是的

服务版本。价值是 1.0.01.1.01.1.11.3

REQUEST

是的

操作名称。值是 GetFeatureInfo

QUERY_LAYERS

是的

要查询的层的逗号分隔列表`

INFO_FORMAT

功能信息响应的格式(MIME类型)。

FEATURE_COUNT

要返回的最大功能数。默认值为1。

i

是的

地图上的像素列点。0是左侧。 x 是WMS 1.1.0中使用的参数键。

j

是的

地图上的像素行。0是顶部。 y 是WMS 1.1.0中使用的参数键。

EXCEPTIONS

报告异常的格式。默认值为 application/vnd.ogc.se_xml .

获取功能信息- INFO_FORMAT 参数

Format

Syntax

Notes

TEXT

info_format=文本/plain

简单文本输出。(默认格式)

GML 2

info_format=应用程序/vnd.ogc.gm公司

仅适用于简单功能

GML 3号

info_format=应用程序/vnd.ogc.gml/3号.1.1条

适用于简单和复杂的功能

HTML

info_format=text/html

使用在服务器上定义的HTML模板。

JSON

info_format=application/json格式

简单的JSON表示。

GetLegendGraphic

以图像的形式返回地图图像的图例,为地图元素提供可视指南。

通过GetLegendGraphic获得传奇

链接到 GetLegend 请求。

http://metaspatial.net/cgi-bin/ogc-wms.xml?
version=1.3.0&
service=WMS&
request=GetLegendGraphic&
sld_version=1.1.0&
layer=nationalparks&
format=image/png&
STYLE=default
../../_images/national-parks_legend.png

DescribeLayer

返回有关请求层的附加信息。

错误的请求

  • 如果请求错误,服务器将返回错误消息。

  • 请求指定客户端希望如何接收请求。例如:

EXCEPTIONS=XML

错误信息

如果客户机通过制定错误的请求而导致错误,服务器将返回错误消息。例如,如果请求一个不存在的层,服务器将返回以下信息:

<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
  <ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/ogc
  http://schemas.opengis.net//wms/1.3.0/exceptions_1_3_0.xsd">
  <ServiceException code="LayerNotDefined">
    msWMSLoadGetMapParams(): WMS server error.
    Invalid layer(s) given in the LAYERS parameter.
    A layer might be disabled for this request.
    Check wms/ows_enable_request settings.
  </ServiceException>
</ServiceExceptionReport>

INIMAGE错误消息

前一条消息的一个问题是客户端无法在图像显示窗口中显示该消息。为了防止这种情况发生,我们可以将错误消息(EXCEPTIONS参数)的格式更改为INIMAGE。在这种情况下,我们可以看到打印到图像中的错误消息:

INIMAGE错误消息

../../_images/ogc-wms_in-image_error.png

例外情况

当来自客户端的请求不正确时,WMS服务器将报告异常。

Format

Syntax

Notes

XML

application/vnd.ogc.se_xml

错误用XML描述。

PNG

application/vnd.ogc.se_inimage

错误将作为图像返回。

空白

application/vnd.ogc.se_blank

返回一个空白图像。

JSON

application/json

错误报告为简单的JSON表示。