OpenLayers教程十六:多源数据加载之WMS(一)

目录

一、WMS规范简介

二、请求WMS服务的元数据

二、请求WMS服务的地图图像

四、请求WMS服务的地图要素信息


一、WMS规范简介

    在WebGIS中,有多种方法在网页浏览器中显示地图:

  • 瓦片地图     ——    事先将地图切割成瓦片,需要时再发送给客户端,瓦片可以存储在服务器或者本地
  • 矢量地图    ——    将具有空间信息和属性信息的数据(比如GeoJSON、KML等)发送给浏览器,然后在浏览器渲染,数据可以存储在服务器或者本地
  • 矢量切片    ——    一种瓦片地图和矢量地图的中庸之道,结合了两者优势的一种显示地图的方式,后面再介绍。
  • 动态绘制地图服务    ——    在服务器端根据请求的内容绘制一个地图图像(在服务器端绘制),然后返回给客户端。

   本文就来介绍动态绘制地图相关的内容。

   因为每次都是根据用户请求参数,随时绘制地图,图像反映数据的最新情况,且在服务器端绘制地图,因此该方式通常称为动态绘制地图服务。而切片地图方式只反映了生成地图切片时的数据状况。

    动态绘制地图服务的缺点是在多用户并发请求时,服务器容易超负荷运行,即用户越多,响应越慢。

    OGC(开发地理空间联盟)的WMS(Web Map Service)服务规范就是一种动态绘制地图服务的规范,许多WebGIS服务器实现了WMS规范,因此可以结合一些WebGIS服务器发布WMS服务,然后使用OpenLayers调用WMS服务在客户端呈现地图。目前比较流行的WebGIS服务器有GeoServer、ArcGIS Server等。

    到目前为止,已发布了4个版本的WMS规范。这些版本是v1.0.0、v1.1.0、v1.1.1和v1.3.0(最新版本)。WMS规范的地址为:http://www.opengeospatial.org/standards/wms 。

   WMS服务主要支持以下操作:

  •     请求服务的元数据(GetCapabilities)
  •     请求地图图像(GetMap)
  •     请求关于地图要素的信息(GetFeatureInfo,可选)
  •     请求图例(GetLegendGraphic,可选)
  •     请求用户定义的样式(GetStyles,可选)

    作为基本WMS服务,必须至少支持GetCapabilities和GetMap操作,如果作为可查询WMS,则需要支持可选的GetFeatureInfo操作。

    对于样式化图层描述符WMS服务,还有两种可选的操作,一个是请求图例符号操作,即GetLegendGraphic;第二个是请求用户定义的样式操作,即GetStyles。

 

二、请求WMS服务的元数据

    因为要使用到GeoServer,所以请先阅读这篇文章:使用GeoServer发布shapefile数据

    GetCapabilities操作返回服务的元数据。根据该服务的元数据来确定该服务支持哪些其他操作。

    查看GeoServer的管理页面的首页可以发现它实现了WMS规范:

OpenLayers教程十六:多源数据加载之WMS(一)_第1张图片

    接下来,比如我想访问自己本地计算机安装的GeoServer的WMS服务的元数据,就可以直接在浏览器地址栏输入:

        http://localhost:8084/geoserver/wms?service=wms&version=1.3.0&request=GetCapabilities

    其中:

  • http://localhost:8084/geoserver/wms    ——    是请求的路径
  • service=wms    ——    表示服务是WMS
  • version=1.3.0    ——    表示WMS规范版本是1.3.0(最新版本)
  • request=GetCapabilities    ——    表示请求服务的元数据

    上面的地址返回或打开一个XML格式的文件,内容如下(为了节省篇幅,删减了一些重复与不重要的内容):

This XML file does not appear to have any style information associated with it. The document tree is shown below.


WMS
GeoServer Web Map Service

A compliant implementation of WMS plus most of the SLD extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS


WFS
WMS
GEOSERVER




Claudius Ptolomaeus
The Ancient Geographers

Chief Geographer

