基于ArcGIS API for Flex的供水调度工程可视化的研究

2016-05-30 10:48闵俊胡瑞鹏
软件工程 2016年10期
关键词:控件图层客户端

闵俊 胡瑞鹏

摘 要:本文引入ArcGIS Server平台,使用具备创建高交互性、富客户端特点的Flex技术,研究并设计三层体系结构的供水调度可视化系统。该系统集成各专题模型及相应的计算软件模型,为供水调度系统提供可视化的操作平台,从而方便管理和维护各模型参数及运行结果,实现地图数据和工程业务数据信息的显示、敏感信息的地图图层显示或隐藏、工程问题线路的查询、问题线路的信息查阅,以及专题地图的制作等功能。

关键词:ArcGIS API for Flex;ArcGIS Server;可视化;供水调度

中图分类号:TP391.9 文献标识码:A

1 引言(Introduction)

当前,伴随着实时通讯技术,网络技术、可视化技术、多媒体技术地不断发展,可视化在水利行业的需求也日益凸显其重要性以及高标准。当前,大多数可视化展示系统一般都具备如下特点:直观显示和归纳海量数据;关联数据集;多维度显示;界面友好。利用现有的GIS技术完全可以实现从单调、枯燥的数据处理、查询、专题地图制作到空间分析、建模和三维仿真等,从而更加清晰、直观地表现水资源的时空状况及规律,为决策者提供决策支持[1]。

本文引入ArcGIS Server技术平台,使用具备创建高交互性和富客户端特征的Flex技术,重点研究并设计出三层体系结构的供水调度可视化系统。

2 ArcGIS API for Flex(ArcGIS API for Flex)

ArcGIS API for Flex是ESRI推出的用于富互联网应用程序RIA(Rich Internet Applications)开发的WebGIS客户端开发包,能够通过利用ArcGIS Server自带资源,包括地图服务、地址服务、要素服务和地理处理服务及Flex组件,其最大优点就是运行速度快,能够创建出交互性非常良好和体验非常丰富的Web应用[2]。

ArcGIS Server是一个便于构建集中管理且支持多用户的企业级地理信息系统应用的综合开发平台。它不仅仅提供了丰富的地理信息系统功能以便于开发者利用它来创建并配置Web应用及服务、基于.NET和J2EE标准的Web服务器上的企业应用,如EJB,还可以用C/S的模式访问桌面应用。ArcGIS Server的管理由ArcGIS Desktop负责,可以通过互联网Internet或局域网来访问。ArcGIS Server 9.3版还增加了Rest接口可用于发布GIS服务,所有的资源和操作都可由Rest API实现,当然这些资源和操作的访问都必须通过ArcGIS Server发布的地理信息系统服务的URL(Uniform Resource Locator,统一资源定位器)得到[3]。

Flex是Adobe公司推出的,基于其专有的Macromedia Flash平台,并且涵盖了支持RIA开发和部署的一系列技术集合。通过Flex技术,开发人员可以将RIA程序编译成Flash文件,运行在装有AdobeFlash Player软件的客户端浏览器中。Flex采用的是GUI界面开发,使用MXML语言,并提供多种组件,可用于实现包括Web Service、远程对象、Drag and Drop、动画和互动界面等功能,而且还能针对于诸如PHP、ASP、JSP等的HTML应用在每个请求时都需要执行服务器端的模板,由于客户端只需要载入一次,因此Flex应用程的工作流程被极大地得以改善[4]。ESRI公司开发的ArcGIS API for Flex很好地结合了Flex技术,从而给Flex在GIS领域的应用带来了新的机遇。

3 供水调度可视化系统体系(Visualization system

of water supply scheduling)

系统基于SOA软件体系构架进行设计,分为数据层、服务器层和应用层的三层构建模式,如图1所示。应用层基于Flex客户端进行开发,实现客户端应用;服务器层包括ArcGIS Server、Web Server、XI;数据层基于SQL Server 2008和ArcSDE实现地理数据和工程业务数据一体化存储和管理[5]。

