高 戀,李向新,穆寶勝
(昆明理工大學(xué)國土與資源工程學(xué)院,云南昆明 650093)
基于ArcEngine三維地形分析和可視化
高 戀,李向新,穆寶勝
(昆明理工大學(xué)國土與資源工程學(xué)院,云南昆明 650093)
基于ESRI公司提供的二次開發(fā)工具ArcEngine和C#編程語言,闡述了三維GIS的理論、方法及過程,實現(xiàn)了GIS數(shù)據(jù)的三維顯示以及部分三維分析功能。
三維GIS;三維可視化;ArcEngine;三維分析
隨著科技的發(fā)展,GIS越來越多的應(yīng)用于各行各業(yè)中。GIS所表達(dá)的地理信息是三維連續(xù)分布的,單純的二維地理信息系統(tǒng)不能真實地描述三維客觀世界[1-2],人們越來越多地要求從真三維空間來處理問題。例如,通過三維可視化可以實際地看到山谷及山脊的存在,而不需要從等高線數(shù)據(jù)推斷出山谷及山脊的存在[3]。迄今為止,目前國內(nèi)外還沒有一個成熟完整的三維GIS系統(tǒng),與三維GIS相關(guān)的系統(tǒng)大多集中在三維可視化方面,如EVS,Vis5D,Voxel,醫(yī)學(xué)可視化及各種CAD軟件等,也有一些三維系統(tǒng)部分實現(xiàn)三維GIS的功能,比較有名的軟件有LYNX,IVM(interactive volume modeling),GOCAD,I/EMS,SGM 等。對GIS的三維開發(fā)比較常用的是OpenGL,VRML等[4],這些都需要從底層開發(fā)做起,工作量大、開發(fā)周期長、成本高。三維GIS的研究亟待解決。
ESRI公司推出的組件式GIS開發(fā)工具ArcEngine是一組完備的并且打包的嵌入式組件庫和工具庫[5],使用它開發(fā)軟件用戶不需要從底層做起,只需要定制自己需要的組件到特定的功能。筆者就是采用ArcEngine技術(shù)對三維GIS進(jìn)行研究,基于C#編程語言實現(xiàn)三維的可視化及一些分析功能。
ArcEngine由開發(fā)工具和運行環(huán)境組成,支持多種開發(fā)語言,包括com,.net,java以及C++等,筆者采用VS2008(C#)來開發(fā)。在ArcEngine中用于三維開發(fā)的組件有SceneControl和GlobeControl,在此采用Scene-Control控件。SceneControl是一個高性能的嵌入式開發(fā)組件,提供給開發(fā)者建立和擴(kuò)展Scene程序,它相當(dāng)于ArcScene Desktop應(yīng)用程序中的三維視圖,并且提供了顯示和增加空間數(shù)據(jù)到三維的方法。SceneControl通過對象接口ISceneViewer來實現(xiàn),該接口提供對象Camera,該對象由Observer和Target構(gòu)成。SceneControl提供了一些屬性和方法來操作三維對象,如SceneGraph,Scene等屬性,LoadSx File方法等[3]。
結(jié)合開發(fā)研究的過程,現(xiàn)將其開發(fā)的過程與方案歸納如下。
1)系統(tǒng)界面設(shè)計。新建一個工程,添加如下控件:圖層控件ax TOCControl,三維顯示控件axSceneControl,工具欄控件ax Toolbar Control。通過屬性設(shè)置使ax Toolbar Control和ax TOCControl控件分別與axS-ceneControl控件進(jìn)行綁定。在代碼區(qū)引用必要的類庫:Carto,Analyst3D,Display,esriSystem,Data-SourcesFile,DataSourcesRaster,Geodatabase,Geometry,DataSourcesGDB,Geo Analyst,Catalog UI。在界面頂部添加菜單欄。
工具欄和菜單欄見圖1。
圖1 工具欄和菜單欄Fig.1 Toolbar and menubar
2)三維GIS實現(xiàn)功能的模塊設(shè)計。實現(xiàn)了加載DEM、加載TIN、疊加TIN、分層設(shè)色、坡度分析、通視分析、坡向分析、等高線提取功能。系統(tǒng)功能見圖2。
圖2 三維GIS的功能結(jié)構(gòu)圖Fig.2 Function structure of 3D GIS
1)加載數(shù)據(jù)。三維GIS的可視化即數(shù)據(jù)的三維顯示,首先需要加載數(shù)據(jù)。系統(tǒng)中以加載昆明市滇池地區(qū)的tiff格式的柵格數(shù)據(jù)為例,DEM數(shù)據(jù)加載需要用到2個組件類:Scene和SceneGraph。Scene是一個矢量、柵格和圖形數(shù)據(jù)顯示和處理的容器,該類實現(xiàn)了IScene接口,提供了控制Scene的方法和屬性[6],例如,Add Layer方法用于向場景中增加1個圖層。
SceneGraph是一個記錄在Scene中出現(xiàn)的數(shù)據(jù)和事件的容器,該類實現(xiàn)了ISceneGraph接口,提供了控制和處理Scene中圖形的方法和屬性,例如,Locate方法用于通過單擊場景中的任意點定位一個對象[3]。編程實現(xiàn)的主要語句為pRaster Layer.CreateFromDataset(pRaster Dataset);pScene.Add Layer(p Layer,true)。
2)疊加影像數(shù)據(jù)。DEM數(shù)據(jù)加載完后,需要使物體具有三維效果,就需要疊加影像數(shù)據(jù),使其具有地形起伏的三維效果。疊加影像數(shù)據(jù)需要用到組件類Tin Layer,Raster Layer,Tin3DProperties和Raster3DProperties。Tin Layer組件類用于創(chuàng)建Tin圖層對象,Raster Layer組件類用于創(chuàng)建Raster圖層對象,Tin3DProperties組件類用于創(chuàng)建Tin數(shù)據(jù)的三維場景屬性對象,Raster3DProperties組件類用于創(chuàng)建Raster數(shù)據(jù)的三維場景屬性對象[3]:
3)分層設(shè)色。通過分層設(shè)色可以使地貌高程分布及其相互對照鮮明,分層設(shè)色需要組件類是:AlgorithmicColor Ramp,RgbColor,Raster ClassifyColor Ramp Renderer,SimpleFillSymbol,Tin Elevation Renderer。主要實現(xiàn)語句如下:
通過以上步驟加上正確的編程語言來實現(xiàn),DEM圖像便具有三維效果并顯示出來。
1)坡度、坡向分析的介紹及具體實現(xiàn)過程。某一位置的坡度分析是水平面與局部地表之間的正切值,即高度變化的最大值比例,坡向是變化率最大的方向[3]。對某一位置的坡度、坡向分析有利于水利局及規(guī)劃局等部門做出正確的決策。在ArcEngine中實現(xiàn)這些功能需要用到下面幾個類和接口:Point,Raster Workspace,Raster Band,ISurfaceOp,IRaster AnalysisEnviroment等。坡度分析與坡向分析實現(xiàn)語言一致,坡度分析是用ISurfaceOp的Slope方法來實現(xiàn);坡向分析是用ISurfaceOp的Aspect方法來實現(xiàn)。筆者提取的數(shù)據(jù)是昆明市滇池地區(qū)的tiff格式數(shù)據(jù)。在此主要給出坡度分析的實現(xiàn)語句,如下:
坡度提取和坡向提取效果圖見圖3和圖4。
2)通視分析的介紹及主要實現(xiàn)語句。通視分析有很廣的應(yīng)用背景,如軍事上觀察敵人的活動區(qū)域,在這一區(qū)域中視線不能被遮擋。可應(yīng)用于旅游中的風(fēng)景評價、房地產(chǎn)中視線遮擋判斷以及通信中的信號覆蓋,或軍事上的火力覆蓋等多方面,由被覆蓋的可視面積反求待定位置與高度等。
通視分析要選擇一個目標(biāo)位置,而這個目標(biāo)位置可以是一個“點”,筆者就是在基于“點”的情況下的通視分析。需要有“點”文件的保存目錄,在surfaceOp.Visibility(raster GeoDataset,featureDataset,esriGeo-Analysis Visibility Enum.esriGeo Analysis Visibility Frequency)語句實現(xiàn)。
3)等高線提取的具體實現(xiàn)過程。筆者對規(guī)則格網(wǎng)的柵格數(shù)據(jù)進(jìn)行等高線提取。要設(shè)置高程的基準(zhǔn)面和等高線間距。主要是用ISurfaceOp的Contour方法來實現(xiàn)(roster Geo Dataset,interval,ref basecoutoar),方法中的第1個表示用于提取的柵格數(shù)據(jù),第2個表示等高線間距,第3個表示等高線的基準(zhǔn)高程。以GRID柵格圖像(GRID柵格圖像為某地區(qū)中的圖像,圖像名不知)為例,分別設(shè)置5 m和10 m不同的等高距,效果圖見圖5和圖6,可以清晰地看見10 m等高距的等高線比5 m等高距的等高線要稀疏很多。主要語句如下:
基于ArcEngine和C#編程語言實現(xiàn)了最常用的三維顯示及三維分析的坡度、坡向、通視、等高線提取功能。對于等高線的提取等三維分析功能,筆者的分析結(jié)果與Arc Map的分析結(jié)果是一致的,證明了結(jié)果的可行性。本研究結(jié)果即可作為獨立的系統(tǒng)運行,也可嵌入到其他系統(tǒng)中。但對于坡度、坡向的提取只是完成了定性的提取,至于定量的分析還有待進(jìn)一步研究。真正的三維開發(fā)是需要更多更新的技術(shù),三維GIS的實現(xiàn)遠(yuǎn)不止這些,在以后的研究中,將會更加深入的對此進(jìn)行研究。
[1]許捍衛(wèi),茆德柱,何 江.基于ArcEngine的GIS三維功能開發(fā)技術(shù)研究[J].測繪工程(Engineering of Surveying and Mapping),2006,15(6):50-53.
[2]李建成,郭建文,蓋迎春,等.基于ArcEngine的三維GIS的設(shè)計與實現(xiàn)[J].遙感技術(shù)與應(yīng)用(Remote Sensing Technology and Application),2009,24(3):395-398.
[3]邱洪鋼,張青蓮,陸紹強(qiáng).ArcGis Engine開發(fā)從入門到精通[M].北京:人民郵電出版社,2010.
[4]張嘯雷,王 冬.基于 ArcScene的三維 GIS實現(xiàn)的研究[J].城市勘測(Urban Geotechnical Investigation and Surveying),2010,26(4):26-28.
[5]韓 鵬,王 泉,王 鵬,等.地理信息系統(tǒng)開發(fā)——Arc Engine方法[M].武漢:武漢大學(xué)出版社,2008.
[6]史永忠,曹全龍.基于 ArcEngine的三維地形可視化系統(tǒng)的研究與開發(fā)[J].現(xiàn)代測繪(Modern Surveying and Mapping),2007,30(3):37-39.
3D GIS based on ArcEngine
GAO Lian,LI Xiang-xin,MU Bao-sheng
(Faculty of Land Resource Engineering,Kunming University of Science and Technology,Kunming Yunnan 650093,China)
This paper describes the theory,method and procedure of building up 3D GIS based on ArcEngine provided by ESRI Company and C#programming lauguage,and realizes some functions such as 3D visualization,3D analysis and so on.
3D GIS;3D visualization;ArcEngine;3D analysis
TP311.52;P208
A
1008-1542(2012)01-0061-04
2011-10-11;責(zé)任編輯:陳書欣
高 戀(1986-),女,河南滑縣人,碩士研究生,主要從事GIS的二次開發(fā)方面的研究。