Work
Alexandria Egypt [email protected] NONE NONE text/xml image/png application/atom+xml application/json;type=utfgrid application/pdf application/rss+xml application/vnd.google-earth.kml+xml application/vnd.google-earth.kml+xml;mode=networklink application/vnd.google-earth.kmz image/geotiff image/geotiff8 image/gif image/jpeg image/png; mode=8bit image/svg+xml image/tiff image/tiff8 image/vnd.jpeg-png text/html; subtype=openlayers text/html; subtype=openlayers2 text/html; subtype=openlayers3 text/plain application/vnd.ogc.gml text/xml application/vnd.ogc.gml/3.1.1 text/xml; subtype=gml/3.1.1 text/html application/json XML INIMAGE BLANK JSON GeoServer Web Map Service A compliant implementation of WMS plus most of the SLD extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS EPSG:3857 EPSG:4326 CRS:84 -180.0 180.0 -90.0 90.0 nyc:nyc_roads nyc_roads features nyc_roads EPSG:2908 CRS:84 -74.00083696924521 -73.97235840001699 40.73668796412016 40.76948947044791

    其中:

    1、之间一段的内容描述的是该服务的名称、关键词以及联系信息等。

    2、与之间描述了该服务支持的操作以及包含的图层。其中:

  • 之间描述的是该服务支持的操作,从上述响应可以看出该服务支持GetCapabilities、GetMap(得到地图)、GetFeatureInfo(得到要素信息)操作。
  • 之间罗列了该服务所包含的所有图层数据
  • 中的Format列出了GetMap请求所支持的返回图片的格式,包括PNG、TIFF、GIF、JPEG、WBMP等格式。
  • 中规定了请求的方式,上面的例子表示支持HTTP的Get与Post两种方式。根据该响应我们可构造GetMap请求获取图层或某些图层指定范围的地图。

二、请求WMS服务的地图图像

    根据服务器的元数据,便可构造GetMap操作获取地图。

    例如要得到GeoServer中的nyc_roads图层的地图图像,就可以在浏览器地址栏中输入:

http://localhost:8084/geoserver/wms?SERVICE=wms&VERSION=1.3.0&REQUEST=GetMap&LAYERS=nyc:nyc_roads&SRS=EPSG:2908&BBOX=984018.1663741902,207673.09513056703,991906.4970533887,219622.53973435296&FORMAT=image/png&WIDTH=600&HEIGHT=800

    该请求返回的结果如下图所示:

OpenLayers教程十六:多源数据加载之WMS(一)_第2张图片

    在上述URL中:

  • SERVICE=wms    ——    表示使用WMS服务
  • VERSION=1.3.0    ——    表示使用1.3.0版本的WMS规范
  • REQUEST=GetMap    ——    表示执行GetMap操作
  • LAYERS=nyc:nyc_roads    ——    表示请求的图层是nyc_roads
  • CRS=EPSG:2908    ——    表示使用的坐标参照系统为EPSG:2908
  • BBOX=984018.1663741902,207673.09513056703,991906.4970533887,219622.53973435296    ——    表示需要请求的图层的范围
  • FORMAT=image/png    ——    表示返回的地图图像的格式为PNG
  • WIDTH与HEIGHT    ——    指定返回图像的宽与高,单位为像素

    当从WMS请求地图时,有一些是必需的参数,必须提供,此外还有一些可选参数,如果WMS服务的发布者实现了,也可使用。

    在上述URL中所有的参数都是必需的,必须包含。

    可通过WMS规范文档(前面已给出下载地址)的7.3.2小节来查看哪些是GetMap请求必需或可选参数,如下所示:

OpenLayers教程十六:多源数据加载之WMS(一)_第3张图片

四、请求WMS服务的地图要素信息

    GetFeatureInfo操作是一个可选的操作。GetFeatureInfo操作仅仅支持可查属性(queryable)等于“1” 的图层,对于其他图层客户端不能发送GetFeatureInfo操作请求

    当WMS服务不支持GetFeatureInfo操作请求时,会返回服务异常信息。

    GetFeature操作的主要请求参数如下表所示:

OpenLayers教程十六:多源数据加载之WMS(一)_第4张图片

    即:

  • VERSION    ——    请求版本号
  • REQUEST=GetFeatureInfo    ——    要请求的操作
  • map request part    ——    GetMap请求参数的部分副本,就是和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的nyc_roads图层的要素信息(以像素点(400, 300)为中心点进行查询)

http://localhost:8084/geoserver/wms?SERVICE=wms&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=nyc:nyc_roads&CRS=EPSG:2908&BBOX=984018.1663741902,207673.09513056703,991906.4970533887,219622.53973435296&WIDTH=600&HEIGHT=800&QUERY_LAYERS=nyc:nyc_roads&INFO_FORMAT=text/plain&I=400&J=300

    返回的结果如下图所示:

OpenLayers教程十六:多源数据加载之WMS(一)_第5张图片

你可能感兴趣的:(开源GIS)