AJAX在Web-GIS中的使用

AJAX在Web-GIS中的运用
摘要: 随着Web平台越来越成熟,我们可以发现有越来越多的令人兴奋 的技术出现,这些技术使地理信息系统(GIS)的显示应用达到了一个功能强大且应用广泛的新高度,通过把最新的功能强大的技术整合到GIS系统中去,我们 得到了高效率执行的结果,随之赋予了更多的功能。在目前基于浏览器应用程序的开发技术中,AJAX(Asynchronous JavaScript and XML)无疑是最新的技术。在本文中,我们介绍了一个通用的,高效的架构,这个架构把AJAX模型整合到了GIS Web Services显示系统中。

“Integrating AJAX Approach into GIS Visualization Web Services”

Ahmet Sayar1, 2, *, Marlon Pierce1 and Geoffrey Fox 1, 2, 3, 4

1 Community Grids Lab, Indiana University, Bloomington, Indiana, 47404, USA

2Department of Computer Science, Indiana University

3Department of Physics, Indiana University

4School of Informatics, Indiana University

{asayar, mpierce, gcf}@cs.indiana.edu

 

中文翻译 郑翔

zhengsean916@yahoo.com.cn

本文原文来自互联网

2006-8-29

 

摘要 :随着 Web 平台越来越成熟,我们可以发现有越来越多的令人兴奋的技术出现,这些技术使地理信息系统 (GIS) 的显示应用达到了一个功能强大且应用广泛的新高度,通过把最新的功能强大的技术整合到 GIS 系统中去,我们得到了高效率执行的结果,随之赋予了更多的功能。在目前基于浏览器应用程序的开发技术中, AJAX(Asynchronous JavaScript and XML) 无疑是最新的技术。在本文中,我们介绍了一个通用的,高效的架构,这个架构把 AJAX 模型整合到了 GIS Web Services 显示系统中。

1. 导引

       AJAX 是基于 Web Applications 的浏览器的一种重要的开发模型。它使用了几种技术,这几种技术整合在一起并且相互合同工作,从而来创建功能强大的新应用。组成 AJAX 的模型的有 XML JavaScript HTTP XHTML ,这些技术都是被广泛应用和被大家所熟悉的。高效的 Google Mapping 就是使用了这一新的,功能强大的模型。

 

       Web Services 是自包含的、自描述的、并且是有标准组件的,和早期不一样,现在有了更多紧密联系的分布式对象方法 ( 例如 CORBA ,另外还有 Web Services 系统支持的 XML 消息中心方法 ) ,这使得允许我们创建低耦合的,高分布式跨组织的系统,同时 Web Services 也推广了 GIS 值得期许的特性,比如建立了一些标准,这些标准提供通用的发布、定位和调用 Web 服务的规范, Web Services 同时使用了被广泛使用的和熟知的技术,比如和 AJAX 类似的 XML HTTP ,既然 AJAX Web Services 都是基于 XML 结构的,那么他们相互之间是可以起到杠杆作用的。

 

       在本文中,首先给出一些我们在目标架构所用到的 Web 技术的背景信息,这些技术是基于 AJAX Web Services GIS Web Services 的。在第三部分我们将提及一些关于 AJAX Web Services 的相关工作;在第四部分我们先给出一个通用的用来整合 Web Services AJAX 的架构,然后我们将给出实例来验证这些关于整合的概念,其中之一就是基于 Google GIS Data Server( WFS ) 的整合,另外一个是基于 Google GIS Mapping Server( WMS ) 的整合;在第五部分是未来的工作,第六部分是结论。

 

2 背景知识

       这里提到的整合架构是由 GIS 领域内的 AJAX Web Services 构成的,在这里我们将首先解释一下这些技术和理论,还有他们的优点。

