程延鋒,王俊江,,曹紅艷,,王艷俠
(中國電波傳播研究所,,山東 青島 266107)
摘要:隨著三維可視化技術的高速發(fā)展和廣泛應用,,很多應用工程領域需要三維地理信息系統(tǒng)顯示空間數(shù)據(jù)。據(jù)此介紹了marble的特點和應用方式,,詳細論述使用VS2008和Qt構建marble源碼的基本過程,。應用實例表明,基于marble的空間數(shù)據(jù)三維圖形顯示真實,、形象,、直觀。
關鍵詞:三維可視化,;marble,;Qt;VS2008
0引言
隨著計算機技術和圖形技術的進步,,三維可視化技術得到了迅速的發(fā)展,,并廣泛應用到了軍事、地理和礦產(chǎn)等諸多領域[16],。為了對空間數(shù)據(jù)進行可視化應用研究,,相對于虛擬的二維地球平面載體,虛擬的三維地球模型作為載體更具有直觀性和真實性,,所以選擇三維地球模型作為載體,。考慮如果從底層開始建立比較實用的三維地球模型,,則需要大量的人力在很好的硬件環(huán)境下花費大量的時間和精力才可完成開發(fā)工作,,但是所做出的效果也不一定比目前流行的軟件好,。比如谷歌的Google Earth[5]就是一個典型的代表。然而,,Guogle Earth也有自身問題,,如存在三維數(shù)據(jù)的數(shù)據(jù)量巨大、代碼數(shù)量大,、操作繁瑣,、瀏覽速度慢及難以脫離專業(yè)軟件環(huán)境等缺點,而GNU下的marble[8]為解決這一問題提供了一個有效的途徑,。
1marble簡介和特點
marble是一個地理地圖集和虛擬桌面地球儀,,具有一套完整的地理位置信息,可以使用marble查找地點,,輕松地創(chuàng)建地圖,、測量距離以及檢索與位置相關細節(jié)。marble帶有一個小型數(shù)據(jù)庫,,如果可以連接互聯(lián)網(wǎng),,marble可以連接到流行的互聯(lián)網(wǎng)百科全書“維基百科”。marble提供了多種不同的視圖,,可以在線瀏覽地球上的地圖區(qū)域,,也可以把地圖區(qū)域下載下來,然后離線使用,。marble的所有特性都是由libMarble庫所提供的,。libMarble是基于Qt框架所建立的庫,Qt是一個多平臺的C++圖形用戶界面應用程序框架,,它為程序員開發(fā)多平臺應用程序提供了方便[9],。marble還有三個非常突出的優(yōu)點:
(1)marble是一個跨平臺的開源軟件,支持的操作系統(tǒng)包括Linux,、Windows,、Mac OS X和MeeGo Qt/C++;
(2)由于libMarble是基于模塊和插件的,,可根據(jù)需要在marble中嵌入自己所編寫的插件,;
(3)可以對由Keyhole標記語言(Keyhole Markup Language, KML)所編寫的文件進行解釋,把文件中所描述和保存的地理信息如點,、線,、面和3D模型展現(xiàn)出來。
2marble應用方式和源碼構建
2.1marble應用方式
基于marble自身的特點,,有兩種方式可以對空間數(shù)據(jù)進行可視化應用研究。
(1) 在marble中,,根據(jù)需要可以編寫特定功能的插件,,將對空間數(shù)據(jù)可視化的功能作為一個獨立的插件嵌入到marble中,;
(2) 通過編譯源代碼,生成對應的動態(tài)庫,,在動態(tài)庫的基礎上建立一個獨立的程序實現(xiàn)對空間數(shù)據(jù)可視化的應用研究,。
本文采用第二種方法實現(xiàn)對空間數(shù)據(jù)可視化的應用研究,其主要包括以下兩個方面,。
(1) 下載marble的源代碼,,然后通過cmake、Qt4和VS2008進行編譯和建立相應的動態(tài)庫marblewidgetd.dll,,在建立的程序中,,調用動態(tài)庫marblewidgetd.dll提供的MarbleWidget和zoomView等API生成虛擬三維地球模型。
(2) marble分層進行顯示,,可通過生成不同的層,,顯示對應的不同場景,繼承LayerInterface類,,在層上實現(xiàn)三維圖形的顯示,、旋轉、平移,、縮放和漫游等功能,。
2.2marble源碼構建
以下是編譯marble的具體步驟,操作系統(tǒng)采用Windows,。
(1)安裝所需要的軟件以及配置相關環(huán)境
?、侔惭bVS2008;
?、诎惭bQt,,同時把安裝路徑加入到系統(tǒng)的環(huán)境變量中;
?、郯惭bQtVSaddin,;
④安裝cmake,;
?、菹螺dmarble源代碼。
(2)cmake marble源代碼,,在cmake gui配置文件中,,輸入marble源代碼的位置和marble源代碼的構建位置。
(3)在cmake中點擊“configure”按鈕,,選擇Visual Studio 9 2008,。
(4)點擊“Generate”生成marble對應的工程。
(5)用VS2008打開上步生成的marble工程,,進行構建,。
(6)構建完成后,,進行安裝,從而將庫和可執(zhí)行文件默認安裝在C:\\Program Files\\marble,。
此時,,可以采用調用其生成的動態(tài)庫marblewidgetd.dll和靜態(tài)庫marblewidgetd.lib進行三維可視化的應用。
3應用實例
下面通過繪制地域網(wǎng)格實例說明基于marble的應用開發(fā)方法及其三維效果,。以三維圖形組件庫為基礎,,子類化marble的MarbleWidget類,實現(xiàn)了三維可視化窗體空間,,該控件可以插入到其他Qt窗體控件中,,通過Qt中信號和槽的消息通信機制實現(xiàn)三維的顯示和交互,具體步驟如下,。
(1) marblewidgetd.dll,、marblewidgetd.lib和相關數(shù)據(jù)文件放到繪制地域網(wǎng)格工程目錄之下;
(2) 在定義MarbleWidget類的對象的頭文件中,,加入如下代碼:
//定義MarbleWidget類的頭文件
#include <marble/MarbleWidget.h>
//定義繼承LayerInterface類的頭文件
#include "reglayer.h"
using namespace Marble;
MarbleWidget* m_pWgt;
reglayer * m_pLayer;
(3) 在定義MarbleWidget類的源文件中,,主要加入如下代碼:
//申請marble對象
m_pWgt = newMarbleWidget(this);
m_pWgt->setGeometry(QRect(0,0,500,500));
//加入主題地圖紋理
m_pWgt->setMapThemeId("earth/srtm.dgml")
//marble初始大小
m_pWgt->zoomView(1500);
……
//申請對應的圖層
m_pLayer = new QregLayer(m_pWgt);
//圖層加入marble
m_pWgt->map()->addLayer(m_pLayer);
(4)在定義的reglayer層中,render()是主要的繪制地域網(wǎng)格等圖形三維顯示的函數(shù),;以經(jīng)度50°,、緯度10°為圖1基于marble的地域網(wǎng)格中心,6°一個方位(60個方位),,400 km一個距離段(10個距離段),,繪制一個圓形的地域網(wǎng)格,其效果圖如圖1所示,。
4結論
本文進行了基于marble的三維可視化研究,,包括marble的編譯、安裝以及如何應用,;基于marble的空間數(shù)據(jù)顯示真實,、形象、直觀,,三維可視化效果好,。基于marble的三維顯示已應用在很多實際項目中,,解決了很多實際問題,,具有很好的實用與經(jīng)濟價值。
參考文獻
?。?] 楊富民,,萬剛,李鋒.復雜戰(zhàn)場電磁態(tài)勢三維可視化研究[J].測繪工程,2012, 21(2): 3538.
?。?] 潘立武.基于地理信息系統(tǒng)技術的潰壩洪水三維可視化研究[J].北京聯(lián)合大學學報,,2013, 27(4): 1923.
[3] 宋潔華,,郝君,趙志忠,,等.基于ArcGIS Engine的三維地理信息軟件設計與應用[J].海南師范大學學報(自然科學版),, 2009, 22(3): 326330.
[4] 申皓,,劉青昆,,龔蔚青.基于OSG的油藏三維可視化系統(tǒng)研究[J].微型機與應用,2014, 23(8) : 3234.
?。?] 史曉亮.基于Google Earth的潘家窯工區(qū)煤田三維地震勘探的技術應用[J].工程地理物理學報,,2014, 11(4): 457461.
[6] 劉家學,,鄧飛.基于OSG的飛機3D維修多場景動態(tài)調度方法[J].電子技術應用,,2014, 40(2):118121.