(1)应用层

应用层的功能是响应Flex富客户端请求,并根据用户请求类型做出响应,它是采用ArcGIS API for Flex和Flex Framework进行设计及实现的,其中Flex客户端对外有两个数据接口,一个是REST,负责连接ArcGIS Server数据源;另一个是Servlet,负责连接Web Server和XI组件的数据。

(2)服务层

服务层包括两个服务器,一个是ArcGIS服务器,另一个是Web服务器。ArcGIS服务器是通过ArcGIS API for Flex访问Flex地图数据中的URL地址,如ESRI公司对外提供的数据源URL地址为http://server.arcgisonline/ArcGIS/rest/services/ESRI_StreetMap_world_2D/MapServer,本地端需要发布的数据可以存放在本地服务器中,URL地址为http://192.168.3.18:8399/arcgis/rest/services/all/mapserver。所以在客户端,只需访问这两个地址,即可对地图数据进行操作。

Web服务器具有开放性接口,可用于接收来自于客户通过浏览发送过来的请求,并根据客户请求得到来自于从ArcGIS服务器中的相应地图服务对象,与此同时还可直接和后台数据库交互获得信息。Web服务器多作为备用服务器,通过项目的ID值和Flex连接,从而实现数据库连接、文件上传、图片显示等诸多功能。本文中设计的系统所需数据都可以通过Web服务器到其他系统中获取,实现了资源共享[4]。

在服务层,还可包括XI(Exchange Infrastructure,交互基础设施)组件:XI采用面向服务的体系架构,利用各种开放标准,支持多种通信方式,把SAP和非SAP无缝地集成到一起。本系统除了需要地图数据,还有一些工程业务方面的数据,工程数据就采用从XI中获取,XI向外提供XML形式的接口,通过Web Server实现,所以系统采用XI组件作为数据源[5]。

(3)数据层

该系统中的数据既包括地图数据,同时还有工程业务方面的数据,是基于SQL Server 2008和ArcSDE实现地理数据和工程业务数据一体化存储和管理。

a.地图数据

ArcGIS API for Flex提供资源是借助地图服务形式,通过REST服务可实现在多个客户端间共享资源,所以确保全部客户端均能访问到共有资源。使用ArcGIS服务器上的资源服务时,还能与使用本地资源一样对它进行方便快捷的访问,比如,当访问ArcGIS服务器上的地图服务时,地图文档和地图数据就像存储在本地主机上一样。ArcGIS服务器可以提供的服务类型很多,主要包括Map service、Geocode service、Geodata service、Geometry service、GeoProcessing service、Globe service,以及Image service等。每一种服务都要有对应的资源,比如Map service对应的GIS资源就是.mxd或者.pmf格式的地图文件。

在本文所设计的系统中,要实现Map service功能,所需的地图数据主要包括动态地图数据图层和瓦片图层。其中瓦片图层当作底图使用,可以直接用ESRI公司提供的现成的在线数据[6]。如行政区划图的URL地址为http://server.arcgisonline.com/arcgis/rest/services/esri_streetmap_world_2d/mapserver。地形图的URL地址为http://server.arcgisonline.com/arcgis/rest/services/world_topo_map/mapserver。影像地图的URL地址为http://server.arcgisonline.com/arcgis/rest/services/esri_imagery_world_2d/mapserver。

动态地图数据图层主要包括工程所在地的区划图、供水线路图、水电站图等,数据存放在本地服务器上,其URL地址为http://192.168.3.18:8399/arcgis/rest/services/all/mapserver。

b.工程业务数据

本系统是中还涉及工程业务方面的数据,主要包括项目概要信息、进度、质量、成本、施工方、监理方等。这些数据可直接存放在服务器端,可以通过Web Server方式,从XI中实时获取。要实现工程业务数据的实时提取,采用的方法非常简单,仅需在Flex中使用HTTPService标签就可以实现,HTTPService标签的格式为,其中URL为服务器地址。