2.1 异步 JavaScript XML

       AJAX 是一种 Web 应用的开发风格,它混合使用了当前的 Web 技术来提供更具交互性体验的 Web 应用。 AJAX 并不是一种技术,它只是包括了开发 Web 应用程序的一组技术而已,这些技术是 JavaScript HTML 、层叠样式表 (CSS) 、文档对象模型 (DOM) XML XSLT ,以及通过 XMLHttpRequest 来进行通信协议的消息发送。

 

       构成 AJAX 这些核心技术已经很成熟,并且广泛的应用于 Web 应用开发领域; AJAX 之所以越来越流行是由于它对那些基于 Web 浏览器应用程序开发者来说有很多的优点,它消除了交互过程中的“停止 - 开始”的弱点,用户在与服务器交互的过程是异步的,从而使页面上的数据不必一次又一次的全部刷新,并且这些“请求 - 应答 的过程是通过结构化的 XML 文档—— XMLHttpRequest 协议完成的。这些特性使开发者能够很容易的把 AJAX 整合到 Web Services 中去。

 

       Google 开始使用 AJAX 进行新应用的开发之后, AJAX 开始被公众所注视, Google 在去年所开发出的重要的产品很多都是基于 AJAX 模型的,例如 Google Groups , Google Suggests 以及 Google Maps 。除了 Google 的产品之外, Amazon 公司在他们的搜索引擎的应用中同样使用了 AJAX 方法。

 

       客户端的 Web 应用程序中可以使用 AJAX ,客户端只需要等待用户自己直接调用 XMLHttpRequest 协议 API JavaScript 代码执行时间,这样,客户端只需要关注于编写代码和处理不同的 Web 浏览器。客户端可以使用一些最新开发出来的库来提供更加高级的 AJAX 服务,并且隐藏那些对不同浏览器的处理,这一方法用来取代使用纯 AJAX 开发同时还要处理不同浏览器的开发方式,这样的库有 DWR Prototype Sajax AJAX.NET

2.2 OGC GIS Web Services

       OGC 定义了一系列的包括数据模型、在线服务在内的 GIS 标准,这些标准已经广泛的应用于 GIS 领域, OGC 是一个非赢利的国际化标准制定组织,它领导进行对地理数据相关的操作和服务标准的制定。 OGC 在不同的方面都做出了很大的贡献,不管是在行业领域还是在学术界,这些贡献都是为了创建一个开放的可扩展的 GIS 软件编写的接口。

 

       GIS 有一系列的方法和环境来进行地理数据的显示、操作和分析,地理应用软件的特点之一就是需要整合和共享来自不同提供者的空间数据,来解决整合数据的问题, OGC 提出了 GIS 服务的发布标准定义。

 

       这些 Web Services 技术的出现克服了传统分布式对象技术的缺陷,并提供了在分布式网络环境下的跨平台跨语言的能力, GIS 服务将会在 Web Services 方法中被更多的实施,空间数据底层架构使得 GIS 厂商可以共享数据的存储,也使得应用程序能在分布式的环境下运行。 GIS 从根本上来说,主要涉及对来自不同厂商的不同数据源的数据和服务进行整合。 Web Services 架构建立了一套在服务和客户端之间的相互连接的标准,这里提到的客户端能很好的支持动态的数据整合,这也是创建空数据底层架构的关键。通过 Web Services ,不同厂商的分布式 GIS 服务能够通过运用能共同操作的标准通信协议把 GIS 服务动态的整合到 GIS 应用程序中。

 

       OGC 服务加入到 Web Services 中将会如下的好处,包括:

l          分布式:更容易的分发地理数据,使应用程序可以跨平台,跨操作系统,计算机语言等,具有平台和语言的中性特征。

 

l          整合性:对应用程序开发者来说,更容易的整合地理空间功能,更容易的整合数据到用户程序中,也很容易的通过 WSDL 文件和调用服务功能来创建客户端的程序。

 

l          基础结构:我们可以从很多创建出来的 Web Services 架构中得到很多好处,这些架构包括开发工具、服务器端应用程序、消息协议、安全架构、工作流的定义等等。

 

       最通用的,被广泛熟知的与 OGC GIS 服务相关的显示机制有: GIS Mapping Services GIS Data Services OGC Mapping Services 叫做 Web Map Services(WMS) ,把 Data Services 叫做 Web Feature Services(WFS) Web Coverage Services(WCS) WFS 提供要素模型的数据,这些数据是矢量格式的 GML(Geographic Markup Language) 进行编码的, WCS 提供场模型的数据,这些数据是栅格格式的。

 

