《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 基于ArcGIS Flex API的校園電子地圖研究與實現(xiàn)
基于ArcGIS Flex API的校園電子地圖研究與實現(xiàn)
來源:微型機與應(yīng)用2014年第7期
姬英杰,徐 鵬,楊懷卿
(山西農(nóng)業(yè)大學(xué),山西 太谷 030801)
摘要: 將ArcGIS Server地圖服務(wù)、WebServer服務(wù)集成于Adobe Flash Builder 4下,研究開發(fā)了基于ArcGIS Flex API的校園電子地圖展示軟件。該軟件提供了山西某大學(xué)詳細(xì)的地圖信息,不僅擁有常規(guī)地圖導(dǎo)航、支持屬性模糊查詢空間要素等功能,而且還對任意兩個熱點間最短路徑分析功能進(jìn)行合理定制,對校園風(fēng)光和人文歷史的展示產(chǎn)生了很好的效果。
Abstract:
Key words :

摘  要: 將ArcGIS Server地圖服務(wù)、WebServer服務(wù)集成于Adobe Flash Builder 4下,研究開發(fā)了基于ArcGIS Flex API的校園電子地圖展示軟件。該軟件提供了山西某大學(xué)詳細(xì)的地圖信息,不僅擁有常規(guī)地圖導(dǎo)航、支持屬性模糊查詢空間要素等功能,而且還對任意兩個熱點間最短路徑分析功能進(jìn)行合理定制,對校園風(fēng)光和人文歷史的展示產(chǎn)生了很好的效果。
關(guān)鍵詞: WebGIS;ArcGIS Flex API;RIA;地圖控件;最短路徑分析

 隨著計算機技術(shù)的飛速發(fā)展,地理信息系統(tǒng)逐漸融入了人們生活的各個方面,作為其發(fā)展的必然趨勢之一的WebGIS也成為了諸多專家們所熱衷的研究領(lǐng)域。國內(nèi)外的GIS廠家都推出各自的WebGIS產(chǎn)品,ArcGIS Flex API就是一種基于ArcGIS Server的一種客戶端應(yīng)用開發(fā)框架。ArcGIS Flex API與Flash Builder 4結(jié)合可以構(gòu)建出表現(xiàn)出色、交互體驗良好的富互聯(lián)網(wǎng)程序(RIA)。傳統(tǒng)的WebGIS電子地圖采用HTML頁面形式,在傳輸數(shù)據(jù)量大、實時性要求比較高時會存在一定延時,嚴(yán)重影響界面操作效率;富互聯(lián)網(wǎng)程序(RIA)可將桌面程序的表現(xiàn)力與瀏覽器的程序方便、快捷結(jié)合在一起,具有豐富的數(shù)據(jù)模型可將原來在后臺程序處理的問題現(xiàn)在轉(zhuǎn)移到客戶端,使數(shù)據(jù)能夠被緩存在客戶端,從而實現(xiàn)一個比基于HTML的響應(yīng)速度更快、數(shù)據(jù)往返于服務(wù)器的次數(shù)更少的應(yīng)用程序[1]?;贏rcGIS Flex API的校園電子地圖軟件針對地圖展示提供了山西某高校詳盡的地圖信息,不僅可以屬性模糊查詢定位目標(biāo),準(zhǔn)確地對校園進(jìn)行長度和面積的量算,為校園規(guī)劃管理提供參考;而且還可以準(zhǔn)確地查找兩個關(guān)鍵點之間的最短路徑,為用戶進(jìn)行簡潔的路線指引。
1 環(huán)境的搭建
 首先,安裝ArcMap 10軟件,用于原始數(shù)據(jù)源處理;其次,完成ArcGIS Server 10軟件的安裝,作為整個應(yīng)用程序的GIS服務(wù)器,提供必要的地圖服務(wù)。ArcGIS相關(guān)軟件安裝完成后,進(jìn)行Microsoft Visual studio 2010和Microsoft SQL Server 2008的安裝;在VS2010環(huán)境下可以發(fā)布WebServer服務(wù)供前臺調(diào)用,Microsoft SQL Server 2008存儲數(shù)據(jù)庫。最后安裝Adobe Flash Builder4.0用于開發(fā)RIA。
