首页 理论教育 设计与实现

设计与实现

时间:2022-01-20 理论教育 版权反馈
【摘要】:图7.3 GeoPW功能模块设计●算法注册中心:所有算法必须在算法注册中心注册成功后才能作为WPS进程发布到网上,供用户使用。GRASS是一款比较有影响力的开源GIS软件,它提供的矢量分析和栅格分析两类服务包含了100多个地理信息处理命令。
设计与实现_网络地理信息系统

7.2.2 GeoPW设计与实现

GeoPW能够配置提供网络环境下地球空间信息分析处理功能,按照开放互操作规范以服务的形式发布出来,实现地球空间信息的在线处理、远程计算资源和处理功能的共享和互操作。通过对不同类型的地球空间信息分析处理功能的配置和服务,GeoPW为网络环境下地球空间信息处理功能的共享和集成提供了平台。

7.2.2.1 系统结构

从OGC WPS规范标准以及系统要实现的功能来考虑,可以将GeoPW的体系结构设计为三个层次:客户层、服务层和数据层,其体系结构示意图见图7.3。

最上层为客户层,是用户与服务器端连接的纽带。客户端可以是Web浏览器,也可以是类似于Udig的Web服务客户端。用户通过浏览器直接发送请求,或者通过Web服务的客户端调用服务层提供的服务。在服务处理完成后,用户通过客户端获取处理后的结果。

中间层为服务层,是整个系统的核心部分,控制服务的实现。该层主要包括三大部分:

●处理引擎:控制整个WPS的服务流程。包括输入XML请求的解析、根据用户发送的请求进程查询算法注册中心、然后绑定算法实现部分、算法调用、执行结果XML的构建等。

img87

图7.3 GeoPW功能模块设计

●算法注册中心:所有算法必须在算法注册中心注册成功后才能作为WPS进程发布到网上,供用户使用。

●算法实现部分:根据用户发送的请求执行相关算法。本系统中绑定的算法包括以GRASS为底层的处理算法和以Geostar系列产品中GeoSurf为底层的处理算法。

7.2.2.2 服务粒度

服务粒度就是指一个服务包含的功能大小,有粗粒度服务和细粒度服务之分。细粒度的服务(fine-grained)提供相对较小的功能单元,或交换较少量的数据。完成某个复杂的功能往往需要编制大量细粒度的服务,通过多次的服务请求交互才能实现。相反,粗粒度的服务(coarse-grained)则是在一个抽象的接口中封装了大块的业务/技术能力,减少服务请求交互的次数,可以提高服务的效率,但不能灵活更改以适应需求的变化。因此,GeoPW中服务粒度的设计需要从以下三个方面权衡考虑:

(1)重用性。重用性就是指服务能够应用于不同上下文的能力,通过重用可以降低开发维护成本,缩短应用交付周期,提升服务质量等。粒度的大小直接影响到服务的可重用性,细粒度的服务更容易被重用。因为随着粒度的增加,更多的上下文信息和业务规范被嵌入到业务逻辑中,服务变得具有特定的业务意义。

(2)灵活性。灵活性是指能够容易因情形作出改变的能力。细粒度的服务可以更容易地组装,为业务流程的改变提供更大的灵活性。但是,灵活性太大将会导致大量的细粒度服务,从而带来昂贵的开发成本,维护也因此变得更困难。因此,必须要同时考虑到业务流程的灵活性和后台服务的良好组织,选择适中粒度的服务。

(3)性能。性能也就是指服务执行的效率,服务粒度越粗,意味着包含的功能越多,其业务逻辑也会越复杂,网络延迟就会增加,从而影响到和客户端的交互。而服务粒度越细,虽然单个服务的执行效率很高,但是完成某一项业务任务所需要调用的服务次数很多,而且服务都是远程调用的,从而会大大增加性能开销。因此,为了保证服务的性能可控,一方面需要限制服务调用的次数和复杂度,即粒度不能太细;另一方面需要限制服务包含的功能范围和复杂度,即服务粒度不能太粗。需要二者折中妥协。

网络处理服务中各原子服务都是独立的模块,它们可以独立地发布到网上,并被用户动态调用,也可以和其他的原子服务组合,形成服务链,来实现复杂的空间信息处理操作。如果原子服务实现的功能太细,则需要提供很多个原子服务组合成服务链,来实现复杂的模型;如果原子服务实现的功能太多,又会导致各模块不易于组合,服务的灵活性、可重用性和易用性都会大打折扣。

怎样如何做到对服务粒度的合理划分呢?为了解决这一问题,GeoPW借助了Arc-GIS及GRASS对GIS处理功能的划分标准。Arc GIS作为应用最为广泛的商业GIS软件,提供了较常用的200多个空间处理功能,这些功能被划分为20多个大类。GRASS是一款比较有影响力的开源GIS软件,它提供的矢量分析和栅格分析两类服务包含了100多个地理信息处理命令。这两款软件在GIS功能粒度的划分上具有一定的代表性,其提供的功能模块基本上能方便地满足用户的各种GIS数据处理需求,所以其能够为原子服务的粒度划分提供参考。

7.2.2.3 软件复用

传统的桌面GIS软件已经实现了很多的分析功能,并且这些功能是可以重复利用的。如果每个功能在封装服务时,都重新编写服务组件,会造成不必要的冗余。通常,同一个GIS软件的处理算法共享相同的运行环境,例如相同的数据管理、数据操作方式、环境变量的设置等。进行服务的封装时,如果对一个GIS软件的某个分析算法实现了封装,封装流程实际上同时为该软件的其他空间信息处理功能算法提供了一个服务封装框架。为了提高编程的效率,便于程序的维护,从软件设计的角度考虑,可以对同一GIS软件提供的众多分析算法功能使用同一套框架,而将与单个算法相关的细节通过配置文件或继承子类来实现,体现了软件设计模式里模板方法(Template Method)的理念。

以GRASS为例,GRASS通过命令行来实现各种GIS分析处理操作。本系统中采用配置文件的方式来实现以GRASS为底层的服务。每个算法通过XML脚本写到一个单独的配置文件中,然后提供一个统一的框架类来读取配置文件,自动生成进程调用对应的命令行脚本,实现算法的调用。这种通过读取配置文件来实现算法的方法,可以大大提高开发效率,避免了代码的冗余,并且降低了二次开发的难度。服务提供者不需要再修改代码,只要知道某个算法在GRASS中是如何操作的,通过建立相应的配置文件,就能提供新的空间信息处理进程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