4 供水调度可视化系统主要功能设计与实现(Design

and implementation of the visualization system

of water supply scheduling)

本系统集成各专题模型及相应的计算软件模型,为供水调度系统提供可视化的操作平台,从而方便管理和维护各模型参数及运行结果,实现地图数据和工程业务数据信息的显示、敏感信息的地图图层显示或隐藏、工程问题线路的查询、问题线路的信息查阅和专题地图的制作等[7]。

(1)信息显示

供水工程具有典型的空间分布特征,所以供水调度可视化系统必须具备常用的地图操作功能,如地图的缩放、全图显示、漫游等,此外还需具有鹰眼功能,便于用户在操作地图时更方便定位到相应的位置,从而能更好地查看和监测。

该项功能的实现方法表述如下:利用ArcGISTiledMap

ServiceLayer标签来获取系统瓦片图层的地图数据服务,对应的代码是url="http://server.arcgisonline.com/ArcGIS/rest/services/ERRI_StreetMap_World_2D/MapServer"/>;使用ArcGISDynamicMapServiceLayer标签来获取系统动态地图数据图层的地图数据服务,对应的代码是。需要注意的是,必须让ArcGISDynamicMapServiceLayer标签放置在ArcGISDynamicMapServiceLayer标签的前面,因为瓦片图层是当作底图来显示的,而动态地图数据图层是叠加在瓦片图层上显示的。另外还可以用Extent标签来控制地图可视化的范围。

本系统动态图层和瓦片图层叠加后显示的效果如图2所示。

(2)图层显示控制

由于系统数据量大且繁杂,所以在系统功能实现时使用图层控制功能对系统数据进行控制及管理,为了突出用户所感兴趣的图层信息,需要有针对性地显示或隐藏相应图层。

ArcGIS API for Flex并没有提供现成的TOC控件(TOC控件能直接对图层进行显示控制),但是在本系统中创建了一个TOC控件。实现方法:首先需要新建一个LayersOnandOff.mxml网页,在该网页上添加Map控件并设置好ArcGISDynamicMapServiceLayer标签的属性;再添加一个专门用来控制地图切换显示的ComboBox控件,让ArcGISDynamicMapServiceLayer标签的URL属性的值困绑定ComboBox控件的选择值,这样当ComboBox控件的选择发生改变时,地图也会根据ArcGISDynamicMapServiceLayer标签的URL的值进行切换。对应的主要代码如下:

(3)专题图制作

在供水调度工程可视化系统中,必要的专题图,如单值专题图、统计专题图等对于表达和展示空间对象专题信息就显得非常重要。虽然ArcGIS API for Flex本身并不提供制作专题图的控件,但可以利用Flex的Chart组件来实现专题地图的设计与制作。其实现方法主要为:首先添加一个Flex的Chart组件,用它的Symbol来渲染Graphic,再将渲染后的Graphic插入到图层GraphicLayer中。实现的主要代码如下:

(4)工程问题线路查询显示

在供水调度系统中,经常需要查询一些问题线路,并实时查询到该工程线路的基本信息,以提供给决策者和技术部门及时拿出决策和解决方案。本系统采用高亮显示问题线路的方法来解决这个问题,效果如图3所示。

该功能的实现方法:首先找到存在问题的线路,并且将问题线路做渲染Symbol来标记,再将渲染后的Graphic进行高亮显示。当查询到问题线路后,要将查询到的地理元素高亮显示则需要esri:GraphicLayer。GraphicLayer图层的实现方法:首先新建一个IdentifyTest.mxml网页,在网页中添加一各Map控件,并设置ArcGISDynamicServiceLayer标签的属性,为其添加一个complete事件,complete事件就是用来实现当地图载入完成后获取地图的图层名称;然后在GraphicsLayer中添加一个是用于当有元素添加到GraphicsLayer时设置元素的显示样式的symbolFunction功能;再用esri:draw控件绘制出点、线等要素,当绘图完成后执行drawEnd的drawEndHandler(event)方法,并且在drawEndHandler(event)方法里再添加一个用以实现将遍历查询结果添加到Graphicslayer进行高亮显示的esri:IdentifyTask控件。其主要实现代码如下:

