基于XML的 WebGIS 架构与实现

时间:2022-10-08 09:03:59

摘要: ArcIMS 是开发WebGIS的有力工具,而ArcXML则是ArcIMS中通信的标准语言,负责描述客户端请求与服务端响应。但在.NET平台下ArcIMS 对封装ArcXML语句显得能力不足,针对此,本文提出了利用.NET Web Service 来架构WebGIS,将基本的ArcXML请求响应语句封装起来,提供基本的地图功能,从而屏蔽了底层细节,简化了ArcIMS的二次开发。

关键字:WebGIS、ArcIMS、ArcXML、Web Services、平台

中图分类号:TP311.5 文献标识码: A 文章编号:

引言

ArcIMS[1]是ESRI公司推出的基于Internet 的GIS系统开发软件,它凭其严谨的体系结构,丰富的定制方式,跨平台和分布式的特点,已成为目前最常用的WebGIS实现方式。Microsoft .NET[2]是微软公司提出的一种分布式运算的框架,是为Web Services准备的开发和部署平台。如何使.NET与ArcIMS结合开发是很值得研究的内容。

随着 ArcIMS 9的,提供了一种新的连接器——.Net Link来加强对. Net开发环境的支持[3]。.Net Link是 对 ActiveX 连接器的扩展。不但增强了对应系统管理的消息处理,也有了许多性能上的提高。

但.Net Link不像其前辈ActiveX 连接器那样成熟,通过一系列API来定义、生成ArcXML文件中的节点与属性。而仅仅是对XML文件的一种搭配与组装,对ArcXML请求响应语句没有很好的封装。开发人员需要面对大量ArcXML中的子元素及其属性设置,开发过程比较繁琐。

针对此,本文利用.NET核心技术——Web Services来架构WebGIS,目的是为了方便WebGIS基础开发和地图基本功能的集成,也便于日后的功能扩展。

用.NET Web Service 架构WebGIS

本文针对ArcIMS 开发方式上的不足,提出了一个基于Web Services 的空间信息服务平台体系结构。通过对其核心语言ArcXML的剖析与封装来改进其在.NET环境下的开发过程。

2.1模型结构及业务流程

参考OGC和W3C的Web Services体系结构[3],在ArcIMS开发运行环境下,提出了一个空间信息服务平台模型结构如图所示

整个架构由客户层、服务层与数据层构成,其中服务层是整个模型结构的重心,定义空间数据操作接口规范,如函数名称,参数名称以及调用规范。它包括功能服务体系和数据服务体系及其他服务。并且它们相互之间可以提供服务(这种方式被称为“服务链”)。

该模型的运行流程为:

(1)空间信息服务平台对于数据的操纵和处理,编写相应的Web Services功能模块,并以WSDL的形式描述这些功能,且将服务到公共注册中心供用户搜索。同时注册中心还对用户进行认证,且为每个地理信息服务提供各自的调用和返回数据接口。

(2)客户端 GIS 应用程序通过注册中心查询服务平台提供的各种地理信息网络服务,然后通过应用服务器提出绑定请求,获取服务的描述和接口信息。

(3)应用程序调用Web Services,实现对数据的操作和处理。

2.2 Web服务具体实现过程

下面还是以缩放操作为例,给出具体的实现过程:

首先设计了类 Rect ,它的主要用途是保存当前地图的四周坐标,并在每次缩放操作后动态更新。类Rect的具体结构如下:

私有成员:private static float left, right, bottom, top; 保存地图边界

公有方法:public static float[] getrect() 用于获取当前的坐标值

public static void setrect(float a, float b, float c, float d) 每次缩放或平移操作后更新其私有成员的值。

利用GetMap服务解析出地图的初始坐标,并给Rect类设初值。

下面是关键代码段:

XmlNodeList nodelist2=root2.GetElementsByTagName("ENVELOPE");

if (nodelist2!=null)

{

XmlNode urlnode2=nodelist2.Item(0);

float x,y,x2,y2;

x=float.Parse(urlnode2.Attributes["minx"].InnerXml);

y=float.Parse(urlnode2.Attributes["miny"].InnerXml);

x2=float.Parse(urlnode2.Attributes["maxx"].InnerXml);

y2=float.Parse(urlnode2.Attributes["maxy"].InnerXml);

Rect.setrect(x,y,x2,y2);

}

每次进行缩放操作前先取出当前Rect类的成员值, 根据一定的比例进行相应的坐标变换,然后更新Rect类成员,下面是放大操作的代码:

public void Zoomin(string ServerName, string ServiceName)

{

float [] temp=Rect.getrect();

float incr,incr2;

incr=(temp[2]-temp[0])/4;

temp[0]+=incr; temp[2]-=incr;

incr2=(temp[3]-temp[1])/4;

temp[1]+=incr2; temp[3]-=incr2;

Rect.setrect(temp[0],temp[1],temp[2],temp[3]);

}

利用GetMap2函数根据当前Rect类保存的地图坐标进行图像的请求与响应,获取缩放变换后的图像地址。

request = "… ….";

XmlNodeList nodelist=root.GetElementsByTagName("OUTPUT");

string url=urlnode.Attributes["url"].InnerXml;

2.3 服务的部署及引用

部署Web 服务的工作非常简单。 Web 服务的部署模式与ASP 和 页面的部署模式相同[8]。用户只需要把.asmx 文件放在Web 应用程序的目录中。如果现在还没有Web 应用程序,可以使用Internet 信息服务(Internet Information Services,IIS)。用户只需创建一个虚拟的目录,并把该虚拟目录指定为放置.asmx 文件的文件夹。

上一篇:电力企业综合管理工作之我见 下一篇:刍议建筑工程施工管理存在问题及解决措施