朱 明,班 媛
(1. 廣西基礎(chǔ)地理信息中心,廣西 南寧 530023; 2.廣西遙感信息測(cè)繪院,廣西 南寧 530023)
傳統(tǒng)的旅游信息系統(tǒng)通常以圖文形式提供旅游信息,雖然可以展示旅游景區(qū)景點(diǎn)的風(fēng)貌,但是無(wú)法反映旅游景區(qū)景點(diǎn)的地理位置關(guān)系,不能有效地解決游客尋找景點(diǎn)、搜索路徑、查詢周邊服務(wù)設(shè)施等問(wèn)題[1,2]。而將旅游信息系統(tǒng)與GIS相結(jié)合,除滿足傳統(tǒng)旅游信息需要外,還可以提供路徑搜索、自駕導(dǎo)航、周邊查詢等功能,提高了旅游信息系統(tǒng)的應(yīng)用效能。
Flex是用于構(gòu)建表現(xiàn)力強(qiáng)大的Web應(yīng)用程序的高效率開放源碼框架?;贔lex框架開發(fā)的程序具有良好的交互性,可以使用矢量圖形以及表現(xiàn)能力豐富的用戶界面。使用Flex框架開發(fā)過(guò)程簡(jiǎn)單,具有良好的可擴(kuò)展性,能夠方便可靠地實(shí)現(xiàn)客戶端與服務(wù)器端的異步通信。程序運(yùn)行環(huán)境僅依賴于Adobe Flash Player,可實(shí)現(xiàn)跨平臺(tái)與瀏覽器運(yùn)行[3]。
由于GIS與圖形圖像技術(shù)聯(lián)系緊密,因此具有良好的矢量可視化表現(xiàn)能力的Flex框架可以與GIS相結(jié)合。ArcGIS API for Flex就是ESRI公司利用Flex框架推出的WebGIS開發(fā)包,用于實(shí)現(xiàn)具有良好用戶體驗(yàn)的WebGIS。使用ArcGIS API for Flex開發(fā)僅需引用一個(gè)庫(kù),不需要安裝額外的軟件,以接口的方式提供功能與數(shù)據(jù),使開發(fā)人員擺脫了數(shù)據(jù)管理、地圖應(yīng)用、組件通信等編程工作,專注于核心業(yè)務(wù)功能的開發(fā)與實(shí)現(xiàn)[4-6]。
ArcGIS API for Flex提供了一個(gè)Flex Viewer客戶端框架,F(xiàn)lex Viewer可以便捷地應(yīng)用地理信息服務(wù),靈活地引入各種地理信息數(shù)據(jù)。在這個(gè)框架中已經(jīng)包含了基本的WebGIS功能,通過(guò)簡(jiǎn)單設(shè)置就能搭建具有基本功能的WebGIS網(wǎng)站。
Flex Viewer使用Widget封裝功能,每個(gè)Widget就是一個(gè)功能模塊,Widget之間通過(guò)事件進(jìn)行通信。通過(guò)這種模式,F(xiàn)lex Viewer框架中的各個(gè)組件可以很好地進(jìn)行交互,同時(shí)又保持了良好的封裝[7]。
北海市旅游局原有內(nèi)容豐富的旅游信息數(shù)據(jù),包含了文本、圖片、視頻等旅游業(yè)務(wù)信息以及在旅游資源普查中采集的旅游地理信息數(shù)據(jù),基礎(chǔ)地理信息數(shù)據(jù)則包含了矢量、影像、地名地址、三維等多尺度、多類型數(shù)據(jù)。這3類數(shù)據(jù)在存儲(chǔ)上相互獨(dú)立,但在查詢、分析、展示時(shí)存在邏輯上的關(guān)聯(lián)。要實(shí)現(xiàn)旅游專題數(shù)據(jù)的綜合應(yīng)用,就必須在構(gòu)建旅游信息系統(tǒng)過(guò)程中,完成各類數(shù)據(jù)的關(guān)聯(lián)與整合。
經(jīng)過(guò)對(duì)已有數(shù)據(jù)的分析,旅游專題數(shù)據(jù)大多與景區(qū)及相關(guān)服務(wù)設(shè)施存在各種關(guān)聯(lián),而這些景區(qū)與相關(guān)服務(wù)設(shè)施同時(shí)也是地名地址數(shù)據(jù)的一部分,因此在設(shè)計(jì)時(shí)將景區(qū)及相關(guān)服務(wù)設(shè)施這類實(shí)體作為核心對(duì)象,對(duì)每個(gè)實(shí)體制定唯一編碼,并以此編碼為紐帶,將各類信息關(guān)聯(lián)在一起。
在數(shù)字城市的實(shí)際應(yīng)用中,地理信息公共平臺(tái)通過(guò)符合OGC標(biāo)準(zhǔn)的服務(wù)提供基礎(chǔ)地理信息數(shù)據(jù)。旅游地理信息數(shù)據(jù)通過(guò)ArcGIS Server發(fā)布,旅游業(yè)務(wù)數(shù)據(jù)通過(guò)Web服務(wù)發(fā)布供旅游信息系統(tǒng)使用。ArcGIS API for Flex支持通過(guò)上述幾種方式獲取所需數(shù)據(jù),結(jié)合旅游實(shí)體唯一編碼,能夠從不同的數(shù)據(jù)源獲取同一旅游實(shí)體的各種相關(guān)數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)的邏輯上的統(tǒng)一應(yīng)用。系統(tǒng)數(shù)據(jù)整合與關(guān)聯(lián)如圖1所示。
圖1 系統(tǒng)數(shù)據(jù)整合示意圖
旅游信息系統(tǒng)采用3層結(jié)構(gòu):數(shù)據(jù)層、業(yè)務(wù)邏輯層、表示層,如圖2。通過(guò)各種Web服務(wù),獲取空間分析、操作功能,整合利用基礎(chǔ)地理信息數(shù)據(jù)與旅游專題數(shù)據(jù),實(shí)現(xiàn)了數(shù)據(jù)在物理上分布式部署、在應(yīng)用時(shí)統(tǒng)一使用,為用戶提供直觀、便捷的旅游信息服務(wù)。
圖2 系統(tǒng)體系結(jié)構(gòu)示意圖
“數(shù)字北?!甭糜螒?yīng)用示范系統(tǒng)的數(shù)據(jù)主要分為2類:基礎(chǔ)地理信息數(shù)據(jù)與旅游專題數(shù)據(jù)。基礎(chǔ)地理信息數(shù)據(jù)存儲(chǔ)在文件與數(shù)據(jù)庫(kù)中,涵蓋了地貌、植被、交通、水系等矢量數(shù)據(jù)與多尺度影像數(shù)據(jù),通過(guò)數(shù)字北海地理信息公共平臺(tái)發(fā)布的標(biāo)準(zhǔn)服務(wù)可獲取所有基礎(chǔ)地理信息數(shù)據(jù)。旅游專題數(shù)據(jù)主要包括旅游地理信息數(shù)據(jù)及景點(diǎn)、景區(qū)、服務(wù)設(shè)施、旅游產(chǎn)品等旅游業(yè)務(wù)數(shù)據(jù)。旅游地理信息數(shù)據(jù)包括位置信息、旅游區(qū)塊、游覽線路等矢量數(shù)據(jù),主要存儲(chǔ)在Shapefile文件中;旅游業(yè)務(wù)數(shù)據(jù)保存在旅游業(yè)務(wù)信息數(shù)據(jù)庫(kù)中。針對(duì)數(shù)據(jù)整合關(guān)聯(lián)的要求,在原有矢量數(shù)據(jù)中增加了實(shí)體編碼字段、地名地址數(shù)據(jù)編碼字段,在旅游業(yè)務(wù)信息數(shù)據(jù)庫(kù)中通過(guò)增加視圖、建立新表與聯(lián)系,用于實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)與矢量數(shù)據(jù)的關(guān)聯(lián)。
表1 系統(tǒng)數(shù)據(jù)來(lái)源與存儲(chǔ)方式
業(yè)務(wù)邏輯層包含ArcGIS Server提供的各種功能,向旅游應(yīng)用示范系統(tǒng)提供旅游信息數(shù)據(jù)的各種Web服務(wù)。通過(guò)Web服務(wù),將旅游信息數(shù)據(jù)封裝為SOAP,同時(shí)制定好各種方法供使用者調(diào)用。本層的服務(wù)由旅游產(chǎn)品數(shù)據(jù)服務(wù)、旅游景點(diǎn)查詢服務(wù)、服務(wù)設(shè)施查詢、公交換乘服務(wù)、行程規(guī)劃服務(wù)等構(gòu)成。主要功能如下:
1)旅游產(chǎn)品數(shù)據(jù)服務(wù),用于獲取旅游產(chǎn)品數(shù)據(jù),通過(guò)此服務(wù)獲取旅游產(chǎn)品的詳細(xì)信息。
2)景點(diǎn)查詢服務(wù),用于查詢景點(diǎn),通過(guò)關(guān)鍵字在數(shù)據(jù)庫(kù)中檢索相關(guān)的景點(diǎn)信息并返回給客戶端。
3)服務(wù)設(shè)施查詢服務(wù),用于查詢景點(diǎn)內(nèi)及周邊的各種服務(wù)設(shè)施,通過(guò)關(guān)鍵字以及位置關(guān)系等條件在數(shù)據(jù)庫(kù)中檢索相關(guān)服務(wù)設(shè)施信息。
4)公交換乘服務(wù),包含一組應(yīng)用接口,用于查詢兩點(diǎn)間的公交線路,并提供可能的換乘方案。
5)行程規(guī)劃服務(wù),用于提供旅游線路信息,包括旅游部門推薦的線路以及用戶自選線路。
表示層由旅游信息系統(tǒng)以及旅游信息管理系統(tǒng)構(gòu)成,主要用于展示與管理旅游信息數(shù)據(jù),實(shí)現(xiàn)地圖瀏覽、景點(diǎn)查詢與預(yù)覽、行程規(guī)劃、公交換乘、自駕線路查詢等系統(tǒng)的主要功能。在表示層中,利用ArcGIS API for Flex調(diào)用各種服務(wù),從不同的數(shù)據(jù)源獲取相關(guān)數(shù)據(jù)。在這些數(shù)據(jù)中,基礎(chǔ)地圖與影像來(lái)自基礎(chǔ)地理信息數(shù)據(jù)庫(kù),均已按照《地理信息公共服務(wù)平臺(tái)電子地圖數(shù)據(jù)規(guī)范》配置符號(hào)與注記,并進(jìn)行切片處理,由系統(tǒng)調(diào)入直接使用;景點(diǎn)、自駕線路、公交換乘線路等矢量信息由ArcGIS API for Flex實(shí)時(shí)繪制,并根據(jù)實(shí)際需要?jiǎng)討B(tài)控制繪制效果,與地圖、影像、文字、圖片、視頻、三維景觀等數(shù)據(jù)相結(jié)合,增強(qiáng)旅游信息的表現(xiàn)形式。
旅游應(yīng)用示范系統(tǒng)采用Adobe Flash Builder 4.0與Visual Studio.Net開發(fā),使用C#語(yǔ)言編寫Web服務(wù)、服務(wù)器端應(yīng)用程序,旅游信息數(shù)據(jù)庫(kù)采用Access。
在.Net環(huán)境開發(fā)的Web服務(wù)包含于.asmx文件內(nèi), Web Service發(fā)布后可通過(guò)URL訪問(wèn),通過(guò)WSDL獲得關(guān)于Web服務(wù)的詳細(xì)描述??蛻舳顺绦蛘{(diào)用服務(wù)器端分發(fā)的WSDL生成代理類,代理類中包含了Web Service中定義的方法,客戶端程序通過(guò)代理類可以如本地一樣調(diào)用Web服務(wù)方法[8]。以下為Flex調(diào)用Web服務(wù)的示例代碼。
首先定義一個(gè)Web服務(wù):
服務(wù)的定義中包含了調(diào)用地址、調(diào)用服務(wù)成功后的處理函數(shù)SearchInfo_result(event)以及調(diào)用參數(shù)InfoKeyWord,定義完成后就可以如本地方法一樣調(diào)用SearchInfo服務(wù)接口獲取數(shù)據(jù):
ws1.SearchInfo(InfoKeyWord); //請(qǐng)求服務(wù)
代碼中的SearchInfo是Web服務(wù)提供的方法,F(xiàn)lex只要提供SearchInfo方法的參數(shù)InfoKeyWord,就能直接獲得數(shù)據(jù),獲得的數(shù)據(jù)由SearchInfo_result(event)函數(shù)處理。
通過(guò)Web服務(wù),ArcGIS API for Flex可以獲得旅游局發(fā)布的旅游信息數(shù)據(jù)、“數(shù)字北?!卑l(fā)布的基礎(chǔ)地理信息數(shù)據(jù)。
Web服務(wù)具有良好的擴(kuò)展性與適應(yīng)性,當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生變化時(shí),通過(guò)改寫服務(wù)就能適應(yīng)新的數(shù)據(jù)結(jié)構(gòu)變化。只要服務(wù)提供的數(shù)據(jù)結(jié)構(gòu)不變,就無(wú)需改動(dòng)客戶端代碼。使用者通過(guò)調(diào)用新服務(wù)就可使用新的數(shù)據(jù),通過(guò)不斷地發(fā)布與完善服務(wù),旅游應(yīng)用示范系統(tǒng)可以不斷地?cái)U(kuò)展功能、提高功效。
“數(shù)字北?!钡乩硇畔⒐卜?wù)平臺(tái)提供基礎(chǔ)地圖的方式為切片地圖Web服務(wù)(wmts)。ArcGIS API for Flex并不支持切片地圖Web服務(wù),為此必須對(duì)原有切片服務(wù)API進(jìn)行擴(kuò)展,通過(guò)繼承API中的TiledMapServiceLayer,按切片地圖Web服務(wù)的要求改寫后,新的擴(kuò)展API才可支持切片地圖Web服務(wù)。
ArcGIS API for Flex提供任務(wù)Task用于完成特定的任務(wù),通過(guò)Task可以實(shí)現(xiàn)查詢、搜索、屬性查詢等各種GIS功能。調(diào)用這些Task時(shí),向服務(wù)器發(fā)出請(qǐng)求參數(shù),服務(wù)器獲得請(qǐng)求后根據(jù)參數(shù)進(jìn)行處理,并將處理結(jié)果返回請(qǐng)求方。以下以RouteTask為例說(shuō)明如何使用Task實(shí)現(xiàn)WebGIS功能。
RouteTask在本系統(tǒng)中的作用為構(gòu)建連接幾個(gè)點(diǎn)之間的最短路徑,使用
定義完成后在程序中使用routeTask.solve(routeParams)開始查詢,當(dāng)處理完成后調(diào)用solve CompleteHandler(event)處理結(jié)果。系統(tǒng)實(shí)際效果如圖3所示。
圖3 旅游應(yīng)用示范實(shí)現(xiàn)效果
實(shí)例說(shuō)明,通過(guò)調(diào)用服務(wù)器端發(fā)布的旅游業(yè)務(wù)數(shù)據(jù)服務(wù),使用ArcGIS API for Flex開發(fā)的客戶端能在基礎(chǔ)地理信息數(shù)據(jù)之上,通過(guò)調(diào)用Task實(shí)現(xiàn)各種空間操作功能。
[1]尚文捷.基于ArcGIS Server的旅游地理信息系統(tǒng)研究[D].西安:西安科技大學(xué), 2011
[2]劉立鋮.基于混合結(jié)構(gòu)的泰山地質(zhì)公園旅游GIS設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:中國(guó)地質(zhì)大學(xué), 2007
[3]Adobe.Flex概 述[DB/OL]. http://www.adobe.com/cn/products,2011-12-01
[4]鐘廣銳. 基于ArcGIS Flex API的WebGIS設(shè)計(jì)[J].測(cè)繪科學(xué),2012,37(3): 147-149
[5]袁懷月,侯澄宇,楊恒. 基于ArcGIS Flex API的工廠基礎(chǔ)地理信息共享服務(wù)系統(tǒng)設(shè)計(jì)[J].測(cè)繪工程, 2011,20(2): 61-65
[6]周炳喜.基于LCDS和Flex Viewer的電網(wǎng)臺(tái)風(fēng)WebGIS研究[D].上海:華東師范大學(xué), 2010
[7]Esri. ArcGIS API for Flex 2.3 Help [EB/OL]. http://resources.arcgis.com/en/help,2011-12-01
[8]朱明,楊海燕,李景文,等. 基于Web Service的測(cè)繪檔案服務(wù)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].桂林理工大學(xué)學(xué)報(bào), 2010,30(4): 590-594