3 相关工作模式

       目前有一些著名的致力于整合 Web 架构的项目或成果已经出现,比如 Web Services AJAX OGC ESRI GIS 使用了 Web Services OGC 实际上是一个进行实体标准定义、 GIS 服务界面发布标准定义的组织,而 Cubewerx Demis Intergraph 是商用 GIS 开发商,他们把 Web Services 加入到了他们的系统中。 Google Maps Ka-Map AJAX 模型整合到了 GIS 显示系统中, Ka-Map 是基于 AJAX Web 地图网站,他们使用了开源的 Web 地图开发工具, Ka-Map 使用 MapServer 地图服务器为 AJAX PHP 提供地图内容服务。上面提到的所有这些成果,都分别用到了 Web Services AJAX 技术。

 

       XML ECMAScript 脚本语言 E4X 是唯一使 AJAX Web Services 相互工作的脚本语言, E4X 是一种简单的扩展 JavaScript 语言,而 JavaScript 使得 XML 描述非常容易, E4X 其实是 JavaScript 语言的官方名称, ECMA(European Computer Manufacturers Association) 就是该制定该标准的机构,在 ECMA JavaScript 被规范定义为 E4X E4X 使用所有其他的一体化的 AJAX 技术,而不需要扩展。

 

       通过 E4X XML API 将不再是必要的 ( 例如: DOM 或者 SAX) XML 文档成为 JavaScript 所能理解的本地数据类型之一,你可以很容易的从 JavaScript 更新 XML 文档,这些 E4X 的性质可以用来创建从浏览器调用 Web Services ,但是支持 E4X 的浏览器只有 Mozilla1.8

 

       E4X 用来与 Web Services 进行交互,但是它同样只是 JavaScript 的一个扩展版本;如何在 SOAP 消息中发送请求的问题,以及如何对返回回来的 SOAP 消息进行操作也都难以解决,如果你在基于 AJAX 模型的 Web 应用使用了 E4X ,你很难将此应用到每一种浏览器。这也是另外一个缺陷。

 

       在我们的方法中,你不必要扩展任何 AJAX 相关技术,我们用到了 AJAX 中的所有的几种基本技术,我们的方法使开发者和用户能够容易的整合或者定制他们的应用。

 

4 架构:在 AJAX 模型中调用 Web Services

       在这一部分,我们描述通用的整合了 AJAX 的基于 Web Services 的浏览器应用程序架构。在这个架构中有两个主要的角色:客户端的显示和 GIS Web Services Web Services SOAP 协议调用, XML 就是通过 SOAP 来进行消息交换的。

4.1 通用整合架构

       如何在 AJAX 模型中调用 Web Services 呢?

 

图一 AJAX 应用程序调用 Web Services

       客户端浏览器向服务器代理 ( JSP 页面 ) 发送请求,该服务器代理依次向 Web Services 发送请求,这个过程是通过使用之前准备好的 Web Services Client Stubs 实现的, Web Services 返回给服务器代理,并呈现给客户端的浏览器。在下面我们将详细的解释这些步骤:

 

       首先,创建一个 XMLHttpRequest 对象用来进行一个远程描述性的调用;

- var http = new XMLHttpRequest();

 

然后,定义一个 URL 目标点来进行调用,该 URL 地址应该是本地的,这个中间代理服务用来给 GIS Web Services 发送一个合适的请求;

- var url = “proxy.jsp” ;

 

       在次,调用本地代理服务, URL 在上面已经给出了参数定义;

- http.open( “GET” , rul + ”?bbox = ” + bbox + … [other parameter-value pairs] …… )

 