2 服務(wù)為主體的開發(fā)流程
 整個軟件基于B/S架構(gòu)開發(fā),因此如何合理發(fā)布、配置和調(diào)用服務(wù)自然而然成為整個開發(fā)過程的核心工作。在整個開發(fā)過程中主要涉及到地圖服務(wù)和WebServer服務(wù)兩大類,基于ArcGIS Server發(fā)布的不同種類的地圖服務(wù)是電子地圖展示功能實現(xiàn)的基礎(chǔ),基于VS2010發(fā)布的WebServer服務(wù)是對客戶端管理員信息處理的后臺服務(wù)。服務(wù)為主體的開發(fā)流程如圖1所示。

3 基于ArcGIS Flex API地圖功能的實現(xiàn)
 作為一套基于Flex開發(fā)運行在瀏覽器端的地圖API,ArcGIS Flex API可以滿足一些GIS開發(fā)需求,如地圖瀏覽、多個專題圖層疊加、地圖符號的客戶端繪制、動態(tài)對象跟蹤顯示(車輛、飛機等)、運行GIS相關(guān)的空間分析模型、屬性條件查詢、空間條件查詢和編輯適量數(shù)據(jù)[2]。把ArcGIS Flex API類庫文件添加到新工程中的library path選項卡里,就可以開始開發(fā)工作?;贏rcGIS Flex API的校園電子地圖主要功能包括地圖導(dǎo)航功能、地圖面積和距離量算、空間要素查詢定位、最短路徑分析等;按功能發(fā)布了相應(yīng)的地圖服務(wù)和管理用戶信息的WebServer服務(wù)。
3.1 Map控件的使用
 Map控件可以說是整個WebGIS程序開發(fā)的核心,它是一個粗粒度的類,其中封裝了大量的細(xì)粒度接口,如地圖空間范圍、空間參考、圖層集合和比例級別等[2]。Map控件相當(dāng)于一個容器,可以包含多個地圖服務(wù)圖層,用來交互式瀏覽地圖。軟件設(shè)計中Map控件實現(xiàn)主要代碼如下。
<esri:Map id="mainMap" logoVisible="false"
mouseUp="mainMap_mouseUpHandler(event)
doubleClick="mainMap_doubleClickHandler(event)"
    mouseOver="mainMap_mouseOverHandler(event)"
extentChange="mainMap_extentChangeHandler(event)"
left="0" right="1" top="78" bottom="0"
    >
<!&mdash;用于顯示的動態(tài)地圖服務(wù)圖層-->
<esri:ArcGISDynamicMapServiceLayer
url="http://mypc/ArcGIS/rest/services/sxauGIS/MapServer" />
    <!&mdash;用于氣泡顯示的矢量服務(wù)圖層-->
<esri:FeatureLayer
    url="http://mypc/ArcGIS/rest/services/sxauFeatureLayer/
MapServer/0"
                   mode="selection"
                   id="myFeatureLayer"visible="false"
                   outFields="[imageSource,url,infor]"/>
<!&mdash;用于渲染查詢元素的圖層-->
<esri:GraphicsLayer id="myFindGraphicsLayer"  
            symbol="{baseSfs}"/>            
    &hellip;&hellip;
</esri:Map>
 id為mainMap的Map控件,其不僅包含了用于地圖直觀顯示的動態(tài)地圖服務(wù)圖層、用于氣泡顯示的矢量服務(wù)圖層,還包含了一系列作為客戶端渲染幾何矢量圖形(如查詢結(jié)果高亮顯示、路徑渲染等)載體的GraphicsLayer類型圖層。這些圖層為應(yīng)用程序地圖功能實現(xiàn)提供了有利的保障。
3.2 地圖導(dǎo)航功能
 NavigationTool是一個非可視化控件,常常要與界面控件結(jié)合,用于地圖的導(dǎo)航操作。由于Map控件內(nèi)部本身就集成了鼠標(biāo)滾輪放大、縮小及左鍵平移的功能;因此,在工具欄地圖導(dǎo)航功能添加了上一視圖、下一視圖(需對上下視圖不可用情況進(jìn)行處理)、全圖顯示作為補充。應(yīng)用程序工具欄如圖2所示。
首先定義NavigationTool控件實例,指定相關(guān)Map控件實例:
 <esri:NavigationTool id="navigationTool"map="{mainMap}"/>
 工具欄上3個導(dǎo)航功能實現(xiàn)方法類似,以全圖顯示(工具欄第3個)為例進(jìn)行說明,在其對應(yīng)的Image控件 實例單擊事件里添加如下代碼。
