禮晟東 趙鵬飛 何鳳良



摘 要:文章主要闡述了基于SuperMap平臺,借助HTML5、JavaScript等編程語言,構建三維場景地理信息服務網站的關鍵技術與實現方法。為進一步提升用戶體驗與需求,在此基礎上,結合WebGIS開發特點,文章還探討了多角度、多時相表達地理信息的解決方案和思路。
關鍵詞:三維場景;SuperMap;Web GIS
引言
隨著GIS的深入應用,越來越多的人們要求利用真三維空間來處理問題。對于客觀世界,三維GIS具備二維GIS無法比擬的表現形式,對于地理信息的深層次分析和挖掘,三維GIS也有著不可替代的作用。目前,在圖像圖形處理、三維可視化等相關技術發展的多重推動下,三維GIS不斷發展,在國土、地質、石油等多個領域扮演著越來越重要的角色。同時,在網絡時代,Web GIS的發展日新月異,為GIS的應用提供了更為廣闊的空間,也為用戶提供了更為方便快捷的GIS服務。將三維GIS和Web GIS兩者的優勢結合到一起,對GIS的發展具有重要的意義。
SuperMap作為具有國內領先水平的GIS平臺,具有高性能、高穩定性、高可靠性的特點。它提供了企業級的GIS服務器以及開發真三維應用的工具包,能夠支持用戶快速高效地開發特定的Web三維GIS應用產品。
1 開發前準備
編程語言采用JavaScript,在開發前需要在服務器端部署服務發布平臺,用戶可以根據自身需求選擇安裝SuperMap iServer平臺進行數據及系統服務的發布,也可以采用IIS等其他服務進行數據和系統的發布。GIS功能利用SuperMap iServer for Realspace提供的開發腳本庫及web三維GIS插件來開發實現。
1.1 插件安裝
Web三維GIS插件是以ActiveX控件的形式嵌入網頁中,用戶在瀏覽三維場景中需要安裝該插件,所以開發者在發布系統的同時,需要把插件也發布出去。
1.2 添加腳本庫
將SuperMap iServer for Realspace安裝目錄下lib腳本庫(目錄組織見圖1)復制到系統目錄下。在系統中新建SuperMap.Include.js腳文章件,在其中添加引用腳本庫的代碼,并在html主界面中引用該腳文章件。
1.3 加載默認場景
在主界面初始化方法中添加下列代碼來加載默認場景控件。參數中包括三維場景容器“sceneControlDiv“及控件初始化完成和失敗的initCallback()和failedCallback()兩個回調函數。
sceneControl = new SuperMap.Web.UI.Controls.SceneControl($get("sceneControlDiv"),initCallback, failedCallback);
回調函數initCallback()中用于添加數據加載等其他功能。已加載三維空間服務數據為例,代碼如下:
scene=sceneControl.get_scene();
scene.open("http://localhost:8090/iserver/services/realspace-test/rest/realspace", "test");
2 關鍵代碼與實現
在Web GIS開發過程中,普遍存在查詢、分析、圖層控制等基本的GIS功能的需求。下文中介紹GIS常用功能的實現步驟和方法。
2.1 場景操作
2.1.1 場景設置
用戶在使用的過程中,常常會根據個人習慣和需求來調整場景部件的狀態,開發者可通過scene.get_sceneOption()接口設置場景中大氣層、導航板、狀態欄、經緯網、太陽光照等內容。此外,場景中經常會存在地勢比較平坦的狀況,為了凸顯當前地勢的變化情況,可通過scene.set_terrainExaggeration()接口設置地形拉伸比例實現地形的夸張和壓縮。
2.1.2 互操作
對于場景的交互操作可通過SceneAction類來實現。Supermap腳本庫提供了漫游、縮放、點選擇、空間量算等三維操作狀態,其中,點選擇和空間量算的操作需要注冊回調函數并返回相應的參數。
其他的交互操作如繪制標注、框選要素等特定需求的操作狀態,可通過擴展SceneAction來實現,然后對擴展的類的使用方法與漫游等基本操作的使用方法一致。
2.2 GIS功能
2.2.1 屬性查詢
屬性查詢主要通過GerFeature3DsBySQLParameters()、GetFeaturesBySQLService(url)等接口來實現,用戶通過定義SQL語句,來對指定的數據服務進行查詢。其中,GerFeature3DsBySQLParameters()用于設定數據服務的名稱和SQL語句,GetFeaturesBySQLService()用于設定數據服務的地址和回調函數等內容。查詢執行的回調函數包含查詢結果的參數,通過該參數可獲取此次查詢得到的目標要素信息。
2.2.2 空間查詢
空間查詢主要通過GetFeature3DsByBoundsParameters()、GetFeature3DsByBoundsService(url)等接口來實現,用戶可通過自定義矩形框范圍來查詢空間上相交的結果。
值得注意的是,空間查詢返回的值是由要素外接矩形之間的相交關系得到的,所以,查詢結果存在著一些外接矩形相交但實際上本身并不相交的要素,顯然此類結果需要從中剔除。為了保證查詢的準確度并兼顧查詢效率,需要在查詢執行后的回調函數中對結果進行判斷。判斷過程采用Geometry3D.hitTest(point, tolerance)方法,該方法用于判斷Geometry3D對象是否與以point為中心,tolerance為半徑的圓有重疊部分,能夠清除結果中大部分的錯誤記錄。方法步驟如下:
(1)獲取查詢矩形框的中心點和矩形框的最長邊的一半,作為hitTest()判斷參數;(2)遍歷查詢結果,獲取每個要素幾何屬性,參與判斷;(3)若返回結果為True則作為查詢結果予以保留,反之從查詢結果中清除。
2.2.3 圖層控制
三維場景中的圖層分為普通圖層和地形圖層兩部分,分別通過scene.get_layer3Ds()和scene.get_terrainLayers()方法實現。普通圖層包括矢量圖層、影像圖層、緩存數據圖層、專題圖層、模型圖層等。通過圖層控制方法,可以調整圖層的顯示、透明度、疊放順序、顯示高度等。利用此方法,可以在三維場景中展示地理信息的統計圖表、專題分析結果等內容。如圖2所示。
3 功能擴展
在實際的開發過程中,客戶常常會根據自身的需求,提出特定的GIS功能需求。因此,根據開發平臺現有的接口,開發者需要充分結合網頁的編程優勢,實現一些更加貼合特定需求的功能。作者在此提出三種功能上的擴展,和讀者學習交流。
3.1 多時相數據的演變
多時相是地理信息的一個重要特點。隨著GIS數據的更新速度不斷加快,開發者越來越多的面臨多時相數據,如何更好地表現和分析多時相數據變得愈加重要。
借助于開發中的圖層控制窗口,開發過程中可以對數據設定一個時間軸,在切換時間點的同時展現對應時相的數據,達到預覽數據演變的過程。在這個過程中,用戶也可根據需求添加數據對比圖層的展示,也可利用setTimeout()方法來自動控制多時相數據的切換,實現效果見圖3所示。
3.2 地形分析功能的擴展
目前,平臺提供的網頁端地形分析功能具有一定的局限性,但是通過scene.getAltitude(x,y)方法可獲取高程點位信息,開發者可以自主的設定分析算法進行特定的分析計算。例如,可通過添加一條線段,獲取沿該線段100個采樣點的高程值來得到該線段的剖面分析圖。
3.3 第三方庫文件的豐富表現形式
傳統的表格等表現分析統計的結果顯得比較呆板、枯燥。從用戶的角度來出發,開發者需要尋找更為靈活生動的表現形式。目前網頁編程中有很多優秀的第三方圖表庫,如highCharts,eCharts等,采用這些第三方的腳本庫,可以快速地開發出較多豐富的圖表表現形式。
4 結束語
在日新月異的計算機時代,基于三維場景的Web GIS在眾多GIS產品中有鮮明的特點和優勢,同時在影響國民經濟的多個領域發揮著愈加重要的作用。針對政府、企業等不同部門,開發者需要做出更多特定的GIS服務。文章在介紹開發關鍵技術的同時,也提出一些對功能擴展的想法和意見,旨在拋磚引玉,希望對GIS相關開發提供一些幫助和經驗。
參考文獻
[1]吳創奇.基于SuperMap的二三維一體化的WebGIS系統開發[J].科技創新導報,2011(21):24-25.
[2]葛梓培,馬琳賀.基于SuperMap IS.NET的水利GIS系統開發[J].科學中國人,2014(21).
[3]姜仁貴,解建倉,李建勛,等.基于數字地球的WebGIS開發及其應用[J].計算機工程.2011(6):225-227.
[4]呂智涵,馮圣中,陳戈.基于多維WebGIS的三維互動網絡虛擬社區[J].系統仿真學報,2013,25(9):2109-2114.
作者簡介:禮晟東(1979-),男,遼寧沈陽人,工程師,主要從事測繪產品生產的技術管理工作。