張 棫,李 燃,林 瀚,寇崇暉
(閩江學(xué)院 地理科學(xué)系,福建 福州 350108)
基于ARCGISENGINE的校園三維虛擬沙盤(pán)設(shè)計(jì)
張 棫,李 燃,林 瀚,寇崇暉
(閩江學(xué)院 地理科學(xué)系,福建 福州 350108)
GIS作為一門(mén)綜合性技術(shù),不斷與其他技術(shù)相結(jié)合,特別是計(jì)算機(jī)技術(shù)的發(fā)展密切相關(guān).ArcGIS Engine帶來(lái)開(kāi)發(fā)平臺(tái)的靈活性,能夠使GIS功能嵌入非GIS軟件或?qū)⑵渌浖δ芤隚IS軟件平臺(tái).本文結(jié)合閩江學(xué)院校園三維虛擬沙盤(pán)來(lái)闡述利用ArcGIS Engine進(jìn)行地理信息系統(tǒng)二次開(kāi)發(fā)的原理和方法.
ArcGIS Engine;三維;虛擬沙盤(pán)
經(jīng)歷30多年的發(fā)展,GIS正在形成完整的技術(shù)系統(tǒng)并在建立其他理論體系,形成了多層次和不同尺度的應(yīng)用格局,成為信息產(chǎn)業(yè)的重要組成部分[1-2].GIS技術(shù)的應(yīng)用越來(lái)越廣泛,已廣泛應(yīng)用到國(guó)土、農(nóng)業(yè)、海洋、汽車(chē)導(dǎo)航、防災(zāi)、等各行業(yè)中[3-5].各種應(yīng)用型GIS系統(tǒng)也層出不窮,但傳統(tǒng)GIS的開(kāi)發(fā)存在很多弊端.傳統(tǒng)GIS開(kāi)發(fā)方式主要采用GIS平臺(tái)提供的宏命令語(yǔ)言,如ArcInfo的AML,加上龐大的函數(shù)、命令庫(kù),使得普通的開(kāi)發(fā)技術(shù)人員難以掌握,延長(zhǎng)了應(yīng)用產(chǎn)品的開(kāi)發(fā)周期.在數(shù)據(jù)管理方面,傳統(tǒng)GIS系統(tǒng)中的空間數(shù)據(jù)管理也存在不足[6].此外,傳統(tǒng)GIS系統(tǒng)與MIS系統(tǒng),多媒體開(kāi)發(fā)工具的兼容性都相對(duì)較差.傳統(tǒng)GIS開(kāi)發(fā)模式不靈活的開(kāi)發(fā)方式及昂貴的價(jià)格,在相當(dāng)大的程度上限制了GIS應(yīng)用領(lǐng)域的發(fā)展.采用組件技術(shù)把GIS的功能適當(dāng)抽象,以組件的形式供開(kāi)發(fā)者使用,帶來(lái)許多傳統(tǒng)GIS工具無(wú)法比擬的優(yōu)點(diǎn):小巧靈活,價(jià)格便宜,直接嵌入MIS開(kāi)發(fā)工具,強(qiáng)大的GIS功能,開(kāi)發(fā)簡(jiǎn)捷等.其典型代表是ESRI公司推出的產(chǎn)品——ArcGISEngine,使得GIS應(yīng)用開(kāi)發(fā)徹底地脫離了ArcGIS桌面平臺(tái),大大提高了GIS開(kāi)發(fā)的效率,極大地促進(jìn)了GIS的應(yīng)用開(kāi)發(fā)[7].用戶只需用ArcGIS Engine一個(gè)軟件包就可以開(kāi)發(fā)實(shí)用的有針對(duì)性的GIS,不僅方便了開(kāi)發(fā),還大大節(jié)約了開(kāi)發(fā)費(fèi)用.ArcGIS Engine的是地理信息系統(tǒng)的二次開(kāi)發(fā)的一個(gè)里程碑.
本文基于COM技術(shù)的ArcGIS Engine進(jìn)行地理信息系統(tǒng)的開(kāi)發(fā),并結(jié)合校園三維虛擬沙盤(pán)來(lái)說(shuō)明其開(kāi)發(fā)的原理和方法.
ArcGIS Engine是一個(gè)基于ArcObjects構(gòu)建的可編程的嵌入式GIS工具包.ArcGIS Engine是由一組核心的ArcObjects包組,與平臺(tái)無(wú)關(guān).它是一種新的部署策略和資源.開(kāi)發(fā)人員能利用ArcGIS Engine開(kāi)發(fā)出功能強(qiáng)大的GIS應(yīng)用系統(tǒng).ArcGIS Engine開(kāi)發(fā)包包括三個(gè)關(guān)鍵部分[8]:
2.1.1 控件
控件是ArcGIS用戶界面的組成部分,你可以嵌入并在你的應(yīng)用程序中使用.
2.1.2 工具條和工具
工具條是GIS工具的集合,在應(yīng)用程序中用它來(lái)和地圖和地理信息交互.
2.1.3 對(duì)象庫(kù)
對(duì)象庫(kù)是可編程ArcObjects組件的集合,包括幾何圖形到制圖、GIS數(shù)據(jù)源和geodatabase等一系列庫(kù).
COM(Component Object Model,組件對(duì)象模型)是一種以組件為發(fā)布單元的對(duì)象模型,COM是OLE和ActiveX共同的基礎(chǔ),COM不是一種面向?qū)ο蟮恼Z(yǔ)言,而是一種二進(jìn)制標(biāo)準(zhǔn)[9-10].COM所建立的是一個(gè)軟件模塊與另一軟件模塊之間的鏈接,當(dāng)這種鏈接建立之后,模塊之間就可以通過(guò)接口機(jī)制來(lái)進(jìn)行通信.COM接口是一組邏輯上相互關(guān)聯(lián)的操作,這些操作定義了某種行為,即這組操作的規(guī)范,而非特定的實(shí)現(xiàn),實(shí)質(zhì)是接口代表了接口調(diào)用者和實(shí)現(xiàn)者之間的一種約定.COM標(biāo)準(zhǔn)增加了保障系統(tǒng)和組件完整的安全機(jī)制,從而擴(kuò)展到分布式環(huán)境.
ArcGIS Engine可 以 在 Windows、UNIX 和Linux桌面上運(yùn)行并支持一系列的應(yīng)用軟件開(kāi)發(fā)環(huán)境,包括:Visual Basic 6,Microsoft Visual Studio.NET和Java開(kāi)發(fā)環(huán)境.因此ArcGIS Engine允許開(kāi)發(fā)者在自己熟悉的環(huán)境下進(jìn)行開(kāi)發(fā).ArcGIS Engine通常是通過(guò)添加控件、工具、菜單條和對(duì)象庫(kù),在應(yīng)用中嵌入GIS功能.以下結(jié)合校園三維虛擬沙盤(pán)詳細(xì)介紹其具體開(kāi)發(fā)方式.
(1)啟動(dòng) Microsoft Visual Studio 2005,并新建一個(gè)工程;
(2)工程命名為“三維虛擬沙盤(pán)校園”并保存該工程;
(3)右擊工程,選擇“添加引用(R)…”(見(jiàn)圖 1);
(4)在添加引用對(duì)話框中選擇所需要添加的庫(kù).

