徐人杰,朱 駿*,葉泓昕,涂乾光
(1.浙江水利水電學(xué)院,浙江 杭州 310018)
隨著“互聯(lián)網(wǎng)+”實(shí)踐成果的不斷推動(dòng),經(jīng)濟(jì)形態(tài)不斷發(fā)生演變,旅游產(chǎn)業(yè)的發(fā)展無(wú)法離開(kāi)信息技術(shù)的支撐。2016 年12 月26 日國(guó)務(wù)院發(fā)布的《“十三五”旅游業(yè)發(fā)展規(guī)劃》提出,要以現(xiàn)代信息技術(shù)為支撐,建設(shè)一批智慧旅游景區(qū)。在該背景下,越來(lái)越多的旅游景點(diǎn)推出了“數(shù)字旅游”的概念,并加以實(shí)踐。數(shù)字旅游的模式使管理工作更加方便準(zhǔn)確,大大降低了人力成本,也是旅游業(yè)實(shí)現(xiàn)管理科技化、現(xiàn)代化的一個(gè)最佳途徑,滿足了現(xiàn)階段仍處于迅速發(fā)展?fàn)顟B(tài)下旅游業(yè)的需求,因此建立高效、高規(guī)格、功能完善的旅游信息可視化平臺(tái),對(duì)于旅游業(yè)的發(fā)展具有重要意義。近年來(lái),越來(lái)越多的學(xué)者加入到研究數(shù)字旅游概念、實(shí)現(xiàn)數(shù)字旅游應(yīng)用的隊(duì)伍中,分別針對(duì)八大關(guān)[1]、青島市[2]、泉州西湖公園[3]、連云港花果山景區(qū)[4]、全國(guó)紅色旅游資源[5]、南昌梅嶺森林公園[6]和成都市[7]進(jìn)行了有意義的嘗試,實(shí)現(xiàn)了具有一定價(jià)值的旅游GIS。
目前,傳統(tǒng)旅游GIS 主要以二維地圖為背景,體驗(yàn)性欠佳;而部分三維旅游GIS 存在三維漫游實(shí)景渲染程度不佳、模型精細(xì)程度不夠等問(wèn)題。針對(duì)這些問(wèn)題,本文利用3dsMax 軟件進(jìn)行精細(xì)化建模,并基于SuperMap 二次開(kāi)發(fā)組件,在VS 平臺(tái)上利用C#語(yǔ)言實(shí)現(xiàn)了杭州余杭塘棲古鎮(zhèn)三維旅游可視化系統(tǒng)。系統(tǒng)界面簡(jiǎn)潔易懂、功能實(shí)用、穩(wěn)定性較好、三維模型逼真、屬性數(shù)據(jù)詳實(shí),為用戶提供了較好的使用體驗(yàn)。
塘棲古鎮(zhèn)位于杭州市北部,距離杭州市中心約20 km,京杭大運(yùn)河從古鎮(zhèn)中心穿過(guò),已有1 300 多a的歷史。構(gòu)建塘棲古鎮(zhèn)的三維場(chǎng)景需要獲取場(chǎng)景的空間數(shù)據(jù)和屬性數(shù)據(jù)[8],本文首先進(jìn)行實(shí)地拍照和實(shí)地測(cè)量,再根據(jù)照片信息、記錄的建筑物長(zhǎng)寬高信息以及建筑物之間的間隔信息,在3dsMax 軟件中進(jìn)行建模。
在建立關(guān)鍵建筑物三維模型時(shí),首先需搭建建筑地基,通常以標(biāo)準(zhǔn)基本體中的長(zhǎng)方體為地基基礎(chǔ);再利用線段的樣條線設(shè)置線寬、基礎(chǔ)功能構(gòu)造房屋模型、布爾功能構(gòu)造建筑模型;最后利用線條基礎(chǔ)功能建造房屋的屋檐和屋前房梁。
塘棲古鎮(zhèn)中包括大量的樹(shù)木、灌木叢和花壇。本次建模采用簡(jiǎn)化處理的方法,利用3dsMax 軟件自帶的植被文件完成建模。本文拍攝了塘棲古鎮(zhèn)數(shù)百?gòu)堎N圖用的照片,通過(guò)篩選、調(diào)整后,利用符合貼圖要求的照片進(jìn)行塘棲古鎮(zhèn)整個(gè)場(chǎng)景的貼圖工作。部分貼圖效果如圖1 所示。
圖1 貼圖效果展示
在3dsMax 軟件中完成建模的場(chǎng)景,再通過(guò)SuperMap的Max 插件,將3ds 文件(.3ds 格式)轉(zhuǎn)化為模型數(shù)據(jù)集(.udb 格式)。利用SuperMap 的Max 插件時(shí),需設(shè)置該場(chǎng)景的坐標(biāo)值,即在“生成模型數(shù)據(jù)集”窗口中選擇“球面坐標(biāo)”,設(shè)置經(jīng)緯度值和高度值。紋理路徑選擇為場(chǎng)景使用的貼圖數(shù)據(jù)所在的文件夾。數(shù)據(jù)源文件路徑為新建的“塘棲古鎮(zhèn)”文件型數(shù)據(jù)集。然后,在SuperMap iDesktop 10i 中進(jìn)行模型合并和模型切分。最后,將這些對(duì)象加載到同一個(gè)球面場(chǎng)景中。模型切分的目的是將一個(gè)擁有大量模型的場(chǎng)景等量分解成若干個(gè)小場(chǎng)景,以解決開(kāi)發(fā)系統(tǒng)一次性載入過(guò)多數(shù)據(jù)卡死的問(wèn)題。
塘棲古鎮(zhèn)三維旅游可視化系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)的目的是將塘棲古鎮(zhèn)的全貌以三維場(chǎng)景的方式呈現(xiàn)給用戶,用戶通過(guò)系統(tǒng)可瀏覽整個(gè)三維場(chǎng)景,身臨其境地看到塘棲古鎮(zhèn)中的景點(diǎn)、餐館、賓館、商鋪和公共設(shè)施。系統(tǒng)在設(shè)計(jì)和開(kāi)發(fā)時(shí)兼顧了多個(gè)方面,遵循規(guī)范性、可靠性、經(jīng)濟(jì)性和管理可接受等原則,以保證系統(tǒng)搭建工作的順利進(jìn)行。
系統(tǒng)整體框架分為數(shù)據(jù)層、業(yè)務(wù)層和用戶層3 層。數(shù)據(jù)層以模型數(shù)據(jù)和屬性數(shù)據(jù)為基礎(chǔ)數(shù)據(jù),是模型構(gòu)建和模型屬性查詢搭建的基礎(chǔ)。業(yè)務(wù)層負(fù)責(zé)根據(jù)模型數(shù)據(jù),在3dsMax 軟件中構(gòu)建三維模型,生成.3ds 文件,并將文件經(jīng)過(guò)轉(zhuǎn)換后導(dǎo)入SuperMap iDesktop 10i中,在工作空間文件(.smwu)中添加該數(shù)據(jù)源,生成場(chǎng)景;在Visual Studio 平臺(tái)中,基于C#語(yǔ)言進(jìn)行系統(tǒng)的二次開(kāi)發(fā),實(shí)現(xiàn)了在三維旅游可視化系統(tǒng)中加載工作空間文件。用戶層則是三維旅游可視化系統(tǒng)中可實(shí)現(xiàn)的各種功能。系統(tǒng)總體框架結(jié)構(gòu)如圖2 所示。
圖2 系統(tǒng)總體架構(gòu)圖
1)三維場(chǎng)景加載與圖層管理。通過(guò)點(diǎn)擊“打開(kāi)工作空間”按鈕來(lái)實(shí)現(xiàn)工作空間文件(.smwu)的載入,在工作空間管理界面進(jìn)行三維場(chǎng)景的加載,然后在圖層管理界面進(jìn)行該場(chǎng)景包含圖層的管理。
2)場(chǎng)景屬性管理。在系統(tǒng)界面上制定工具欄,實(shí)現(xiàn)對(duì)狀態(tài)欄、大氣、太陽(yáng)、經(jīng)緯網(wǎng)、導(dǎo)航羅盤的可視或隱藏管理。
3)三維漫游。在三維場(chǎng)景顯示界面中,通過(guò)鼠標(biāo)按鍵操作,對(duì)場(chǎng)景進(jìn)行放大、縮小、旋轉(zhuǎn)、平移等基本操作,可充分顯示場(chǎng)景中各建筑物的空間位置、分布關(guān)系,也可提供整體的三維場(chǎng)景展示。
4)信息查詢。該功能涉及三維查詢和屬性查詢兩個(gè)菜單按鈕。在三維查詢按鈕下,包含兩個(gè)子按鈕,一個(gè)是點(diǎn)擊三維模型,即通過(guò)氣泡形式顯示該模型的基本信息;另一個(gè)是彈出對(duì)話框,即手動(dòng)輸入SQL 語(yǔ)句進(jìn)行查詢。點(diǎn)擊屬性查詢按鈕后,將彈出交互式對(duì)話框,通過(guò)3 個(gè)下拉列表的選擇,引導(dǎo)用戶按照屬性查詢相應(yīng)的三維模型。
5)快捷選擇。通過(guò)點(diǎn)選菜單欄上的“快捷選擇”按鈕,彈出包含11 個(gè)按鈕的子菜單。用戶可在小吃、名宿、特產(chǎn)食品店和景點(diǎn)等11 類建筑類別中一鍵選取其中一類建筑,在窗口高亮顯示。
6)距離量算。在三維場(chǎng)景顯示界面中,點(diǎn)擊鼠標(biāo)左鍵選擇兩點(diǎn),并計(jì)算兩點(diǎn)之間水平凈距、垂直凈距和空間距離,同時(shí)獲得信息反饋。
系統(tǒng)數(shù)據(jù)庫(kù)包括三維模型數(shù)據(jù)和屬性信息,其中三維模型數(shù)據(jù)通過(guò)3dsMax 軟件構(gòu)建,再利用SuperMap 公司研發(fā)的插件導(dǎo)出,放入開(kāi)發(fā)的系統(tǒng)中使用;屬性信息則通過(guò)實(shí)地調(diào)查獲得,包含景點(diǎn)介紹、商鋪售賣的商品與價(jià)格信息、建筑名稱、建筑物類別(如手工藝品店、服裝店、景點(diǎn)、公共設(shè)施等)、營(yíng)業(yè)時(shí)間等,整個(gè)系統(tǒng)的屬性信息由一張屬性表進(jìn)行管理。屬性表的字段名稱和類型如表1 所示,其中Path 字段用于存放點(diǎn)擊三維模型進(jìn)行查詢時(shí),氣泡框中顯示的景點(diǎn)照片的路徑。
表1 系統(tǒng)屬性表字段信息
1)系統(tǒng)軟件平臺(tái)。操作系統(tǒng)為Windows 10,三維GIS 平臺(tái)為SuperMap iDesktop 10i,二次開(kāi)發(fā)語(yǔ)言為C#,二次開(kāi)發(fā)平臺(tái)為Visual Studio 2017,二次開(kāi)發(fā)組件為SuperMap iObjects.NET 10i SP1 for Windows。
2)系統(tǒng)硬件平臺(tái)。處理器為Intel(R)Core(TM)i7-8700K CPU @ 3.70GHz,內(nèi)存(RAM)為16 GB,顯卡為Intel(R)UHD Graphics 630 和NVIDIA GeForce GTX 1080Ti。
用戶界面是系統(tǒng)呈現(xiàn)給用戶的整體形象,需將其設(shè)計(jì)得簡(jiǎn)潔、美觀,方便用戶快速掌握系統(tǒng)的各種功能和使用方法。塘棲古鎮(zhèn)三維旅游可視化系統(tǒng)界面分為菜單欄、工具欄、距離量算信息反饋窗口、工作空間管理器、圖層管理器、三維場(chǎng)景窗口6 個(gè)部分(圖3)。
系統(tǒng)數(shù)據(jù)加載包括工作空間文件加載和場(chǎng)景加載顯示。加載工作空間后,工作空間管理器需與圖層管理器關(guān)聯(lián)。圖層管理器中顯示了當(dāng)前場(chǎng)景包含的圖層名稱,可對(duì)各圖層進(jìn)行顯示或隱藏狀態(tài)選擇、圖層位置調(diào)節(jié)等工作。在對(duì)模型進(jìn)行屬性查詢前,需在圖層管理器中選中該建筑所在的圖層。三維場(chǎng)景窗口用于場(chǎng)景的顯示與瀏覽,也可在該場(chǎng)景中進(jìn)行漫游和距離量算等操作。在窗體中加入SceneControl 控件,關(guān)聯(lián)工作空間管理器、圖層管理器和三維場(chǎng)景窗口。系統(tǒng)加載場(chǎng)景后的效果如圖3 所示。
圖3 場(chǎng)景加載效果
場(chǎng)景屬性管理的實(shí)現(xiàn)方法為:首先在ToolPanel 控件上添加了一個(gè)GroupBox 控件,將它的Text 命名為“場(chǎng)景屬性”;然后在該控件中繼續(xù)添加CheckBox 子控件,如狀態(tài)欄、比例尺、導(dǎo)航羅盤等。這些CheckBox對(duì)應(yīng)了SceneControl 中的各個(gè)場(chǎng)景屬性,場(chǎng)景打開(kāi)時(shí),默認(rèn)各場(chǎng)景屬性為可見(jiàn)狀態(tài),點(diǎn)擊一個(gè)CheckBox 的勾選項(xiàng),則該CheckBox 對(duì)應(yīng)的場(chǎng)景屬性將被隱藏。
系統(tǒng)針對(duì)游客群體的需求,從易用角度出發(fā),設(shè)計(jì)了“屬性查詢”按鈕,通過(guò)將ComboBox 與屬性表中的字段內(nèi)容進(jìn)行關(guān)聯(lián),引導(dǎo)用戶進(jìn)行信息查詢。系統(tǒng)為游客提供了“建筑分類”、“店鋪名稱”、“商品與價(jià)格”等查詢信息,點(diǎn)擊“確定”按鈕后,場(chǎng)景中將高亮顯示符合條件的建筑。屬性查詢彈框界面如圖4所示。
圖4 屬性查詢界面
實(shí)現(xiàn)屬性查詢的部分關(guān)鍵代碼為:
系統(tǒng)還設(shè)計(jì)了另一種查詢方式,即首先在圖層管理器中用鼠標(biāo)左鍵單擊建筑所在的圖層,再點(diǎn)擊界面頂層菜單欄中的“三維查詢”→“模型查詢”,然后在場(chǎng)景窗口中選擇需要查詢的建筑物,便會(huì)彈出一個(gè)氣泡窗口,顯示該建筑物的具體屬性信息(真實(shí)照片、營(yíng)業(yè)時(shí)間等)。若該建筑物的分類為官方景點(diǎn),則還將顯示該景點(diǎn)的簡(jiǎn)介;若該建筑物中售賣商品,則會(huì)顯示店鋪中所售的商品和價(jià)格。模型查詢的效果如圖5 所示。
圖5 模型查詢示意圖
系統(tǒng)中距離量算的方法為:點(diǎn)擊界面頂層菜單欄中的“距離量算”按鈕,在場(chǎng)景窗口中利用鼠標(biāo)左鍵選擇兩個(gè)點(diǎn)(被選中的點(diǎn)為紅色),再點(diǎn)擊鼠標(biāo)右鍵,即可在“場(chǎng)景屬性”控件的右側(cè)TextBox 中獲得信息反饋,如兩點(diǎn)間水平凈距為“+S_Distance.ToString()+”米,垂直凈距為“+H.ToString()+”米,空間距離為“+ K_Distance.ToString() +” 米。距離量算的依據(jù)為基于參考橢球體的曲率,利用測(cè)地線(又稱大地線,空間中兩點(diǎn)之間的局域最長(zhǎng)或最短路徑)的接口來(lái)計(jì)算兩個(gè)三維點(diǎn)的空間距離。
本文通過(guò)實(shí)地拍照收集數(shù)據(jù)的方式采集了建模所需的模型數(shù)據(jù)、貼圖數(shù)據(jù)和屬性數(shù)據(jù);再利用3dsMax軟件進(jìn)行三維場(chǎng)景建模,并將建模完成后的3ds 格式文件通過(guò)SuperMap 公司研發(fā)的轉(zhuǎn)換插件轉(zhuǎn)換為模型數(shù)據(jù)集,導(dǎo)入SuperMap iDesktop 10i 中進(jìn)行場(chǎng)景的生成和屬性表的填寫;最后基于SuperMap 二次開(kāi)發(fā)組件和Visual Studio 平臺(tái),完成了三維旅游可視化系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)工作。系統(tǒng)具有開(kāi)發(fā)周期短、成本低、應(yīng)用層面廣等優(yōu)點(diǎn)。在2020 年全球疫情的影響下,該系統(tǒng)可作為一個(gè)展現(xiàn)塘棲古鎮(zhèn)風(fēng)貌的平臺(tái),吸引潛在游客,對(duì)全國(guó)智慧景區(qū)的建設(shè)具有重要意義。
在今后的研究中,系統(tǒng)的三維數(shù)據(jù)可通過(guò)傾斜攝影的方式獲得,這將大大提高數(shù)據(jù)獲取的效率,為將來(lái)大規(guī)模應(yīng)用做準(zhǔn)備;系統(tǒng)的實(shí)現(xiàn)可嘗試采用移動(dòng)端SDK 進(jìn)行二次開(kāi)發(fā)或采用WebGIS 的形式,這樣更符合游客的使用習(xí)慣。