if(navigationTool.isFirstExtent==false&&this.initMapExtent!=this.mainMap.extent.extent)
    {
//調(diào)用NavigationTool全圖顯示方法
        navigationTool.zoomToFullExtent();
        this.initMapExtent=this.mainMap.extent.extent;
}
    else
    {
        Alert.show("當(dāng)前視圖已為全圖顯示!","提示");
    }
 單擊事件處理函數(shù)里對當(dāng)前地圖顯示狀態(tài)進(jìn)行了判斷,若不為全圖顯示狀態(tài)則設(shè)定為全圖顯示狀態(tài),為全圖顯示則彈框提示。
3.3 建筑物信息氣泡提示
 氣泡是一種把業(yè)務(wù)數(shù)據(jù)和地圖結(jié)合在一起的有效方式[2]。地圖控件(Map)提供了一個infoWindow屬性用來在地圖上顯示氣泡信息,氣泡內(nèi)容通過其infoWindowContent屬性控制,標(biāo)題則是由其infoWindow屬性下label次級屬性控制。軟件中的氣泡提示格式是對氣泡內(nèi)容進(jìn)行了定制(自定義LabelDataRenderer組件,包含建筑物名稱、建筑物圖片和相關(guān)網(wǎng)址鏈接3部分內(nèi)容,數(shù)據(jù)源則是通過對FeatureLayer服務(wù)圖層查詢得到,并在LabelDataRenderer實例加載時對實例屬性初始化),每次觸發(fā)氣泡提示實際上是目標(biāo)建筑物對infoWindow的infoWindowContent屬性重新賦值;建筑物氣泡提示包含了兩種類型:展示狀態(tài)下氣泡提示和管理員編輯狀態(tài)下氣泡提示。管理員登錄后可以對建筑物氣泡屬性進(jìn)行編輯并直接保存到后臺GIS服務(wù)器,如圖3所示。

 

 

3.4 模糊查詢建筑物中心定位
 實現(xiàn)建筑物名稱模糊查詢(全部建筑物名稱綁定到ComboBox可初步實現(xiàn))和建筑物查詢結(jié)果中心定位,如圖4所示。建筑物查詢采用QueryTask(可以執(zhí)行空間查詢,又可以執(zhí)行屬性查詢),會涉及到QueryTask、Query和FeatureSet 3個類。

 第一步,實例化QueryTask,url屬性指向?qū)⒁樵兊牡貓D服務(wù)圖層。
 <!&mdash;定義查詢?nèi)蝿?wù)-->
 <esri:QueryTask id="myQueryTask" url="http://mypc/ArcGIS/rest/services/sxauFeatureLayer/MapServer/0"/>
 第二步,在查詢按鈕單擊事件里設(shè)置搜索參數(shù)Query實例。
//屬性查詢條件
query.where="NAME="+"&prime;"+this.qText.textInput.text+"&prime;";
myQueryOutFieldArr=new Array();
myQueryOutFieldArr.push("NAME");
//指定返回的字段
query.outFields=myQueryOutFieldArr;
query.returnGeometry=true;
第三步,提交請求注冊處理函數(shù),渲染查詢結(jié)果到目標(biāo)圖層上。
/*提交注冊處理函數(shù),onNameQueryResult為結(jié)果回調(diào)函數(shù),onNameQueryFault是錯誤處理函數(shù)*/
myQueryTask.execute(query,newAsyncResponder(onNameQueryResult
,onNameQueryFault));
最后,onNameQueryResult函數(shù)中派發(fā)事件向主程序傳遞Graphic類型的數(shù)組,在主程序中將查詢結(jié)果添加到相應(yīng)的GraphicLayer圖層上,中心地位的功能則是參照查詢結(jié)果Graphic的extent屬性加入一定偏移量賦值給地圖控件的extent屬性,從而間接地達(dá)到查詢結(jié)果中心定位顯示。
3.5 距離測量和面積測量
 將距離測量和面積測量設(shè)計到了管理員權(quán)限范圍,它們屬于地圖空間分析的范疇,在客戶端完全實現(xiàn)不太現(xiàn)實,ArcGIS Flex API中GeometryService類提供了各種空間分析功能,客戶端請求服務(wù)器端,等待服務(wù)器端返回結(jié)果,最后計算完成事件,整個過程異步執(zhí)行。首先發(fā)布一個幾何服務(wù)(Geometry)供GeometryService類實例引用,設(shè)定距離所需參數(shù)、面積所需參數(shù)傳入GeometryService類實例的用于測距離(lengths)、用于測面積(areasAndLengths)方法,最后在GeometryService類實例中l(wèi)engthsComplete、areasAndLengthsComplete屬性處理函數(shù)里面獲取相對應(yīng)的測量結(jié)果。
