鄧德標,方源敏,高晉寧
(昆明理工大學國土資源工程學院,云南昆明650093)
二維GIS自20世紀60年代發展至今,已應用到土地管理、交通、電力、電信、城市管網、消防、城市規劃等領域[1]。近年來隨著三維GIS技術的迅猛發展,其在現代城市的規劃、建設、管理及發展等方面開始發揮重要作用。如何利用數字化手段管理城市,成為地理信息科學的一個重要研究方向,三維地理信息虛擬仿真技術也因此成為數字規劃新的技術亮點[2]。
利用現代化數字化方式管理城市,首先需要建立逼真的精確的三維城市景觀。對于小范圍的三維景觀建設,可以通過對地物逐個進行信息采集和創建模型的方法來實現。但對于大范圍城市景觀場景的創建,工作量和成本會大大增加,所以需要采用一種合理的手段來解決。本文提出利用城市地物的不同重要程度來對城市地物進行區別化建模的方法:對標志性和重要建筑物(如政府機關大樓、學校等)進行精細化建模,保證其在城市中的突出地位;對在城市中存在的大量一般模型(如居民住宅等)采用基于ArcGIS與Google SketchUp相結合的方式來批量建模;對大量的城市部件采用建立城市部件模型庫的方式來進行建模。
相對于傳統的人機交互式的作業方法,上述建模方法具有制作精度高、工作量小、制作周期短、工作效率高等優點,實現大規模城市場景快速建模效果明顯,可以普及使用。
TerraDeveloper是TerraExplorer Pro的擴展模塊和二次開發工具,完全基于COM組件技術標準,通過TerraExplorer API提供接口,支持用 VB、VC、C#等語言根據實際需要進行開發[3]。
要使用TerraExplorer API接口,首先需要安裝TerraExplorer Plus,添加 TerraExplorerX 1.0 Type Library引用;然后在工具箱中添加TE3DWindow(三維窗體)、TEInformationWindow(信息樹窗口)和Navigation Map(導航圖)控件;最后通過調用Terra-ExplorerX里相關的類型和函數即可實現相應的功能。TerraExplorer包含的接口如下。
1)ISGWorld6接口:是大多數TerraExplorer接口的主入口點,通過該接口可以管理應用程序、3D對象及消息的處理事件。包含Project、Navigate、Creator、Window、Analysis等屬性。
2)TerraExplorer5接口:用于描述用戶接口的相關細節和操縱文件,如工程文件名,工程環境參數ProjectPrarm,用于裝載.FIL或MPT文件的Load函數,保存當前工程文件的Save函數。
3)IRender5接口:獲取當前三維窗口的信息,如ScreenToWorld函數用于獲取屏幕上某點的地理坐標,SetMouseCursor和 SetMouseInputMode函數分別用于設置鼠標的指針類型及控制其輸入模式。
4)ICoordSys3接口:提供當前坐標系統的相關信息,用戶可自定義坐標系統,調用MoveCoord函數調節東西和南北的偏移量來移動二維坐標。Get-Distance函數可獲取圖上兩點間的水平距離,若要獲取兩個三維點的空間距離則用GetDistanceEx函數,獲取由兩點確定的直線與北方向的夾角則用GetAimingAngles函數。
5)IObjectManager51接口:管理三維窗口中的所有對象,可進行添加、刪除、修改三維窗口中的對象,如GetObject函數可獲取對象,CreateLabel函數可創建標簽,CreatePolyline函數創建折線,Create3DPolygon函數創建三維多邊形。
Skyline支持添加的景觀模型有*.x、*xpc、*flt、*fpc、*xpl、* xpl2、*dae 7 種格式??紤]到TerraExplorer Pro軟件提供的模型制作精度不高,因此三維景觀模型主要使用3D MAX或Maya等建模軟件制作[4]。制作模型時需要設定模型的中心點、方向和大小,也可以在模型添加后進行調整,但為了減少后處理的工作及提高效率,故建議在模型制作時把相關參數設置好。
在城市模型中的一些細節部分,如路燈、郵筒、下水井、樹木等可認為是形狀相同的物體。如果每個物體模型都人機交互式地添加,工作量太大,而且模型的地理位置精度得不到保障。如果能夠找出模型插入點之間的規律,利用數學公式計算各個插入點的坐標,則能實現模型的批量添加。
添加模型所調用的函數是CreateModel,該函數有6個參數,依次是位置、模型文件名、縮放系數、模型類型、項目樹中的ID號碼和名稱。其中前兩個參數是必須的,其余都是可選的,因此只要確定添加的位置和模型文件名。由于模型添加時忽略模型高程,直接將模型添加到已打開的工程文件所在的平面上,所以只需確定模型的平面坐標。有一點要注意的是,添加模型所需的位置是經度和緯度,坐標系是當前地形模型的坐標系。
圖1所示是模型的添加流程圖,模型導入時可以一次導入多個不同的模型,但每一次添加只能選擇一種模型。添加前可以設置模型參數,包括水平方向Yaw、前后仰角角Pitch、左右偏角Roll和相鄰模型的水平間距,通過3個角度參數就可以控制模型在不同位置的朝向。
模型的添加方式有以下4種:
1)鼠標點擊:通過操縱鼠標在視圖窗口上點擊左鍵來確定模型插入的位置。在屏幕上選取一個點后,通過ScreenToWorld函數將屏幕坐標轉換為經緯度,并在程序界面左邊的列表中顯示出來。要結束時只需雙擊鼠標左鍵,通過調用CreateModel函數將選定的模型按照選取的位置添加到圖中。該方法適合模型分布沒有規律的情況,還可以在雙擊前修改模型坐標列表的數據。

圖1 模型添加流程圖
2)直線定距:在指定直線上按照設定的間距添加模型。通過在視圖上選取起點和終點指定直線,首先調用ScreenToWorld函數將起終點坐標轉換為經緯度;然后調用GetDistance函數獲得兩點之間的水平距離以確定插入點的個數;調用GetAimingAngles函數獲取該直線與北方向的方位角α;接著按照式(1)計算各個插入點相對于直線起點的偏移量(ΔLi,ΔBi),偏 移 量 的 單 位 是 米;最 后 調 用ICoordSys3接口的MoveCoord函數將距離偏移量轉為經緯度方向的偏移量并加上起點經緯度,即可到得插入點坐標(Li,Bi)。該方法適用于多個模型直線分布的情況,如直線道路兩旁的路燈或樹木等。

式中,Δd為模型間的水平間距;i為模型插入點序號。
3)文件導入:讀取文件中的坐標數據添加模型。文件中每行代表一個插入點,一行有兩個數值,前者是經度或橫坐標,后者是緯度或縱坐標,以逗號或空格隔開。該方法適用于模型插入位置已知的情況。
4)數據庫導入:從指定數據庫中讀取插入點的坐標數據來添加模型。數據庫保存有各模型的位置信息,通過與數據庫的連接可獲取位置。適用于位置數據已保存在數據庫的情況。
另外,可以根據實際需要對添加方式進行擴展,例如模型分布特征是其他有規律的幾何形狀,那么按照該規律對應的數學公式來編寫代碼即可實現批量添加。
CreateModel函數的位置參數是經緯度,即大地坐標。使用“文件導入”或“數據庫導入”的方式添加景觀模型時,若已知的插入點坐標不是大地坐標,則需要進行坐標轉換,下面分兩種情況討論。
1)插入點坐標與地形模型使用相同的坐標系,即橢球參數相同,只需進行坐標形式的轉換。若插入點是高斯平面坐標(x,y),可使用高斯投影反算公式[5]將平面坐標轉為大地坐標。若插入點為空間直角坐標(X,Y,Z),可用式(2)計算大地坐標[6]。

