.. _chapter-wms: WMS-地图 Web 服务 ============================= 概述 ------ WMS(OpenGIS® Web Map Service)当前版本是 1.3.0。 WMS 标准定义了一些操作,这些操作允许用户在分布式的环境下通过 HTTP 对空间数据进行出图等操作。 WMS种类与操作 --------------------------- 比起 WFS,WMS 的操作要简单的多: 1.GetCapabilities(获取服务中的要素类及支持的操作) 2.GetMap(获取地图) 3.GetFeatureInfo(根据地图上的像素点获取更详细的要素信息,类似 Identify 功能) 同样,这些操作并不是必须全部实现,而是实现全部或部分。根据所支持的操作不同,WMS 可以分为 2 类: 1.Basic WMS(就是最常被提及的 WMS,必须支持 GetCapabilities/GetMap 操作) 2.Queryable WFS(必须在 Basic WMS 基础上加上 GetFeatureInfo 操作) 关于服务涉及的基本元素,可以参考前面的章节:《服务涉及的基本元素》。 WMS 中叧规定了 KVP 格式的请求,因此下面介绍一下 WMS 的请求和响应内容。 GetCapabilities 操作 ---------------------- GetCapabilities 操作需要以下的参数: +--------------------------------------+--------------------------------------+ | 参数 | 是否必须 | +--------------------------------------+--------------------------------------+ | VERSION | | +--------------------------------------+--------------------------------------+ | SERVICE=WMS | 是 | +--------------------------------------+--------------------------------------+ | REQUEST=GetCapabilities | 是 | +--------------------------------------+--------------------------------------+ | FORMAT | | +--------------------------------------+--------------------------------------+ | UPDATESEQUENCE | | +--------------------------------------+--------------------------------------+ 以下是一个 WMS 的 GetCapabilities 操作示例: :: http://www.someserver.com/wms? VERSION=1.3.0& SERVICE=WMS& REQUEST=GetCapabilities 这样的请求返回的响应示例: GetMap 操作 ------------- GetMap 操作需要以下的参数: +--------------------------------------+--------------------------------------+ | 参数 | 是否必须 | +--------------------------------------+--------------------------------------+ | VERSION | 是 | +--------------------------------------+--------------------------------------+ | REQUEST=GetMap | 是 | +--------------------------------------+--------------------------------------+ | LAYERS | 是 | +--------------------------------------+--------------------------------------+ | STYLES | 是 | +--------------------------------------+--------------------------------------+ | CRS | 是 | +--------------------------------------+--------------------------------------+ | BBOX | 是 | +--------------------------------------+--------------------------------------+ | WIDTH | 是 | +--------------------------------------+--------------------------------------+ | HEIGHT | 是 | +--------------------------------------+--------------------------------------+ | FORMAT | 是 | +--------------------------------------+--------------------------------------+ | TRANSPARENT | | +--------------------------------------+--------------------------------------+ | BGCOLOR | | +--------------------------------------+--------------------------------------+ | EXCEPTIONS | | +--------------------------------------+--------------------------------------+ | TIME | | +--------------------------------------+--------------------------------------+ | ELEVATION | | +--------------------------------------+--------------------------------------+ 以下是一个 WMS 的 GetMap 操作示例: :: http://www.someserver.com/wms? VERSION=1.3.0&REQUEST=GetMap& CRS=CRS:84&BBOX=-97.105,24.913,-78.794,36.358& WIDTH=560&HEIGHT=350&LAYERS=BUILTUPA_1M,COASTL_1M,POLBNDL_1M& STYLES=0XFF8080,0X101040,BLACK&FORMAT=image/png&BGCOLOR=0xFFFFFF& TRANSPARENT=TRUE&EXCEPTIONS=INIMAGE 该请求的响应就是一张图片。 GetFeatureInfo 操作 --------------------- GetFeatureInfo 操作需要以下的参数: +--------------------------------------+--------------------------------------+ | 参数 | 是否必须 | +--------------------------------------+--------------------------------------+ | VERSION | 是 | +--------------------------------------+--------------------------------------+ | REQUEST=GetFeatureInfo | 是 | +--------------------------------------+--------------------------------------+ | GetMap 请求参数 | 是 | +--------------------------------------+--------------------------------------+ | QUERY\_LAYERS | 是 | +--------------------------------------+--------------------------------------+ | INFO\_FORMAT | 是 | +--------------------------------------+--------------------------------------+ | FEATURE\_COUNT | | +--------------------------------------+--------------------------------------+ | I | 是 | +--------------------------------------+--------------------------------------+ | J | 是 | +--------------------------------------+--------------------------------------+ | EXCEPTIONS | | +--------------------------------------+--------------------------------------+ 以下是一个 WMS 的 GetFeatureInfo 操作示例: :: http://www.someserver.com/wms? request=GetFeatureInfo& VERSION=1.3.0&FORMAT=image/jpeg& BBOX=-4.0325,-2.9078,40.5189,41.6436& QUERY_LAYERS=Countries,Cities& INFO_FORMAT=text/html HEIGHT=400&WIDTH=400& STYLES=& I=290&J=246& ArcGISServer对WMS的支持 ----------------------------- ArcGISServer10中支持的WMS版本为最新的1.3.0。 在 ArcGISServer 中,叧需简单地勾选的Capabilities选项卡中可以选择支持WMS,如图21。 |image0| 图21ArcGISServer发布WMS服务 现在我们通过浏觅器直接发送请求获取一张劢态地图: :: http://localhost:8399/arcgis/services/basemap/World/MapServer/WMSServer? VERSION=1.3.0&REQUEST=GetMap& CRS=CRS:84&BBOX=-180,-90,180,90& WIDTH=720&HEIGHT=360&LAYERS=0,1,2& STYLES=,,&FORMAT=image/png& TRANSPARENT=TRUE 这个请求返回一张这样的图片,这和ArcMap中的配置是完全一致的: |image1| 然后,我们模拟某个用户在图片上进行了一个点击,想看看点击处的点对象都有什么属性值, 这时会有一个这样的请求发送到 WMS 服务上: :: http://localhost:8399/arcgis/services/basemap/World/MapServer/WMSServer? VERSION=1.3.0&REQUEST=GetFeatureInfo& CRS=CRS:84&BBOX=-180,-90,180,90& WIDTH=720&HEIGHT=360& INFO_FORMAT=text/xml& QUERY_LAYERS=2& I=593&J=100 这个请求返回如下的结果,很显然,刚才在地图上的北京附近进行了点击, 服务返回回来“Beijing”这个要素的所有属性: :: "http://www.esri.com/wms" xmlns="http://www.esri.com/wms"> "2165" Shape="Null" CITY_NAME="Beijing" GMI_ADMIN="CHN-BJN" ADMIN_NAME="Beijing" FIPS_CNTRY="CH" CNTRY_NAME="China" STATUS="National and provincial capital" POP_RANK="1" POP_CLASS="5,000,000 and greater" PORT_ID="0" LABEL_FLAG="1"> .. |image0| image:: image087_xtk.jpg .. |image1| image:: image089_xh3.jpg