圖1 添加控件
(1)在設(shè)計(jì)模式下打開(kāi)Form1窗體;
(2)在窗體中添加相應(yīng)的控件;
(3) 再 將 PageLayoutControl、TOCControl 和ToolbarControl添加到窗體中;
(4)重新調(diào)整窗體上各控件的大小和位置;
(5)結(jié)合閩江學(xué)院三維虛擬沙盤(pán)校園的具體需要,設(shè)計(jì)最終窗體(見(jiàn)圖2).

圖2 校園地理信息系統(tǒng)窗體設(shè)計(jì)
對(duì)于此應(yīng)用程序,TOCControl和ToolbarControl控件將與PageLayoutControl相互協(xié)作,而不是MapControl,為此PageLayoutControl必須設(shè)置為綁定控件.TOCControl使用綁定的ActiveView顯示圖形、圖層和符號(hào),而位于ToolbarControl上的任何命令、工具或菜單項(xiàng)會(huì)受綁定控件的顯示影響.
可以用設(shè)置“屬性”的辦法設(shè)置綁定控件,如圖3和圖4:

圖3 ToolbarControl屬性頁(yè)

圖4 TOCControl屬性頁(yè)
也可以用代碼的形式實(shí)現(xiàn),代碼如下:

ArcGIS Engine提供了120多個(gè)命令和工具,它們能直接和 MapControl、PageLayoutControl和ToolbarControl相互協(xié)作.這些命令和工具提供了大量的GIS功能,包括地圖導(dǎo)航、屬性查詢、地物選擇等.在應(yīng)用程序中增加一些對(duì)本次開(kāi)發(fā)有用的命令和工具.
在Form_Load事件中的加載文檔代碼之前添加如下代碼:

