賈 靜,耿 襯
(江西理工大學(xué)建筑與測(cè)繪工程學(xué)院,江西贛州341000)
基于ArcGIS API for Flex的Web應(yīng)用初探
賈 靜,耿 襯
(江西理工大學(xué)建筑與測(cè)繪工程學(xué)院,江西贛州341000)
ArcGISFlex API是ArcGIS在RIA領(lǐng)域的第一個(gè)產(chǎn)品,因此選擇了最為成熟的Flex/Flash平臺(tái),使用ArcGISFlex API可以開發(fā)出具有豐富地圖功能的互聯(lián)網(wǎng)應(yīng)用,包括瀏覽器中的Web應(yīng)用或者運(yùn)行于桌面的AIR應(yīng)用。主要介紹了ArcGIS Flex API的主要對(duì)象和功能組件的使用;如何發(fā)布一個(gè)基于Rest的ArcGIS Server地圖服務(wù);開發(fā)時(shí)如何調(diào)用服務(wù)。
ArcGIS Flex API;REST;Web應(yīng)用
隨著Internet的發(fā)展,地理信息系統(tǒng)正在逐漸地走進(jìn)人們的視野,成為當(dāng)今社會(huì)的熱點(diǎn),國(guó)內(nèi)外的 GIS廠商都對(duì) WebGIS進(jìn)行研究和開發(fā),并發(fā)布各自的產(chǎn)品,ESRI當(dāng)然也不例外。在這個(gè)Web的時(shí)代,ArcGIS Server自然就成了ArcGIS產(chǎn)品核心,為了幫助用戶開發(fā)各種應(yīng)用程序,訪問ArcGISServer提供的各類服務(wù),ESRI公司推出了一系列的客戶端應(yīng)用開發(fā)框架,包括ADF、ArcGISServer JavaScriptAPI、ArcGISAPIfor Flex、ArcGIS API for M icrosoft SilverLight等?;?ArcGIS Server,使用ArcGIS API for Flex可以建立漂亮的富互聯(lián)網(wǎng)應(yīng)用程序Rich InternetApplications(RIAs),可以使ArcGIS提供的各種資源(如Map、GP模型)和Flex提供的組件(如Grid、Chart)相結(jié)合,構(gòu)建表現(xiàn)出色、交互體驗(yàn)良好的Web應(yīng)用;而且其開發(fā)環(huán)境很容易搭建,在開發(fā)的時(shí)候,開發(fā)人員甚至不需要安裝ArcGIS Server,ESRI已經(jīng)準(zhǔn)備了很多在線Sample資源,ArcGIS APIfor Flex可以通過URL形式直接去訪問。宏觀上來看,客戶端應(yīng)用開發(fā)框架和RIA應(yīng)用會(huì)成為今后2年GIS發(fā)展的一個(gè)趨勢(shì)。
1.1 RIA的概念
RIA(Rich InternetApplications)是富互聯(lián)網(wǎng)應(yīng)用程序的縮寫,是新一代網(wǎng)絡(luò)應(yīng)用程序,概念最早是由Macromedia公司在2002年提出的。它將桌面程序的表現(xiàn)力與瀏覽器的程序方便、快捷結(jié)合在一起,具有豐富的數(shù)據(jù)模型可以將部分原本需要在后臺(tái)程序處理的問題轉(zhuǎn)移到客戶端,使數(shù)據(jù)能夠被緩存在客戶端,從而可以實(shí)現(xiàn)一個(gè)比基于HTML的響應(yīng)速度更快、且數(shù)據(jù)往返于服務(wù)器的次數(shù)更少的用戶界面。RIA技術(shù)提供了比HTML更為豐富的界面表現(xiàn)元素,密集、響應(yīng)速度快和圖形豐富的頁(yè)面元素與數(shù)據(jù)模型結(jié)合在一起,為用戶提供好的使用體驗(yàn)。
RIA相比傳統(tǒng)Web優(yōu)勢(shì)在于:表現(xiàn)力豐富、網(wǎng)絡(luò)效率高、交互能力強(qiáng)、面向操作系統(tǒng)和瀏覽器透明、沙箱提供更可靠的安全性和易于與現(xiàn)有的系統(tǒng)集成;其局限性在于客戶端引擎需要下載和安裝,目前難以做SEO[1]。
目前RIA主流的開發(fā)技術(shù)有:HTML5、AJAX、Flash/Flex、Silverlight、JAVA FX,其中Flex是Adobe公司開發(fā)的支持RIA開發(fā)和部署的技術(shù)產(chǎn)品,主要是面向企業(yè)級(jí)的應(yīng)用。
1.2 Flex的概念
Adobe Flex是支持RIA的開發(fā)和部署一系列發(fā)展中的技術(shù)和產(chǎn)品線的概括詞,包括the Flex Framework、Flex Builder 2、Flex Enterprise Services 2等。
傳統(tǒng)的程序員在開發(fā)動(dòng)畫應(yīng)用方面存在困難,F(xiàn)LEX試圖通過提供一個(gè)程序員們已經(jīng)熟知的工作流和編程模型,讓程序員更快更簡(jiǎn)單地開發(fā)動(dòng)畫及RIA應(yīng)用[2]。在多層式開發(fā)模型中,F(xiàn)LEX應(yīng)用屬于表現(xiàn)層,它是Java web container或者 .net server的一個(gè)應(yīng)用,根據(jù).mxm l文件(純粹的xm l描述文件和Actionscript)產(chǎn)生相應(yīng)得.sw f文件,傳送到客戶端,由客戶端的flash player或者shockwave player解釋執(zhí)行,給用戶以豐富的客戶體驗(yàn)。成功案例有:QQ農(nóng)場(chǎng),易貝購(gòu)物。
1.3 REST的概念
REST(Representational State Transfer)是代表狀態(tài)傳輸?shù)目s寫,它代表了分布式超媒體系統(tǒng)的體系結(jié)構(gòu)風(fēng)格,它是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開發(fā)方式,可以降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。
REST本身只是為分布式超媒體系統(tǒng)設(shè)計(jì)的一種架構(gòu)風(fēng)格,而不是標(biāo)準(zhǔn)。它結(jié)合了一系列的規(guī)范,形成了一種新的基于Web的架構(gòu)風(fēng)格:
1)資源通過 URL來制定和操作。網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource),每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)符(resource identifier)即URL。
2)對(duì)資源的操作包括獲取、創(chuàng)建、修改和刪除,這些操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。
3)連接時(shí)無狀態(tài)的,即從客戶到服務(wù)器的每個(gè)request都包含理解該request所必須的所有信息,客戶端和服務(wù)器端不必保存對(duì)方的詳細(xì)信息,服務(wù)器只需要處理當(dāng)前request,而不必了解所有的request歷史。
4)能夠利用Cache機(jī)制來提高性能。
Flex與 REST進(jìn)行結(jié)合是目前非常熱門的分布式系統(tǒng)解決方案之一?;贔lex+REST的WebGIS系統(tǒng)總體構(gòu)架相對(duì)于與傳統(tǒng)的 REST風(fēng)格構(gòu)架組成要簡(jiǎn)單些,只包括2個(gè)部分:ArcGISServer服務(wù)端和裝有FlashPlayer的瀏覽器端。服務(wù)器端采用 ArcGIS Server9.3或以上版本,通過ArcGISServerManager發(fā)布為REST服務(wù),在Flex Builder3.0中配置GIS服務(wù)的API環(huán)境,利用API進(jìn)行實(shí)例開發(fā),開發(fā)完成后進(jìn)行最終測(cè)試、發(fā)布。在ArcGIS Server上發(fā)布了地圖后,可以通過瀏覽器查看發(fā)布的服務(wù),只要在瀏覽器中輸入U(xiǎn)RL地址,就可以訪問ArcGIS Server的REST服務(wù)目錄,方便查看可用的地理信息系統(tǒng)網(wǎng)絡(luò)服務(wù),也可以獲取開發(fā)過程中的有用信息,在應(yīng)用程序開發(fā)過程中就可以使用這些服務(wù)[3]。具體的使用在后面會(huì)詳細(xì)介紹。
ArcGIS API for Flex是ArcGIS在RIA領(lǐng)域的第一個(gè)產(chǎn)品,開發(fā)運(yùn)行于瀏覽器中的Web應(yīng)用或桌面的AIR應(yīng)用,它專注于GIS功能的實(shí)現(xiàn)而不重復(fù)地創(chuàng)造組建,可以非常便捷地開發(fā)使用地圖功能和 REST接口提供的GIS查詢及分析功能的應(yīng)用程序。開發(fā)ArcGIS API forFlex的程序需要Flex環(huán)境的支持,分為Flex Builder獨(dú)立開發(fā)和Flex Builder Plugin(Eclipse插件版)。在新建工程的時(shí)候把下載的ArcGIS Server API for Flex添加到libaray path選項(xiàng)卡下,就可以開發(fā)應(yīng)用程序了。
2.1 Flex API中的基本概念
MapSerciceLayer對(duì)應(yīng)ArcGIS發(fā)布的地圖服務(wù),不同種類的地圖服務(wù)將會(huì)對(duì)應(yīng)不同的 MapSerciceLayer,其對(duì)應(yīng)關(guān)系如表1所示。
表1 M apSerciceLayer分類表
GraphicLayer與Graphic指客戶端的圖層,根據(jù)各種情況動(dòng)態(tài)地在客戶端實(shí)現(xiàn)一些符號(hào)化的幾何對(duì)象,Graphic是一個(gè)可視化的、可響應(yīng)鼠標(biāo)事件的客戶端要素,有3個(gè)很重要的屬性:geometry、symbol和attribute。
Geometry定義了幾何的形狀,一般有點(diǎn)(MapPoint)、多點(diǎn)(Multipoint)、多線段(Polyline)、多邊形(Polygon)和邊界范圍 (Extent)。
Symbol定義了Geometry的符號(hào)表現(xiàn)形式,一般有點(diǎn)符號(hào) (MarketSymbol)、線符號(hào) (LineSymbol)、面符號(hào) (FillSymbol),還有文字符號(hào) (TextSymbol)、信息提示符號(hào) (InfoSymbol)等其他符號(hào)幫助進(jìn)行其他信息的輔助表達(dá)。Attribute表示屬性[4]。
2.2 地圖功能組件的使用
1)Map組件。Map組件是ArcGISFlex API中唯一的可視化組件,ArcGIS Flex API中所有的操作和功能都會(huì)在Map中進(jìn)行。Map中包含各種Layer,大致分為2種,一種是對(duì)應(yīng)某個(gè)地圖服務(wù)的MapServiceLayer;另一種是用于繪制自定義要素的GraphicLayer。添加Map和Layer的代碼:
運(yùn)行效果截圖如圖1所示。
圖1 Map組件使用運(yùn)行截圖
控制地圖縮放的zoomSlider、地圖比例尺scaleBar以及ESRI的logo可以隱藏,zoomSlider和scaleBar除了可以被隱藏掉,還可以通過制定樣式來改變外觀。
以下CSS代碼將Map的zoomSlider移到了右邊:
還可以實(shí)現(xiàn)地圖四周的導(dǎo)航按鈕、地圖中心的十字符號(hào)、拉框縮放的方框樣式,Map有很靈活的可配置性,各種元素的外觀也很容易定制,如果有特殊的需要,Map也可以通過隱藏所有元素,來加上自己的內(nèi)容。
2)Navigation工具。Navigation工具提供了對(duì)Map進(jìn)行導(dǎo)航的諸多功能,它可以實(shí)現(xiàn)漫游、拉框放大、拉框縮小等類似ADF中Tool的功能和前一視圖、后一視圖、全圖等類似于ADF中Comm and 的功能。它并不是一個(gè)工具條,而是提供了一些功能,可以把Flex組件綁定到Navigation的功能上。Navigation中漫游、拉框放大、拉框縮小等工具條按鈕是綁定的,它借助Flex中的TggleButtonBar作為這些功能的宿主。
運(yùn)行效果截圖如圖2所示。
圖2 Navigation工具使用運(yùn)行截圖
Navigation中上級(jí)窗口、下級(jí)窗口、復(fù)位等功能和工具條綁定,上級(jí)窗口和下級(jí)窗口的按鈕并不總是可用的,若當(dāng)前視圖已經(jīng)是第一視圖時(shí),上級(jí)窗口按鈕失效,當(dāng)前視圖已經(jīng)是最后一個(gè)視圖時(shí),下級(jí)窗口按鈕失效。
3)Draw工具。Draw工具提供了在客戶端繪制各種幾何對(duì)象的功能,用一個(gè) ToggleButtonBar去綁定Draw工具的功能。
4)InfoWindow窗口。InfoWindow窗口主要提供了在Map上彈出信息提示的功能,定義一個(gè)Map的時(shí)候,Map會(huì)生成一個(gè)自帶的InfoWindow窗口,并放置在自己的infoWindow屬性中。下面代碼是實(shí)現(xiàn)在地圖上彈出一個(gè)InfoWindow,并在其中放上一個(gè)圖片:
效果如圖3所示。
圖3 Draw工具使用運(yùn)行截圖
InfoWindow使用的重點(diǎn)在于其content屬性,它是InfoWindow窗口中的信息內(nèi)容,對(duì)應(yīng)一個(gè)DisplayObject的對(duì)象,即任何Flex中的可視組件都可以放置于其中,其代碼如下:
用ArcGIS API for Flex開發(fā)的程序中Flex是前端展現(xiàn),后臺(tái)的連接通過ArcGIS Server REST Service完成,而且不需要在本機(jī)上安裝ArcGIS Server,只要通過網(wǎng)絡(luò)連接到其他機(jī)器上的ArcGIS Server即可訪問資源了。在Flex中可以將ArcGISServer的地圖和任務(wù)應(yīng)用到Web應(yīng)用程序中。
1)地圖的發(fā)布。對(duì)于應(yīng)用程序展現(xiàn)和操作需要的資源,可以通過GIS服務(wù)器發(fā)布,即地圖服務(wù)的發(fā)布?;赗ESTAPI的WebGIS應(yīng)用從ArcGISServer客戶端得到的地圖服務(wù)數(shù)據(jù)其實(shí)是由一些地圖服務(wù)圖層(包括ArcGISTiledMapServiceLayer、ArcGISD ynamicMapS-erviceLayer、ArcGISImageServiceLayer、ArcIMSMap ServiceLayer)組成的。每一個(gè)地圖服務(wù)層都通過URL對(duì)應(yīng)ArcGISServer中發(fā)布的一個(gè)Map Service,而每一個(gè)Map Service都是源自于一個(gè)地圖文檔(Map Document),擴(kuò)展名是*.mxd。
ArcGISServer提供了2種方法來發(fā)布空間服務(wù)。一種是利用ArcCatalog中的ArcGIS Server服務(wù)管理方式進(jìn)行發(fā)布;另一種是通過網(wǎng)頁(yè)形式的ArcGISServerManager方式進(jìn)行服務(wù)的發(fā)布與管理。采用第2種方式,可以擺脫ArcGIS的桌面環(huán)境,方便在遠(yuǎn)程發(fā)布服務(wù)。
在瀏覽器的地址欄中輸入:http://host:8099/arcgismanager/main/login.jsf,進(jìn)入登陸界面,輸入用戶名和密碼進(jìn)入發(fā)布主頁(yè)面,在服務(wù)器管理器中的Services選項(xiàng)卡,點(diǎn)擊“Add New Service”添加新的地圖發(fā)布。
地圖發(fā)布成功后,測(cè)試瀏覽Rest服務(wù),訪問ArcGIS Server的 REST服務(wù)目錄時(shí),URL地址是:http://< host>:8399/arcgis/rest/services,打開主頁(yè)面,點(diǎn)擊“Export Output”,可以查看該圖層的詳細(xì)信息。
2)在 Flex中調(diào)用該服務(wù)。在開發(fā)基于 Flex的ArcGIS應(yīng)用程序時(shí),用MXML和ActionScript3.0調(diào)用Flex API中的類編寫代碼來調(diào)用ArcGIS Server中的資源,只需要輸入該資源的URL地址。代碼如下:
運(yùn)行后就可以看到自己發(fā)布的地圖服務(wù)。需要注意的是資源的類型和圖層標(biāo)簽的類型相對(duì)應(yīng),如果資源是未緩存的動(dòng)態(tài)圖層,要使用
ArcGIS API for Flex使用起來比ADF框架更加輕巧,而且可以實(shí)現(xiàn)的功能很強(qiáng)大,可以與多種當(dāng)今主流技術(shù)交互,如 Javascript、ajax等。本文主要介紹了基于ArcGIS API for Flex框架開發(fā)Web應(yīng)用程序的初步實(shí)現(xiàn),介紹了關(guān)于ArcGIS API for Flex的初步認(rèn)識(shí),對(duì)于開發(fā)的平臺(tái)和涉及到的一些概念進(jìn)行了介紹,舉例說明了一些組件的使用,在此基礎(chǔ)上運(yùn)用基于ArcGIS Flex的API做進(jìn)一步的Web應(yīng)用開發(fā),同時(shí)還介紹了如何在ArcGISServer上發(fā)布基于Rest的地圖服務(wù),以及在Web應(yīng)用開發(fā)時(shí)如何使用自己發(fā)布的服務(wù)。本文只是關(guān)于基于ArcGIS API for Flex的Web應(yīng)用開發(fā)的基本入門介紹,在此基礎(chǔ)上可以利用 ArcGIS Flex的API開發(fā)出功能強(qiáng)大的Web應(yīng)用程序,并且可以充分結(jié)合Flex的動(dòng)畫效果,做出更炫的地圖界面。
[1] 李奇宇.基于構(gòu)件的RIA Web開發(fā)平臺(tái)研究[D].成都:電子科技大學(xué),2003
[2] 胡斌峰.基于Flex的WebGIS客戶端平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2011
[3] 袁煜鋒.基于Flex與REST的WebGIS研究[D].上海:華東師范大學(xué),2009
[4] http://help.arcgis.com/en/webapi/flex,2011-10-11.
[5] 楊占坡,楊銘,翁顧.Flex 3 RIA開發(fā)詳解與精深實(shí)踐[M].北京:清華大學(xué)出版社,2009
[6] YI Zheng.Evaluation of the RIA Technology Macromedia Flex for User-Centered Social Software.2006.5
[7] J.Duhl.Impact of Rich Internet Application White Paper,2003
Web Application Preliminary Studies Based on ArcGIS API for Flex
by JIA Jing
ArcGIS Flex API is first product in the field of RIA ArcGIS, so choose the most mature Flex/Flash platform.Using ArcGIS Flex API can develop the function of the map which has rich Internet applications,including the Web browser running in the desktop application or AIR apps.This article mainly introduced the ArcGIS Flex API's main object and the use of functional components,how to release a based on the ArcGIS server map services and development how to call service.
ArcGIS Flex API,REST,Web application
2011-10-11
項(xiàng)目來源:國(guó)家自然科學(xué)基金資助項(xiàng)目(40971234)。
P208
B
1672-4623(2012)03-0114-05
賈靜,碩士,主要研究方向?yàn)閃ebGIS應(yīng)用與開發(fā)。