2)插入點坐標與地形模型的坐標系不同,則需進行坐標系轉換。坐標系之間的轉換模型有布爾沙模型、莫洛金斯基模型、武測模型,另外還有一些學者對這些模型進行改進,得到更好的轉換效果,這里不再贅述,具體方法可查閱文獻[7—9]。
為方便管理模型的屬性信息,采用數據庫來存儲和管理這些數據是很有必要的。根據數字城市景觀模型的類型和信息,可以將具有相同或相似屬性的景觀模型歸到同一類。例如創建一個城市景觀模型數據庫,其中的兩個數據表及字段如下。
1)地下管線設施表:編號ID,名稱,上游點名,下游點名,主管部門代碼,主管部門名稱,所屬類型代碼,管徑,管厚,設計管壓,竣工日期,圖片,備注。
2)沿路公共設施表:編號ID,名稱,坐標X,坐標Y,高程H,水平轉角,前后傾角,左右傾角,主管部門代碼,主管部門名稱,權屬部門代碼,權屬部門名稱,所屬路段代碼,所屬路段名稱,數據來源,設施型號代碼,設施狀態,設施材料,設施顏色,圖片,備注。
對于污水井、通信管線井、自來水井等屬性信息相似的模型,可以存放在地下管線設施表中,路燈、郵筒、垃圾桶、樹木等可歸類到沿路公共設施表。
為了減少數據量,將圖片統一存放在指定文件夾里,數據表的圖片字段只記錄對應圖片的存放路徑。這樣對于同一種設施,其圖片是相同的,共用一張圖片即可。
模型添加到工程文件后,通過屬性編輯對話框完善信息,然后保存到數據庫中。若要查看某一路段所包含的公共設施,那么檢索路段代碼或路段名稱即可。數據庫的訪問采用DataGridView控件,它具有很好的配置性和擴展性,而且能訪問多種數據庫,如 SQL Server和 Access。
為驗證該方法的可行性,以Visual Studio 2008作為開發平臺,使用VB語言實現城市三維景觀模型的批量添加,并結合Access數據庫對模型屬性信息進行存儲。
在某一數字城市的地形場景模型(MPT文件)上添加路燈設施如圖2所示,以直線定距的方式添加路燈模型,通過設置方位角Yaw等調整偏向參數就可批量地控制模型的朝向。模型添加完畢后,通過在模型坐標列表中雙擊鼠標左鍵調出屬性編輯對話框(如圖3所示),即可輸入模型屬性信息并將數據入庫。

圖2 路燈模型
TerraExplorer Pro三維GIS平臺的功能強大,其二次開發包TerraDeveloper具有使用方便、易于實現、開發效率高等優點。本文基于TerraDeveloper實現了數字城市三維景觀模型的批量添加方法,不但提高了數字城市建模的工作效率,而且模型的位置精度也得以保證,降低了人為誤差。另外,使用數據庫對模型屬性數據進行存儲和管理更加安全和合理。批量添加的關鍵是計算每個模型的插入位置,因此可根據實際情況,對于具有一定規律分布的模型,建立相應的計算模型插入點位置的方法,例如某個小區的房屋模型是一樣的,模型間距相同,那么按照矩形的方式求解插入點坐標,即可實現批量添加。

圖3 屬性編輯
[1]施加松,劉建忠.3D GIS技術研究發展綜述[J].測繪科學,2005,30(5):117-119.
[2]唐楨,張新長,曹凱濱.基于Skyline的三維技術在城市規劃中的應用研究[J].測繪通報,2010(5):10-12.
[3]姚申君.基于 TerraDeveloper的三維 GIS開發研究[D].上海:華東師范大學,2008.
[4]梁吉欣,左小清.Skyline在Web三維GIS中的應用研究[J].昆明理工大學學報:理工版,2009,34(2):1-4.
[5]施一民.現代大地控制測量[M].北京:測繪出版社,2003:113-114.
[6]王解先,王軍,陸彩萍.WGS-84與北京54坐標的轉換問題[J].大地測量與地球動力學,2003,23(3):70-73.
[7]劉大杰,施一民,過靜珺.全球定位系統的原理和數據處理[M].上海:同濟大學出版社,2006:183-187.
[8]陳宇,白征東,羅騰.基于改進的布爾沙模型的坐標轉換方法[J].大地測量與地球動力學,2010,30(3):71-73.
[9]陳義,沈云中.非線性三維基準轉換的穩健估計[J].大地測量與地球動力學,2003,23(4):49-53.