APP下载

一种基于WMS服务的地图应用方法

2013-10-15彭会湘

计算机与网络 2013年1期
关键词:图层语句客户端

彭会湘

(中国电子科技集团公司第五十四研究所河北石家庄050081)

1 引言

随着现代测绘技术的发展,测绘成果极大丰富,形成了多种比例尺、多种坐标系、多种投影方式的矢量地图数据、影像地图数据、DEM 数据、栅格地图数据等,为各行业应用提供了强有力的信息保障。然而各行业的应用部门不是测绘专业部门,对相关测绘专业知识了解有限,面对复杂的、海量的多源异构数据常常一筹莫展,不知所措,极大地影响了测绘成果的应用效果。WMS 是一种基于OGC 规范的网络地图服务,它提供了一个地理空间信息和地理空间服务资源的软件框架,封装了多源异构地理空间数据的复杂性,以返回地图图像的方式简化了客户端的开发,为各行业的地图应用提供了有效的解决方案。

2 WMS 规范及技术原理

2.1 WMS 规范

OGC 制定了开放式地理数据互操作规范OGIS,依照该规范,可以构建一个提供地理空间信息和空间服务资源的软件框架。在OGC 规范中,最重要的3个地理信息服务实现规范是WMS、网络要素服务(W FS)和网络覆盖服务(WCS)。其中WMS 能够根据用户的请求返回相应的地图,W FS 支持对地理要素的插入、更新、删除和检索等服务,WCS 提供的是包含了地理位置信息或属性的空间栅格图层[1]。

按照OGC 规范可以将多源异构地理空间数据发布成3种地理信息服务,基于这3种服务进行地理信息应用是解决多源异构地理空间数据互操作和应用的有效途径,并且现在各大GIS 软件厂商、开源GIS 软件都支持符合OGC 规范的地理信息服务发布,利用商业或开源GIS 软件对多源异构地理空间数据进行专业处理、发布服务,自主开发服务访问应用是适应行业应用特点、降低成本的有效途径。

WMS 属于OGC 图示表达服务,它利用具有地理空间位置信息的数据制作地图。在WMS 规范中将地图定义为地理数据可视的表现,WMS 返回的不是地图数据,而是地图图像。WMS 规范定义了3个操作[2]:

①GetCapabilities 操作返回服务级元数据,它是对服务信息内容和请求参数的一种描述,使用XM L 形式文件表示,关键要素是Layers,其主要内容包括:标题(Title)、图层名(Name)、坐标范围(BoundingBox)等元素[3];

②GetM ap 操作根据客户端发出的请求参数在服务端进行检索,服务器端返回一个地图图像,其地理空间参数和大小参数是已经明确定义的,返回的地图图像可以是PNG、GIF 和JPEG 等格式[4];

③GetFeaturelnfo 操作根据用户所请求的X、Y 坐标或感兴趣的图层,返回地图上某些特殊要素的信息,信息以HTML,GM L 或ASCII 的格式表示[5]。

2.2 技术原理

在WMS 的3个操作中,GetCapabilities 和GetM ap 是必须要实现的,而GetFeaturelnfo 是可选的,WMS 的请求与响应是在客户端和服务器端实现的,客户端既可以是普通的浏览器,也可以是应用系统或组件。用UM L 时序图描述的客户端与服务器端的交互过程如图1 所示。

图1 客户端与服务器端的交互过程

WMS 客户端与WMS 服务端建立连接后,客户端向服务端发送GetCapabilities 请求,服务端返回XML 格式的元数据描述文件,XML 元数据描述文件提供的信息包括:WMS 服务器支持的所有功能接口列表;所能提供的图像格式;从服务器端传送地图数据的可用的空间参照系列表;从服务器端返回的所有异常的列表;特定与某一软件商的WMS 服务器修改和控制功能的专用元数据的列表;某一WMS 服务器的可用图层及可选属性的列表等。

客户端解析XM L 元数据文件,获取图层信息后,向服务端发送GetMap 请求,请求中包含图层名称、请求的地理坐标范围、要求返回图像的格式、大小等信息。服务端对GetMap 请求进行处理,按要求生成对应的图像数据,以数据流的方式返回。客户端收到数据流后,将数据流打包形成图像文件进行显示。如果客户端知道WMS 服务端提供的图层信息,也可以不发送GetCapabilities 请求,直接发送GetMap 请求获取地图图像。客户端对地图进行放大、缩小、移动时都需要重新发送GetM ap 请求,在请求中更新当前的显示范围,以获取符合屏幕显示范围的地图图像。

