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

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

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

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

 

 

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

 第一步,實(shí)例化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實(shí)例。
//屬性查詢條件
query.where="NAME="+"&prime;"+this.qText.textInput.text+"&prime;";
myQueryOutFieldArr=new Array();
myQueryOutFieldArr.push("NAME");
//指定返回的字段
query.outFields=myQueryOutFieldArr;
query.returnGeometry=true;
第三步,提交請(qǐng)求注冊(cè)處理函數(shù),渲染查詢結(jié)果到目標(biāo)圖層上。
/*提交注冊(cè)處理函數(shù),onNameQueryResult為結(jié)果回調(diào)函數(shù),onNameQueryFault是錯(cuò)誤處理函數(shù)*/
myQueryTask.execute(query,newAsyncResponder(onNameQueryResult
,onNameQueryFault));
最后,onNameQueryResult函數(shù)中派發(fā)事件向主程序傳遞Graphic類型的數(shù)組,在主程序中將查詢結(jié)果添加到相應(yīng)的GraphicLayer圖層上,中心地位的功能則是參照查詢結(jié)果Graphic的extent屬性加入一定偏移量賦值給地圖控件的extent屬性,從而間接地達(dá)到查詢結(jié)果中心定位顯示。
3.5 距離測(cè)量和面積測(cè)量
 將距離測(cè)量和面積測(cè)量設(shè)計(jì)到了管理員權(quán)限范圍,它們屬于地圖空間分析的范疇,在客戶端完全實(shí)現(xiàn)不太現(xiàn)實(shí),ArcGIS Flex API中GeometryService類提供了各種空間分析功能,客戶端請(qǐng)求服務(wù)器端,等待服務(wù)器端返回結(jié)果,最后計(jì)算完成事件,整個(gè)過(guò)程異步執(zhí)行。首先發(fā)布一個(gè)幾何服務(wù)(Geometry)供GeometryService類實(shí)例引用,設(shè)定距離所需參數(shù)、面積所需參數(shù)傳入GeometryService類實(shí)例的用于測(cè)距離(lengths)、用于測(cè)面積(areasAndLengths)方法,最后在GeometryService類實(shí)例中l(wèi)engthsComplete、areasAndLengthsComplete屬性處理函數(shù)里面獲取相對(duì)應(yīng)的測(cè)量結(jié)果。
3.6 關(guān)于起點(diǎn)終點(diǎn)的最短路徑分析
 最短路徑的求取問(wèn)題是可以拓展為許多方面的最高效率問(wèn)題,最短路徑不僅是指一般意義上的距離最短,還可以是時(shí)間最短、費(fèi)用最少、線路利用率最高等標(biāo)準(zhǔn)[3]。針對(duì)展示功能設(shè)計(jì)了兩點(diǎn)間最短路徑分析,網(wǎng)絡(luò)數(shù)據(jù)集中邊權(quán)重屬性默認(rèn)長(zhǎng)度字段即可。實(shí)現(xiàn)大致分為數(shù)據(jù)源處理,地圖服務(wù)發(fā)布和RouteTask類、RouteParameters類的實(shí)例相結(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)),把圖層精簡(jiǎn)后,用作路徑分析地圖服務(wù)的數(shù)據(jù)源,效果如圖6所示。

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

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