proxy.jsp 就是一个中间代理服务页面,它用来抓取请求 ( HttpServletRequest ) 并且抓取响应 ( HttpServletResponse ) 对象,代理 JSP 仅仅包括一行代码来跟踪 HttpServletRequest HttpServletResponse 参数,这些参数从前一个页面而来,这些参数都是通过 XMLHttpRequest 协议来传递的。

       - jb.doTask( request,response )

 

       “请求”和“响应”参数来自用户交互的页面,这个首页包括一些 JavaScript XHTML CSS JSP 来抓取用户所给出的参数,它还用来在屏幕上显示返回结果。

 

       jb ”是一个 java 类的对象,该对象使用它的请求 - 响应句柄以及 Web Service client stubs 来创建合适的请求,请求 - 响应句柄也用来接收和分析从 GIS Web Services 返回回来的响应对象。

 

       在从 GIS Web Service 接收到返回对象之后,“ jb ”对象发送返回结果到首页的 XMLHttpRequest 对象;

- PrintWriter pw = reponse.getWriter() ;

- pw.write( response ) ;

      

       在用户界面页上的 XMLHttpRequest 对象通过如下的代码获得这个值;

- http.onreadstatechange = handleHttpResponse

 

这种通用的整合架构可以应用于各种 Web Services 中;由于每种 Web Services 的返回类型不同,还有他们所提供的 Service API 也不一样,所以你应该掌握他们的应用程序所定义的措施和在客户端的需求。

 

       4.2 中,我们将通过在 GIS 领域中重要的应用来验证这个整合框架的可用性和高效性。

 

4.2 应用 – Google Maps GIS 显示系统的整合

       这个整合的系统实际上是一组在 AJAX Web Services 之间进行调用的活动,这些活动是异步进行的,从用户端返回的对象也是异步的进行的。在 4.2.1 4.2.2 中的应用使用了图一所刻画的通用整合架构;本应用中的扩展了组成的地方会有一点小小的不同,这些不同来自那些根据服务提供方 API 所创建的服务对于请求的差异,还有在屏幕上显示返回数据的不同,但这些都是在实施过程中的差异。

 

4.2.1 Google AJAX WMS 的整合

       客户端活动创建的用户参数在并行处理中有两个不同的工作路径,这里的活动被浏览器通过 Google Mapping 工具所整合。 JavaScript 通过活动监听器 ( ActionLintensers ) Goolge Binding APIs 获得这些活动,并送第二层的对象,如图二所示。

 

       浏览器端的用户界面是一个 JSP 页面,该页面包括两个 JavaScript 参考类,其中一个是由 Google Map 对象所使用,另外一个是被 WMS 地图图片所使用,它被绑定到 Google Map 对象中。

 

       根据图二定义架构, Layer-2 创建的相互连接已经完成,对于 Layer-1 来说, Google Mapping 应用是通过 AJAX Web 应用模型和 XMLHttpRequest 协议实现的, Google 通过使用 XMLHttpRequest 和远程的浏览器中的 JavaScript 文件来掌控地图的创建。

 

       当我们在 WMS 中应用这种交互接口类型的时候,我们可以利用所有的 OGC 兼容的 WMS 函数,例如“ getMap ”,“ getCapabilities ”,“ getFeatureInfo ”,客户端将是一个瘦客户端;它只接收地图并且把地图放置在 Google Map 中。放置过程是通过一些高级 JavaScript 技术实现的。客户端不需要对地图进行渲染,也不需要创建地图图片。地图已经通过 WMS 返回,并且已经格式化成为了 JPEG 或者 PNG 或者 TIFF ,返回的类型在发送给 WMS 的“ getMap ”请求中作为参数给出了类型定义,这些图片在放置之前已经把这写不同的格式转换成为了 JavaScript 对象了。

 

 

图二 Google Maps OGC WMS 按照图一定义的架构进行整合

 

4.2.2 Google AJAX WFS 的整合

       WFS 提供了要素模型的数据,这些要素模型数据是通过 GML 编码的矢量格式数据, GML 是根据 OGC WFS 定义的,它通过 getFeature ”的参数得到。 GML 是以 XML 编码进行地理信息数据的交换和存储,它包括几何和属性特征。

 