3 设计思路

许 多 商 用 软 件 ( 如 ArcGis、SuperMap、Eardas、ENVI、GlobalMapper)和开源软件(如GeoServer、Udig 等)都具备对常用格式的矢量数据、影像数据、DEM 数据进行投影变换、格式转换、建立金字塔、发布符合OGC 标准地图服务等专业处理能力。因此可以借助这些软件来制作数据、发布服务,应用的重点是连接服务,从服务获取地图数据进行显示和行业应用。应用主要采用W in Inet 库的接口函数来实现与WMS 服务器的连接、从WMS 服务器下载元数据文件、地图图像,主要用到InternetOpen、InternetOpenU rl、H ttpQueryInfo、InternetReadFile和InternetC loseHandle 等几个接口函数。

其中:①InternetOpen 的作用是初始化应用程序,该函数调用成功后返回Internet 会话句柄,以使用其他W in Inet 函数;②InternetOpenU rl 的作用是通过一个完整的FTP、Gopher 或HTTP 网址打开一个资源,InternetOpenU rl 函数解析URL 字符串,建立到服务器的连接,并准备下载指定的URL 数据;③H ttpQueryInfo 的作用是返回一个与HTTP 请求关联的信息头;④InternetReadFile 的作用是通过Internet 会话句柄下载数据,将数据保存到缓冲区中;⑤InternetCloseHandle 的作用是下载完相关数据后关闭Internet 会话。从WMS 服务器下载资源是核心处理流程,具体流程如图2 所示。

图2 资源下载处理流程

4 客户端实现

4.1 地图目录获取

WMS 发布的地图服务可以通过调用GetCapabilities 接口,从返回的XML 元数据描述文件中获取,应用中通过构造URL 语句向WMS 服务器发送 GetCapabilities 请求,GetCapabilities 接口中应包含如下要素:

①WMS 服务地址:以安装于本机的GeoServer 为例,其服务地址为:http://localhost:8080/geoserver/wms;

② 服 务 类 型: 固 定 为 wms,URL 语 句 写 法 为service=wms;

③请求类型:固定为GetCapabilities,URL 语句为request= GetCapabilities;

④版本信息:URL 语句为VERSION=version;

⑤向WMS 发送GetCapabilities 请求的URL 语法要求为:WMS 服务地址与其他要素之间用“?”符号隔开,其他各要素之间用“&”符号隔开,举例如下:

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

⑥将以上URL 语句作为参数执行图2 流程,即可得到WMS 服务元数据描述文件,从该文件中可以获取WMS 发布的地图信息,包括地图名称、坐标范围等内容。

4.2 获取地图图像

从WMS 服务元数据中获取到地图名称、坐标范围后可以通过调用GetM ap 接口获取地图图像,应用中通过构造URL 语句向WMS 服务器发送GetM ap 请求,GetM ap 接口中应包含如下要素:

①WMS 服务地址:以安装于本机的GeoServer 为例,其服务地址为:http://localhost:8080/geoserver/wms;

②服务类型:固定为WMS,URL 语句写法为service=WMS;

③请求类型:固定为GetM ap,URL 语句为request=GetM ap;

④版本信息:URL 语句为VERSION=version;

⑤图层信息:URL 语句为layers= 图层名称;

⑥请求地理范围:URL 语句为bbox=最小经度、最小纬度,最大经度,最大纬度;

⑦需要的图像宽度:URL 语句为w idth=图像宽度;

⑧需要的图像高度:URL 语句为height=图像高度;

⑨需要的图像格式:URL 语句为format=image/ 图像格式;

⑩向WMS 发送GetM ap 请求的URL 语法要求为:WMS 服务地址与其他要素之间用“?”符号隔开,其他各要素之间用“&”符号隔开,举例如下:

将以上URL 语句作为参数执行图2 流程,即可得到WMS 返回的根据world 图层生成的一幅图像,图像左下角对应的经纬度坐标为(- 180,- 90),图像右上角对应的经纬度坐标为(180,90),图像的宽度为800 像素,图像的高度为600 像素,图像的格式为jpeg。