3.6 關(guān)于起點終點的最短路徑分析
 最短路徑的求取問題是可以拓展為許多方面的最高效率問題,最短路徑不僅是指一般意義上的距離最短,還可以是時間最短、費用最少、線路利用率最高等標(biāo)準(zhǔn)[3]。針對展示功能設(shè)計了兩點間最短路徑分析,網(wǎng)絡(luò)數(shù)據(jù)集中邊權(quán)重屬性默認(rèn)長度字段即可。實現(xiàn)大致分為數(shù)據(jù)源處理,地圖服務(wù)發(fā)布和RouteTask類、RouteParameters類的實例相結(jié)合從而得到路徑。
 第一步,數(shù)據(jù)源處理(構(gòu)建網(wǎng)絡(luò)數(shù)據(jù)集以及建立地圖文檔)和地圖服務(wù)發(fā)布。
網(wǎng)絡(luò)數(shù)據(jù)集的優(yōu)劣性直接影響了后續(xù)路徑分析的正確與否,為了提高路徑分析正確率,采用一套科學(xué)的數(shù)據(jù)源規(guī)范化處理流程至關(guān)重要。數(shù)據(jù)源處理流程如圖5所示。

 在ArcMap10中新建地圖文檔,將網(wǎng)絡(luò)數(shù)據(jù)集加入該文檔中,并在文檔中新建路徑(Network Analyst模塊內(nèi)),把圖層精簡后,用作路徑分析地圖服務(wù)的數(shù)據(jù)源,效果如圖6所示。

 將處理后的數(shù)據(jù)源發(fā)布成用于路徑分析的地圖服務(wù)。
 第二步,RouteTask類和RouteParameters類的實例相結(jié)合得到路徑。
 RouteTask是一個非可視化的控件,可針對相應(yīng)地圖服務(wù)進(jìn)行最短路徑分析,可以根據(jù)提供的參數(shù)(RouteParameters類實例)求解得到相應(yīng)最短路徑。關(guān)于起點終點的最短路徑分析:將起點終點名稱作為查詢條件對網(wǎng)絡(luò)數(shù)據(jù)集端點圖層(一系列帶屬性端點)進(jìn)行查詢,把查詢結(jié)果賦值給stops屬性(RouteParameters子組件對應(yīng)路徑中??奎c屬性)即可,調(diào)用RouteTask實例中solve方法(需傳入RouteParameters實例)并在其solveComplete屬性的事件處理函數(shù)里渲染起點終點提示以及兩點間最短路徑。
3.7 管理員信息管理
 采用客戶端調(diào)用ASP.NET Web服務(wù)的方式對服務(wù)器端的關(guān)系數(shù)據(jù)庫(存有管理員信息)進(jìn)行增、刪、改操作。整個軟件界面狀態(tài)分為展示狀態(tài)和管理員登錄狀態(tài),管理員登錄狀態(tài)相比前者增加了測量和管理員信息編輯等模塊。
綜上所述,地圖服務(wù)和WebServer服務(wù)合理的發(fā)布和調(diào)用是基于ArcGIS Flex API電子地圖開發(fā)的基礎(chǔ),也是地圖功能實現(xiàn)的有力保障。這類便捷的開發(fā)方式必將長時間流行于WebGIS領(lǐng)域。
參考文獻(xiàn)
[1] 賈靜,耿襯.基于ArcGIS API for Flex的Web應(yīng)用初探[J].地理空間信息,2012(6):114-118.
[2] 賈慶雷,萬慶.ArcGIS Server開發(fā)指南&mdash;&mdash;基于Flex和 .NET[M].北京:科學(xué)出版社,2011.
[3] 高晟.基于ArcGIS對矢量數(shù)據(jù)模型的最短路徑分析[J].微型機與應(yīng)用,2011,36(15):84-87.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。