图三 Google Maps OGC WFS 按照图一定义的架构进行整合

       在“ getFeature ”请求的响应中, GML 文件以 XML 编码通过 SOAP 进行封装并响应该请求。得到响应之后,客户端获得几何元素数据,最重要最普通的几何元素是点、线串、线环和多边形。 GML 是一个 OGC 对要素模型数据描述的一个标准。

 

       虽然 Google Mapping API 支持其中的两个:点和线串,但是其他的几何元素同样能够通过小的更新可转换成这两种类型。得到这些几何元素之后就可以在 Google Map 通过“ GPoints ”和“ GPolylines ”对象以及“ mapOverlay Google Map API 函数进行绘制和组合。

 

       通过设置返回的 GML 的非几何元素,以及通过 Google API 的“ GMaker ”对象可以实现该架构对 OGC WMS 服务“ getFeatureInfo ”函数的支持。所有这些任务都是通过运用 XMLHttpRequest API JavaScript 函数实现的。

 

       XMLHttpRequest 使用 DOM 来解析返回的 XML 结构,如果返回的数据对于服务器太大的话, DOM 解析器将抛出“ Out of Memory 的异常。为了克服这些 DOM Goolge Map 反馈的信息,我们使用了 Pull Parsing 方式来处理,在解析和得到 WFS 返回的 GML 文档之后,结果被写入 Web 浏览器;通过 JavaScript XMLHttpRequest 的响应 XML 调用,浏览器得到结果并对数据进行适当的修改后便在屏幕上进行显示。

 

5 未来的工作

       在未来,我们将继续处理该架构的一些问题。 Google Map 能够高速的提供地图数据,但是 WMS WFS Web Services 返回数据却比较慢,这其中的一些原因是由于地理数据的大小和特性造成的,另外一个原因是 CPU 时间消耗在生成地图图片的渲染算法上了。既然我们没有高性能的服务器和专有网络,我们就必须通过别的方法来提高性能。为了实现这个目标,我们将使用 WMS WFS 的流 (Streaming) 版本来得到组成图片的地理数据,相应地, GML 通过消息中间件进行处理,例如,印第安纳大学 CGL(Community Grids Lab.) NaradaBrokering NaradaBrokering 提供了 GIS 领域中一些重要的特性,这些特性有 QOS(Quality of Service) 和消息收发的安全机制,可靠的持续不断消息的存储的接口,通过 WS-Reliable 消息可以可靠的进行消息的分发,数据的容错处理,支持不同的通讯方式 (TCP UDP Multicast SSL RTP HTTP Discovery service to find nearest brokers / resources( 高效的路游 ) ) 。您可通过我们的官方网页 (GIS Research at Community Grids Lab, Project Web Site: http://www.crisisgrid.org/ ) 来获取我们最新的研究信息。

 

6 结论

       如果 GIS 显示客户端从桌面浏览器应用程序使用 Web Services ,如果 Web Services 能够响应够迅速,那么通过 AJAX 模型来调用 Web Services 执行效率也会得到提高。由于 AJAX Web Services 都使用了 XML 作为基础来进行请求 - 响应的通讯,他们之间是可以起到杠杆作用的,这使应用程序开发人员可以容易的把基于浏览器应用程序的 AJAX 整合到 Web Services 中。

 

       在摘取和显示那些在地图上通过点击选择出的特定要素的信息方面,仅仅只使用 Google Maps 会有一些不足;通过在一些应用程序中使用 GIS Web Services ,并且把这个部分分配到 WMS 中,可以消除掉 Google Map 的一些缺点,并且可以运行得更快。由于 Google Map API 使用了 DOM 解析器,如果数据对于服务器来说太大的话, DOM 将不可能进行解析,从 XML( GML) 描述的地理数据获取特征信息也将不可能;通过把 GIS Web Services 整合到显示应用中,通过使用 Pull Parsing 技术就可以消除这些缺陷。

 

       在我们的目标架构设计的方法中,我们没有更改或者扩展任何 AJAX 模型或者 Web Services 的技术,通过使用这些理论标准,你可以把任何 GIS Web Services 整合到应用程序的显示中去,而这只需要做一些应用程序规格上的扩充,例如,根据 Web Service API 创建请求,然后操控返回过来的对象。

 

7 感谢

       该项目得到了 NASA Earth-Sun System Technology Office Advanced Information Systems Technology Program 的支持,本项目是由国家科学基金会的 National Middleware 发起的。