目录
一、WMS规范简单介绍
二、使用GetCapabilities操作请求服务元数据
三、使用GetMap操作请求地图
四、使用GetFeatureInfo操作请求地图要素信息
一、WMS规范简单介绍
为了保证Web服务的跨平台性,那么请求与响应的语法需要保持一致,而且应该有一个专门的开放规范文档加以说明。
当软件开发人员创建支持该Web服务的服务器或客户端程序时,为了确保Web服务能够正确工作,他们将严格遵循规范文档。
开放地理空间联盟(OGC)的Web地图服务(WMS)规范是一种在互联网上提供和使用动态地图时遵守的国际规范。到目前为止,已发布了4个版本的WMS规范。这些版本是v1.0.0、v1.1.0、v1.1.1和v1.3.0(最新版本)。
由于规范需要描述Web服务的每个方法及其参数,因此规范文档一般都会比较长而且比较复杂。不过幸运的是,我们并不需要直接使用规范,通常是调用那些用户友好的服务器与客户端程序,它们屏蔽了Web服务的复杂性。例如,假设需要使用GeoServer创建一个WMS服务并在QGIS的地图中显示该服务,那么并不需要我们去参考WMS规范,而是直接使用这些程序提供的封装好的功能。不过可以确定的是,GeoServer和QGIS的开发人员编写自己的源代码时必须详细阅读WMS规范。
WMS服务主要支持以下操作:
- GetCapabilities)
- GetMap)
- GetFeatureInfo,可选)
- GetLegendGraphic,可选)
- GetStyles,可选)
WMS服务,必须至少支持GetCapabilities和GetMap操作,如果作为可查询WMS,则需要支持可选的GetFeatureInfo操作。
二、使用GetCapabilities操作请求服务元数据
GetCapabilities操作返回服务的元数据。根据该服务的元数据来确定该服务支持哪些其他操作。
例如在安装了GeoServer的计算机上,通过在浏览器地址栏中输入如下地址:
http://localhost:8084/geoserver/wms?service=WMS&request=GetCapabilities
那么该地址就使用GetCapabilities操作访问本地计算机GeoServer的WMS服务的元数据。
其中:
- http://localhost:8084/geoserver/wms —— 是请求的路径
- request=GetCapablilities —— 表示请求的是GetCapabilities操作
- service=WMS —— 表示服务是WMS
上面的地址返回或打开一个XML格式的文件,内容如下(为了节省篇幅,删减了一些重复与不重要的内容):
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<WMS_Capabilities xmlns="http://www.opengis.net/wms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3.0" updateSequence="152" xsi:schemaLocation="http://www.opengis.net/wms http://localhost:8084/geoserver/schemas/wms/1.3.0/capabilities_1_3_0.xsd">
<Service>
<Name>WMS</Name>
<Title>GeoServer Web Map Service</Title>
<Abstract>
A compliant implementation of WMS plus most of the SLD extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS
</Abstract>
<KeywordList>
<Keyword>WFS</Keyword>
<Keyword>WMS</Keyword>
<Keyword>GEOSERVER</Keyword>
</KeywordList>
<OnlineResource xlink:type="simple" xlink:href="http://geoserver.org"/>
<ContactInformation>
<ContactPersonPrimary>
<ContactPerson>Claudius Ptolomaeus</ContactPerson>
<ContactOrganization>The Ancient Geographers</ContactOrganization>
</ContactPersonPrimary>
<ContactPosition>Chief Geographer</ContactPosition>
<ContactAddress>
<AddressType>Work</AddressType>
<Address/>
<City>Alexandria</City>
<StateOrProvince/>
<PostCode/>
<Country>Egypt</Country>
</ContactAddress>
<ContactVoiceTelephone/>
<ContactFacsimileTelephone/>
<ContactElectronicMailAddress>claudius.ptolomaeus@gmail.com</ContactElectronicMailAddress>
</ContactInformation>
<Fees>NONE</Fees>
<AccessConstraints>NONE</AccessConstraints>
</Service>
<Capability>
<Request>
<GetCapabilities>
<Format>text/xml</Format>
<DCPType>
<HTTP>
<Get>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8084/geoserver/ows?SERVICE=WMS&"/>
</Get>
<Post>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8084/geoserver/ows?SERVICE=WMS&"/>
</Post>
</HTTP>
</DCPType>
</GetCapabilities>
<GetMap>
<Format>image/png</Format>
<Format>application/atom+xml</Format>
<Format>application/json;type=utfgrid</Format>
<Format>application/pdf</Format>
<Format>application/rss+xml</Format>
<Format>application/vnd.google-earth.kml+xml</Format>
<Format>
application/vnd.google-earth.kml+xml;mode=networklink
</Format>
<Format>application/vnd.google-earth.kmz</Format>
<Format>image/geotiff</Format>
<Format>image/geotiff8</Format>
<Format>image/gif</Format>
<Format>image/jpeg</Format>
<Format>image/png; mode=8bit</Format>
<Format>image/svg+xml</Format>
<Format>image/tiff</Format>
<Format>image/tiff8</Format>
<Format>image/vnd.jpeg-png</Format>
<Format>text/html; subtype=openlayers</Format>
<Format>text/html; subtype=openlayers2</Format>
<Format>text/html; subtype=openlayers3</Format>
<DCPType>
<HTTP>
<Get>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8084/geoserver/ows?SERVICE=WMS&"/>
</Get>
</HTTP>
</DCPType>
</GetMap>
<GetFeatureInfo>
<Format>text/plain</Format>
<Format>application/vnd.ogc.gml</Format>
<Format>text/xml</Format>
<Format>application/vnd.ogc.gml/3.1.1</Format>
<Format>text/xml; subtype=gml/3.1.1</Format>
<Format>text/html</Format>
<Format>application/json</Format>
<DCPType>
<HTTP>
<Get>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8084/geoserver/ows?SERVICE=WMS&"/>
</Get>
</HTTP>
</DCPType>
</GetFeatureInfo>
</Request>
<Exception>
<Format>XML</Format>
<Format>INIMAGE</Format>
<Format>BLANK</Format>
<Format>JSON</Format>
</Exception>
<Layer>
<Title>GeoServer Web Map Service</Title>
<Abstract>
A compliant implementation of WMS plus most of the SLD extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS
</Abstract>
<!-- All supported EPSG projections: -->
<!-- 省略 -->
<CRS>EPSG:3857</CRS>
<!-- 省略 -->
<CRS>EPSG:4326</CRS>
<!-- 省略 -->
<CRS>CRS:84</CRS>
<EX_GeographicBoundingBox>
<westBoundLongitude>143.83482400000003</westBoundLongitude>
<eastBoundLongitude>148.47914100000003</eastBoundLongitude>
<southBoundLatitude>-43.648056</southBoundLatitude>
<northBoundLatitude>-39.573891</northBoundLatitude>
</EX_GeographicBoundingBox>
<BoundingBox CRS="CRS:84" minx="143.83482400000003" miny="-43.648056" maxx="148.47914100000003" maxy="-39.573891"/>
<Layer queryable="0">
<Name>tasmania</Name>
<Title>Tasmania</Title>
<Abstract>
Tasmania Australia from Digital Chart of the World.
</Abstract>
<KeywordList/>
<CRS>EPSG:4326</CRS>
<EX_GeographicBoundingBox>
<westBoundLongitude>143.83482400000003</westBoundLongitude>
<eastBoundLongitude>148.47914100000003</eastBoundLongitude>
<southBoundLatitude>-43.648056</southBoundLatitude>
<northBoundLatitude>-39.573891</northBoundLatitude>
</EX_GeographicBoundingBox>
<BoundingBox CRS="CRS:84" minx="143.83482400000003" miny="-43.648056" maxx="148.47914100000003" maxy="-39.573891"/>
<BoundingBox CRS="EPSG:4326" minx="-43.648056" miny="143.83482400000003" maxx="-39.573891" maxy="148.47914100000003"/>
</Layer>
</Layer>
</Capability>
</WMS_Capabilities>
其中:
1、<Service>与</Service>之间一段的内容描述的是该服务的名称、关键词以及联系信息等。
2、<Capability>与</Capabilities>之间描述了该服务支持的操作以及包含的图层。其中:
- <Request>与<Request>之间描述的是该服务支持的操作,从上述响应可以看出该服务支持GetCapabilities、GetMap(得到地图)、GetFeatureInfo(得到要素信息)操作。
- <Layer>与<Layer>之间罗列了该服务所包含的所有图层数据,这里只有Tasmania图层。
- <GetMap>与</GetMap>中的Format列出了GetMap请求所支持的返回图片的格式,包括PNG、TIFF、GIF、JPEG、WBMP等格式。
- <DCPType></DCPType>中规定了请求的方式,上面的例子表示支持HTTP的Get与Post两种方式。根据该响应我们可构造GetMap请求获取图层或某些图层指定范围的地图。
三、使用GetMap操作请求地图
根据服务器的元数据,便可构造GetMap操作获取地图。
Tasmania图层数据,可在浏览器地址栏中输入如下URL:
http://localhost:8084/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&Layers=tasmania&styles=&CRS=EPSG:4326&BBOX=-43.648056,143.83482400000003,-39.573891,148.47914100000003&format=image/gif&WIDTH=1200&HEIGHT=900
该请求返回的结果如下图所示:
在上述URL中:
- service=WMS —— 表示使用WMS服务
- version=1.3.0 —— 表示使用1.3.0版本
- request=GetMap —— 表示执行GetMap操作
- layers=tasmania —— 表示请求图层为Tasmania
- 由于没有设置STYLE参数的值,所以表示使用默认样式绘制图层
- crs=EPSG:4326 —— 表示使用坐标参照系统为EPSG:4326
- bbox=-43.648056,143.83482400000003,-39.573891,148.47914100000003 —— 表示需要绘制的地图范围
- format=image/png —— 表示返回的地图图片格式为PNG
- width与height —— 指定返回图像的宽与高,单位为像素
WMS请求地图时,有一些是必需的参数,必须提供,此外还有一些可选参数,如果WMS服务的发布者实现了,也可使用。
STYLE,由于它是必须参数,因此即使不设置其值,但仍需包含在URL中。
WMS规范文档(前面已给出下载地址)的7.3.2小节来查看哪些是GetMap请求必需或可选参数,如下所示:
四、使用GetFeatureInfo操作请求地图要素信息
GetFeatureInfo操作是一个可选的操作。GetFeatureInfo操作仅仅支持可查属性(queryable)等于“1” 的图层,对于其他图层客户端不能发送GetFeatureInfo操作请求。
WMS服务不支持GetFeatureInfo操作请求时,会返回服务异常信息。
GetFeature操作的主要请求参数如下表所示:
即:
- VERSION —— 请求版本号
- REQUEST=GetFeatureInfo —— 请求名称
- map request part —— GetMap请求参数的部分副本。不包含其中的VERSION和REQUEST参数。决定查询的目标地图,即在哪个地图图片上查询
- QUERY_LAYERS=layer_list —— 待查询的图层列表,图层之间以英文符号分隔
- INFO_FORMAT=output_format —— 要素信息的返回格式(MIME类型)
- FEATURE_COUNT=number —— 要返回信息的要素的数量(默认为1)。以(I,J)为中心点,根据GetMap操作中的请求参数BBOX、WIDTH和HEIGHT确定初始查找范围半径,对指定的查询图层进行查找。如果查询返回结果小于用户指定的number值,将查找半径扩大一倍继续查找,如果查询结果数目满足用户要求返回的要素数目,返回结果,否则继续扩大半径。当查找半径达到初始搜索半径的8倍时,终止查询,返回查询结果,进入下一图层的查询。图层的查询顺序与待查询图层列表中的顺序一致。
- I=pixel_column —— 以像素表示的要素X坐标(最左侧为0,向右递增)
- J=pixel_row —— 以像素表示的要素Y坐标(最上侧为0,向下递增)
- EXCEPTIONS=exception_format —— WMS的异常错误报告格式(默认为application/vnd.ogc.se_xml)
例如,要查找本地计算机GeoServer自带数据的Tasmania图层的要素信息(以像素点(600, 700)为中心点进行查询):
http://localhost:8084/geoserver/wms?service=WMS&version=1.3.0&request=GetFeatureInfo&layers=tasmania&styles=&&crs=EPSG:4326&bbox=-43.648056,143.83482400000003,-39.573891,148.47914100000003&format=image/png&width=1200&height=900&query_layers=tasmania&info_format=text/plain&I=600&J=700
返回的响应如下图所示: