閔俊 胡瑞鵬



摘 要:本文引入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標簽的格式為
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標簽來獲取系統動態地圖數據圖層的地圖數據服務,對應的代碼是
本系統動態圖層和瓦片圖層疊加后顯示的效果如圖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.
作者簡介:
閔 ?。?978-),男,本科,助理工程師.研究領域:軟件開發.
胡瑞鵬(1976-),男,碩士,講師.研究領域:GIS應用.