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