和綁定控件協(xié)作的ToolbarControl增加ArcGIS Engine命令一樣,按照前面的步驟,可以從ArcGIS Engine命令創(chuàng)建彈出式菜單.下面將在應(yīng)用程序中增加與PageLayoutControl協(xié)作的彈出式菜單,當(dāng)在PageLayoutControl可視區(qū)域點(diǎn)擊鼠標(biāo)右鍵的時(shí)候,彈出式菜單將顯示.
在Form_Load事件中向ToolbarControl增加命令代碼的后面加載文檔代碼的前面增加如下代碼:

MapControl控件中的顯示的就是二維數(shù)據(jù),可在其中選擇元素并利用圖層加載的辦法,加載入SceneControl控件中.在SceneControl控件中便可進(jìn)行三維的顯示.
(1)添加一個(gè)新的窗體Form2,并在其中部署ToolBarControl控件和SceneControl控件,如圖5:

圖5 三維顯示窗體
(2)在Form1中添加axMapControl1_OnMouse-Down事件并添加下列代碼:

(3)最后在Form2的Load事件中添加下列代碼:

(4)運(yùn)行結(jié)果如圖6:

圖6 三維顯示結(jié)果(校園部分角落——食堂)
校園三維虛擬沙盤(pán)系統(tǒng)是對(duì)ArcGIS Engine二次開(kāi)發(fā)進(jìn)行的一次有意義的嘗試,開(kāi)發(fā)利用ArcGIS Engine的各個(gè)模塊之間的聯(lián)合,開(kāi)發(fā)出適合于三維虛擬沙盤(pán)校園的系統(tǒng).基于ArcGIS Engine的開(kāi)發(fā)與開(kāi)發(fā)平臺(tái)無(wú)關(guān),且各個(gè)組件之間能自由的組合開(kāi)發(fā)出各種各具特色的系統(tǒng).從運(yùn)行的結(jié)果分析,此次開(kāi)發(fā)基本達(dá)到了研究項(xiàng)目的目的,但由于研究系統(tǒng)的復(fù)雜性,在一些方面還不夠深入.通過(guò)以上的研究表明,利用ArcGIS Engine進(jìn)行二次開(kāi)發(fā)表明其具有開(kāi)發(fā)的簡(jiǎn)捷性、方便性、高效性等特點(diǎn),且能適合不同的開(kāi)發(fā)要求.
〔1〕丁院鋒,丁賢榮,趙吉祥.基于 ArcGIS Engine 實(shí)現(xiàn)河道工程對(duì)象3D建模[J].電腦開(kāi)發(fā)與應(yīng)用,2007(20)11:47-49.
〔2〕莊晨輝,陳銘潮,潘俊忠.林業(yè)資源管理地理信息系統(tǒng)的研制與開(kāi)發(fā)[J].福建林學(xué)院學(xué)報(bào),2005,25(1):1-4.
〔3〕張健.歐美大學(xué)校園規(guī)劃例程初探[D].重慶:重慶大學(xué),2004.
〔4〕鄒杰,鄒崢嶸,丁孝兵.基于 IMAGIS的城市三維景觀的構(gòu)建[J].城市勘測(cè),2005(6):16-18.
〔5〕朱慶,林琿.數(shù)碼城市地理信息系統(tǒng)——虛擬城市環(huán)境中的三維城市模型初探[M].武漢:武漢大學(xué)出版社,2004.
〔6〕劉曉艷,林琿,張宏.虛擬城市建設(shè)原理與方法[M].北京:科學(xué)出版社,2003.
〔7〕ArcGIS Engine Developer Guide[R].ESRI Corp,2007.
〔8〕沈百玲.ArcGIS Engine簡(jiǎn)介[J].中國(guó)通訊,ESRI中國(guó)(北京)有限公司,2003(10):3-5.
〔9〕吳柏青,魏仰蘇,蔣國(guó)明.基于COM原理的UML模型信息提取技術(shù)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(17):4099-4101.
〔10〕ESRI.Desktop Developers Guides.Environmental Systems Research Institute,Inc,2002.
P208
A
1673-260X(2012)03-0114-04