按原始分辨率显示图像可达到最佳的显示效果,图像显示的清晰度最高,因此,在向WMS 发送GetM ap 请求时需要注意以下2个方面:①请求的地图范围取当前地图显示窗口的地理范围与请求图层地理范围的交集;②请求图像的宽度和高度要等于请求地理范围转换为屏幕坐标后的屏幕坐标宽度和高度。客户端每次对地图进行放大、缩小、移动等操作时都需要重新计算请求的地图范围、请求图像的宽度和高度,然后重新生成GetMap 请求发送给WMS 服务,获取新的图像后刷新地图窗口进行显示。

4.3 应用示例

随着信息技术、现代测绘技术的发展,产生了海量的、多种来源、多种格式的测绘信息,用户提出了支持多种地理空间数据的需求,在数据格式和数据量上都对既有地图显示组件提出了更高的要求,如果在地图显示组件中直接增加对多种格式海量数据的支持,不仅技术难度大、开发周期长,并且还会面临因技术发展而难以适应新的需求的问题。

经过反复论证,认为开发适应OGC 开放式地理数据互操作规范的WMS 服务是解决当前和将来面临问题的捷径,对于应用来说,WMS 实现了对多种数据格式的封装和转换,以通用格式的图像提供地图服务,使得客户端的处理变得相对简单,由于各专业厂商的地理信息处理软件都支持OGC 规范,提供了应用的通用性。

对基于地图显示组件开发的项目软件,采用了如下解决方案:在应用局域网中部署一台GeoServer 服务器,利用专业处理软件(如GlobalM apper)对地理空间数据进行处理,生成符合要求的数据格式,利用GeoServer 发布成WMS 服务,然后改造原地图显示组件,使之能够连接WMS 服务,获取WMS服务的元数据描述,解析WMS 发布的地图服务信息。原地图显示组件提供了影像图层类,用于对本地影像地图的加载和显示,现在为地图显示组件增加WMS 图层类,以实现对WMS 图层的加载和显示,WMS 图层类提供D raw、GetM ap 和DownLoad 3个函数,其中:

①D raw 的主要功能是在地图控件刷新时调用,实现本图层的绘制。该函数首先计算本次请求的地理范围、请求图像的大小,然后调用GetM ap 函数从WMS 服务获取地图图像文件,再利用原影像图层类实现对地图图像的加载显示;

②GetMap 的主要功能是根据D raw 函数传递的地理范围、图像大小、图像文件名称等参数生成获取地图图像的URL语句,调用Dow nLoad 函数实现地图图像数据的下载;

③Dow nLoad 的主要功能是根据GetMap 函数传递的URL、图像文件名称等参数,向WMS 服务发送GetM ap 请求,将获取的数据写入到指定名称的文件中。

5 结束语

开放性和互操作是地理信息系统的发展趋势,WMS 规范对异构数据源访问及操作的复杂性进行了封装,以W eb Services 的形式提供了简单易用的访问接口,实现了对异构数据源的访问。在ISO/TC211 和OGC 的推动下,WMS 的相关规范已经发展得相当成熟[6],目前,许多GIS 软件,如ArcGIS、SuperM ap 等都已经支持WMS 接口,借助于这些专用GIS 信息处理软件,很容易实现对异构数据源的处理整合,并发布为WMS 服务,使得基于地图的应用避免了复杂的数据处理,而把主要的精力用于行业应用。

[1]杨鹏,邹时林.基于OpenLayers 的WebGis 客户端的开发[J].测绘与空间地理信息,2012,35(3):131- 133.

[2]贾文珏,陈玉敏,龚健雅,李爱霞.基于WebService 的OGC地图服务实现方法[J].测绘信息与工程,2004,29(4):34- 36.

[3]白玉琪,杨崇俊.空间信息搜索引擎研究[J].中国矿业大学学报,2004,33(1):90- 94

[4]许朝晖,陈荣国,谢炯.WMS 的自定义地图服务聚合技术研究[J].测绘科学技术学报,2011,28(3):223- 226

[5]黄向,张毅坤,房玉峰.基于WMS 服务规范的Web GIS 实现方法[J].山东农业大学学报(自然科学),2007.38(1):131- 136

[6]邬群勇,王钦敏,王焕炜.一种Web 地图服务搜索器的设计[J].微计算机应用,2009,30(2):35- 39.

猜你喜欢

图层语句客户端
重点:语句衔接
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
巧用混合图层 制作抽象动感森林
图层法在地理区域图读图中的应用
跟我学添加真实的光照效果
浅析“递层优化法”在矿井制图中的应用
如何搞定语句衔接题
客户端空间数据缓存策略