"http://192.168.3.18:8399/arcgis/rest/services/all/mapserver" complete="mapHandler(event)"/>

解决了这两个问题后,要实现问题线路信息的显示就可以用ArcGIS API for Flex本身提供的Infowindow组件。Infowindow能提供在Map上弹出信息提示的功能,而且当定义一个Map时,Map就会自动生成一个Infowindow,Infowindow使用的重点就在于设置它的content属性,即是Infowindow窗口中的信息内容。主要的实现方法:首先新建一个showInfoWindow.mxml网页,该网页的主要功能有两个,第一个是实现从动态地图数据图层的数据读取线路数据显示到ArcGISTiledMapServiceLayer的ESRI_StreetMap_World_2D的地图上,第二个是实现当鼠标点击线路时显示该线路的基本信息。在新建的页面中添加Map控件,以及用来显示ESRI_StreetMap_World_2D的ArcGISTiledMapServiceLayer和用来显示线路的LinesLayer,主要代码如下:

再定义鼠标点击的MouseUp事件方法function MouseUpHandler(event:MouseUp)实现线路信息的显示,显示信息就用Map控件的Infowindow组件,而且对Infowindow进行设置,添加LinesInfo.mxml文件用来作为Infowindow的content内容。

5 结论(Conclusion)

本文基于ArcGIS Server平台,引入能够创建高交互性、富客户端的Flex技术,使用XI组件作为数据集成中间件集成GIS数据和本地工程业务数据库,研究并设计三层体系结构的供水调度可视化系统,最终实现了地图数据和工程业务数据信息的叠加显示、敏感信息的地图图层显示或隐藏、工程问题线路的查询、问题线路的信息查阅,以及专题地图的制作等功能。由于使用了Flex技术,本系统极大地减少了与服务器之间的通信次数,减少了服务器的负荷,提高了响应速度,并且具有强交互性,强表现力,界面友好且丰富,极大程度地挖掘和发挥空间数据的效用。

参考文献(References)

[1] Cheng Peng,Wu Huarui,Shi Xiaoxia.Geo-visualization of agricultural products price data based on webGIS[J].Applied Mechanics and Materials,2014:1899-1902.

[2] Cheng Qianwen,Zhou Lei,Cheng Honghua.Design method for dynamic map symbols based on RIA environment[J].Applied Mechanics and Materials,2013:984-988.

[3] CHEN Shicheng.Design and Implementation of WebGIS Framework Based on Flex and ArcGIS Server[J].Geospatial Information,2014(02):109-111.

[4] ESRI公司.ArcGIS API for Flex在线帮助[EB/OL].http://resources.esri.com/help/9.3/arcgisserver/apis/flex/help/index.html.

[5] 陈光炎,陈松乔.基于ArcGIS API for Flex的污染源WebGIS研究[J].中国环境管理,2011(01):29-32.

[6] 豆丁网.API For FLEX教程,互联网文档资源http://www.docin.com/p-300035939.html.

[7] 冯亚丽,等.基于XI的SAP系统与外围系统集成[J].计算机系统应用,2012,21(2):9-12.

[8] 胡瑞鹏,王汉东,黄会勇.基于WebGIS的南水北调中线水量调度信息查询系统设计[J].人民长江,2014,(23):109-111.

作者简介:

闵 俊(1978-),男,本科,助理工程师.研究领域:软件开发.

胡瑞鹏(1976-),男,硕士,讲师.研究领域:GIS应用.

猜你喜欢
控件图层客户端
关于.net控件数组的探讨
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
巧用混合图层 制作抽象动感森林
图层法在地理区域图读图中的应用
跟我学添加真实的光照效果
ASP.NET服务器端验证控件的使用
浅析“递层优化法”在矿井制图中的应用
客户端空间数据缓存策略