国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

KMZ文件批量加載WorldWind的研究與實(shí)現(xiàn)

2014-08-14 05:21劉洋洋
電腦知識(shí)與技術(shù) 2014年19期
關(guān)鍵詞:三維模型

摘要:WorldWind是美國(guó)航天宇航局(NASA)研發(fā)的一款三維地理信息系統(tǒng)軟件。由于WorldWind每次只能加載單個(gè)KMZ模型文件,加載效率過(guò)低,所以給基于WorldWind三維模型加載的科學(xué)研究來(lái)帶來(lái)了很大的不便?;趙orldwind對(duì)KMZ文件批量加載的需求,該文通過(guò)分析KMZ文件內(nèi)部結(jié)構(gòu),改進(jìn)了WorldWind中用于KMZ文件加載的相關(guān)代碼,最終實(shí)現(xiàn)了KMZ文件在worldwind中的批量加載,為基于worldwind的后續(xù)研究提供了便利。

關(guān)鍵詞:WorldWind;KMZ文件;三維模型;模型加載

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)19-4574-03

KMZ File Bulk Loading WorldWind Research and Implementation

LIU Yang-yang

(College of Surveying and Mapping,Henan Polytechnic University , Jiaozuo 454003, China)

Abstract:WorldWind is the U.S. space agency (NASA) produced a three-dimensional geographic information system software. WorldWind without their own 3 d model file format, just provide a. Point x file loading interface. Because of the limitation of format is required when the 3 d model implanted WorldWind through commercial plugin to convert the format first, then to load, so that to scientific research to a lot of inconvenience, 3 d model and easy to lose in the process of transformation of material, layer, and other important information. Based on load demand, this paper analyzes KMZ file internal structure, improve the load in the WorldWind class code, created the KML file loading port WorldWind programs. Finally, through further research, this paper realizes the KMZ model bulk loading WorldWind, and based on the three-dimensional model for subsequent ray tracing study to lay a solid foundation.

Key words:WorldWind;KMZ file;3D Model;model loading

WorldWind是美國(guó)航天宇航局(NASA推出的一款完全開(kāi)放源代碼的三維地理信息系統(tǒng)軟件。不同于面向大眾的GooleEarth,worldwind是一款專門用于科研開(kāi)發(fā)的三維地理信息系統(tǒng)軟件。通過(guò)研究發(fā)現(xiàn),在模型加載方面,WorldWind提供了一個(gè).x文件的加載接口,通過(guò)該接口可加載KML文件。如果要加載KMZ文件,需要根據(jù)KML文件中的鏈接,加載DAE文件,從而實(shí)現(xiàn)對(duì)KMZ文件的加載。但由于系統(tǒng)原因,每次只能加載一個(gè)KMZ文件,這對(duì)基于worldwind進(jìn)行開(kāi)發(fā)的科研人員造成了很大不便?;趯?duì)KMZ文件批量加載的需求,該文對(duì)KMZ文件進(jìn)行了拆分和解析,了解其加載原理后改進(jìn)了WorldWind中用于KMZ文件加載的相關(guān)代碼,最終實(shí)現(xiàn)了KMZ文件在WorldWind中的批量加載。

1 虛擬地球儀WorldWind

WorldWind(簡(jiǎn)稱WW,中文直譯為世界風(fēng)),俗稱地球放大鏡,是美國(guó)航天宇航局(NASA)阿莫斯研究中心的科研人員研發(fā)的一款完全開(kāi)放源代碼的地理科普軟件。得益于NASA強(qiáng)大的硬件條件,WorldWind可以利用SRTM、MODIS、GLOBE等多顆衛(wèi)星的數(shù)據(jù),將航天飛機(jī)雷達(dá)遙感數(shù)據(jù)和Landmark衛(wèi)星的圖像結(jié)合在一起,讓用戶體驗(yàn)遨游三維地球的感覺(jué)[1]。

基本功能方面,用戶可以通過(guò)WorldWind在所觀察的形象和模型上隨意地旋轉(zhuǎn)、放大、縮小。同時(shí)還可以觀看到地面和行政區(qū)劃分,而且WorldWind還包含一個(gè)軟件包,使用戶能夠通過(guò)這個(gè)去瀏覽地圖以及其他由因特網(wǎng)上的OpenGIS Web Mapping Service提供的圖像。

相對(duì)于GoogleEarth,WorldWind有兩大優(yōu)點(diǎn)[2]:

首先,WorldWind是個(gè)開(kāi)放軟件,允許用戶對(duì)WorldWind軟件本身進(jìn)行任意的修改。在這一點(diǎn)上,WorldWind繼承了NASA開(kāi)放自由的傳統(tǒng),公開(kāi)全部代碼,科研開(kāi)發(fā)人員可以按照自己的需求來(lái)改進(jìn)其中的代碼。作為一個(gè)開(kāi)放軟件,為了滿足廣大用戶的需要,WorldWind提供了兩種版本的開(kāi)源代碼,分別為Java版本和C#版本,Java版本支持B/S模式,C#版本支持C/S模式,該文將以Java版為例進(jìn)行研究,WorldWind版本為1.5.0版。

其次,WorldWind最大的特點(diǎn)就是其衛(wèi)星數(shù)據(jù)的自動(dòng)更新能力。這種能力讓W(xué)orldWind具有在世界范圍內(nèi)跟蹤天氣變化、近期事件、洪澇、火災(zāi)、海嘯等情況的能力,同時(shí)NASA還提供了一系列演示動(dòng)畫(huà),模擬季節(jié)變遷、全球颶風(fēng)動(dòng)態(tài)等全球活動(dòng)。而且WorldWind可以通過(guò)軟件接口直接播放動(dòng)畫(huà),顯示Golobe數(shù)據(jù)。在指定時(shí)間范圍內(nèi),用戶可以查看云量、氣溫、降水等數(shù)據(jù)。另外WorldWind包含了全部的國(guó)界、城市、交通、經(jīng)緯線以及其他可供參考的測(cè)層,同時(shí)還可以把從GPS接收機(jī)接收的數(shù)據(jù)以及其坐標(biāo)顯示在三維地球上。WorldWind軟件界面如圖1所示。endprint

圖1 worldwind窗口界面

2 解析KMZ文件

2.1 KMZ

KMZ是Google Earth默認(rèn)的輸出文件格式,是一個(gè)經(jīng)過(guò)ZIP格式壓縮過(guò)的KML文件,KMZ文件解壓縮后,一般會(huì)有3個(gè)文件。

Images文件夾:存儲(chǔ)三維模型的背景和紋理畫(huà)片等(其中有一個(gè)或多個(gè)文件)。

models文件夾:包含三維模型點(diǎn)線面構(gòu)造信息的DAE文件 (其中有一個(gè)或多個(gè)文件)。

doc.kml文件:KML文件主要起到調(diào)用DAE文件的作用,提供三維模型在 WorldWind上的坐標(biāo)位置、大小比例等屬性。

2.2 KML和DAE

KML是一種文件格式,一般用于在地球?yàn)g覽器中顯示數(shù)據(jù)。在這之前,通常是應(yīng)用在GoogelEarth中。KML最初由Keyhole公司開(kāi)發(fā),是一種基于XML語(yǔ)法與格式的、用于描述和保存地理信息(如點(diǎn)、線、圖像、多邊形和模型等)的編碼規(guī)范。GoogleEarth和GoogleMaps處理KML文件的方式與網(wǎng)絡(luò)瀏覽器處理HTML和XML文件的方式類似,像HTML一樣,KML使用包含名稱、屬性的標(biāo)簽(tag)來(lái)確定顯示方式。所以基于這個(gè)特性,GoogleEarth和GoogleMaps一般被視為KML文件瀏覽器[3]。

KML是一個(gè)通過(guò)標(biāo)記來(lái)實(shí)現(xiàn)相關(guān)功能的文件,在它的內(nèi)部代碼里面定義了大量的標(biāo)記信息,在其內(nèi)部代碼里面,沒(méi)有儲(chǔ)存三維模型的點(diǎn)、線、面、材質(zhì)、圖層等基本信息,只是提供了一個(gè)定位三維模型位置的坐標(biāo)信息。通過(guò)對(duì)其內(nèi)部代碼的解析,該文發(fā)現(xiàn)KML文件是通過(guò)鏈接對(duì)應(yīng)的dae文件來(lái)實(shí)現(xiàn)對(duì)模型信息(點(diǎn)、線、面、材質(zhì)、圖層等)的讀取。KML鏈接的DAE文件采用哈希表的數(shù)字矩陣來(lái)實(shí)現(xiàn)點(diǎn)組成線、線組成面或者直接由點(diǎn)組成面,最后由面來(lái)組成模型。以此來(lái)對(duì)WorldWind里面開(kāi)源代碼的解析,找到能讀取dae文件的相關(guān)類[4]。

Dae是英文Digital Aseet Exchange的縮寫(xiě),意思為數(shù)據(jù)資源交換,Dae是COLLADA的模型文件。Dae文件其實(shí)就是一個(gè)文本文件,其中的內(nèi)容是基于XML格式模型的COLLADA描述,實(shí)質(zhì)上是一個(gè)XML文檔,所以可以將.dae的后綴名改為.xml,或者根據(jù)不同的應(yīng)用程序需要將其改成其他任何后綴名稱[5]。

COLLADA是由索尼(sony)提出的基于XML的一個(gè)開(kāi)放的、免費(fèi)的數(shù)據(jù)交換標(biāo)準(zhǔn),通過(guò)XML Schema的技術(shù)展現(xiàn)三位數(shù)字模型,由于COLLADA基于XML技術(shù),所以這個(gè)標(biāo)準(zhǔn)具有十分優(yōu)秀的一致性,居于不同平臺(tái)的實(shí)時(shí)引擎只要支持這個(gè)保準(zhǔn),就可以實(shí)現(xiàn)三維模型。

2.3 KMZ加載WorldWind

通過(guò)對(duì)WorldWind中相關(guān)代碼的研究,該文發(fā)現(xiàn)WorldWind中只提供了加載KML文件的接口類KMLViewer.java,并沒(méi)有直接提供KMZ文件的加載類。在加載KMZ文件之前,WorldWind會(huì)首先找到KML文件,提取里面的地理坐標(biāo)信息,并通過(guò)KML里面的超鏈接找到所對(duì)應(yīng)的dae文件,提取三維模型的具體點(diǎn)線面信息,從而呈現(xiàn)一個(gè)完整的KMZ三維模型文件。加載效果如圖2所示。

3 KMZ批量加載WorldWind

由于本文以Java版WorldWind為例來(lái)實(shí)現(xiàn)KMZ的批量植入,所以在實(shí)驗(yàn)之前,需要先配置Java環(huán)境[6]。系統(tǒng)環(huán)境搭建完成后,開(kāi)始進(jìn)行KMZ批量加載的相關(guān)實(shí)驗(yàn)。首先,根據(jù)實(shí)驗(yàn)需要,要選取大量的KMZ文件作為實(shí)驗(yàn)對(duì)象。手動(dòng)制作KMZ文件費(fèi)時(shí)費(fèi)力,為了提高實(shí)驗(yàn)效率,該文通過(guò)互聯(lián)網(wǎng)從Sketch UP的三維模型庫(kù)中下載了一定數(shù)量的KMZ文件。在KMZ文件選擇上,選擇了模型資源較為豐富的美國(guó)華盛頓某處,范圍為3000*3000(m)。KMZ文件下載完成后,把下載好的KMZ 文件統(tǒng)一存放到一個(gè)文件夾中。然后在加載類中創(chuàng)建一個(gè)加載接口,該接口與存放KMZ文件的文件夾相連接,然后添加WorldWind優(yōu)先選擇并加載該文件夾文件的代碼,在WorldWind啟動(dòng)后,球體便會(huì)自動(dòng)旋轉(zhuǎn)至KMZ文件加載區(qū)域。根據(jù)不同的需要,可改變文件夾的位置和名稱,以及在里面添加新的KMZ文件,這種方式簡(jiǎn)單易操作,很大程度上提高了KMZ文件加載的效率。相關(guān)代碼如下圖所示。

File file = new File("F:\\washonton\\available\\624.kmz");

new WorkerThread(file, af).start();

String strPath = "F:\\washonton\\available";

String strPath = "F:\\washonton\\olympic park";

File dir = new File(strPath);

File[] files = dir.listFiles();

if (files == null)

return;

for (int i = 0; i < files.length; i++) {

File file = new File(strPath+files[i].getName());

new WorkerThread(file, af).start();

}

kmlAppController.moveTo(kmlRoot.getFeature());

代碼改進(jìn)完成后,運(yùn)行WorldWind,發(fā)現(xiàn)球體加載了代碼中所示的washonton文件夾中的全部KMZ文件,并自動(dòng)旋轉(zhuǎn)到了與KMZ文件相對(duì)應(yīng)的地理坐標(biāo)位置。如圖所示。

圖3 KMZ文件批量加載效果 (下轉(zhuǎn)第4606頁(yè))

(上接第4576頁(yè))

4 結(jié)論

本文通過(guò)對(duì)KMZ文件內(nèi)部結(jié)構(gòu)的研究,改進(jìn)了worldwind中的部分源代碼,成功解決了KMZ文件批量加載worldwind的問(wèn)題,讓KMZ文件從單一加載模式變?yōu)橐晕募A方式集體自動(dòng)加載,減去了不必要的加載步驟,使得KMZ文件加載變的簡(jiǎn)單易操作,大大的提高了KMZ文件的加載效率。WorldWind作為一個(gè)開(kāi)放的三維地理信息系統(tǒng)平臺(tái),以后會(huì)被越來(lái)越多的科研開(kāi)發(fā)人員進(jìn)行研究和改進(jìn)。該文站在前人的基礎(chǔ)上,對(duì)WorldWind加載KMZ文件的問(wèn)題進(jìn)行了一定的擴(kuò)展和改進(jìn),為后續(xù)研究開(kāi)發(fā)WorldWind提供了一定的便利。

參考文獻(xiàn):

[1] Ulf Assarsson & Tomas Moller.Optimized.View Frustum Culling Algorithms for Bounding Boxes[J].Journal of Graphics Tools,2000(1):9-22.

[2] 賈文玨. Google Earth 和 World Wind 比較研究[J].國(guó)土資源信化,2006(5):45-48.

[3] 于淑云,馬繼軍.基于WorldWind的三維模型植入研究[J].電腦知識(shí)與技術(shù), 2011(7):7356-7357.

[4] 袁琦,閔棟,鄒俊偉.KML文件的信息隱藏技術(shù)[J].北京郵電大學(xué)學(xué)報(bào),2011(1):140-144.

[5] 陳丹桂.Java的DAE引擎研究[J].Computer Era,2009(7):30-32.

[6] 盧海濱,鄭文鋒,銀正彤,等.NASA WorldWind JavaSDK數(shù)字地球客戶端開(kāi)發(fā)[J].測(cè)繪科學(xué),2009(5):169-170.

圖1 worldwind窗口界面

2 解析KMZ文件

2.1 KMZ

KMZ是Google Earth默認(rèn)的輸出文件格式,是一個(gè)經(jīng)過(guò)ZIP格式壓縮過(guò)的KML文件,KMZ文件解壓縮后,一般會(huì)有3個(gè)文件。

Images文件夾:存儲(chǔ)三維模型的背景和紋理畫(huà)片等(其中有一個(gè)或多個(gè)文件)。

models文件夾:包含三維模型點(diǎn)線面構(gòu)造信息的DAE文件 (其中有一個(gè)或多個(gè)文件)。

doc.kml文件:KML文件主要起到調(diào)用DAE文件的作用,提供三維模型在 WorldWind上的坐標(biāo)位置、大小比例等屬性。

2.2 KML和DAE

KML是一種文件格式,一般用于在地球?yàn)g覽器中顯示數(shù)據(jù)。在這之前,通常是應(yīng)用在GoogelEarth中。KML最初由Keyhole公司開(kāi)發(fā),是一種基于XML語(yǔ)法與格式的、用于描述和保存地理信息(如點(diǎn)、線、圖像、多邊形和模型等)的編碼規(guī)范。GoogleEarth和GoogleMaps處理KML文件的方式與網(wǎng)絡(luò)瀏覽器處理HTML和XML文件的方式類似,像HTML一樣,KML使用包含名稱、屬性的標(biāo)簽(tag)來(lái)確定顯示方式。所以基于這個(gè)特性,GoogleEarth和GoogleMaps一般被視為KML文件瀏覽器[3]。

KML是一個(gè)通過(guò)標(biāo)記來(lái)實(shí)現(xiàn)相關(guān)功能的文件,在它的內(nèi)部代碼里面定義了大量的標(biāo)記信息,在其內(nèi)部代碼里面,沒(méi)有儲(chǔ)存三維模型的點(diǎn)、線、面、材質(zhì)、圖層等基本信息,只是提供了一個(gè)定位三維模型位置的坐標(biāo)信息。通過(guò)對(duì)其內(nèi)部代碼的解析,該文發(fā)現(xiàn)KML文件是通過(guò)鏈接對(duì)應(yīng)的dae文件來(lái)實(shí)現(xiàn)對(duì)模型信息(點(diǎn)、線、面、材質(zhì)、圖層等)的讀取。KML鏈接的DAE文件采用哈希表的數(shù)字矩陣來(lái)實(shí)現(xiàn)點(diǎn)組成線、線組成面或者直接由點(diǎn)組成面,最后由面來(lái)組成模型。以此來(lái)對(duì)WorldWind里面開(kāi)源代碼的解析,找到能讀取dae文件的相關(guān)類[4]。

Dae是英文Digital Aseet Exchange的縮寫(xiě),意思為數(shù)據(jù)資源交換,Dae是COLLADA的模型文件。Dae文件其實(shí)就是一個(gè)文本文件,其中的內(nèi)容是基于XML格式模型的COLLADA描述,實(shí)質(zhì)上是一個(gè)XML文檔,所以可以將.dae的后綴名改為.xml,或者根據(jù)不同的應(yīng)用程序需要將其改成其他任何后綴名稱[5]。

COLLADA是由索尼(sony)提出的基于XML的一個(gè)開(kāi)放的、免費(fèi)的數(shù)據(jù)交換標(biāo)準(zhǔn),通過(guò)XML Schema的技術(shù)展現(xiàn)三位數(shù)字模型,由于COLLADA基于XML技術(shù),所以這個(gè)標(biāo)準(zhǔn)具有十分優(yōu)秀的一致性,居于不同平臺(tái)的實(shí)時(shí)引擎只要支持這個(gè)保準(zhǔn),就可以實(shí)現(xiàn)三維模型。

2.3 KMZ加載WorldWind

通過(guò)對(duì)WorldWind中相關(guān)代碼的研究,該文發(fā)現(xiàn)WorldWind中只提供了加載KML文件的接口類KMLViewer.java,并沒(méi)有直接提供KMZ文件的加載類。在加載KMZ文件之前,WorldWind會(huì)首先找到KML文件,提取里面的地理坐標(biāo)信息,并通過(guò)KML里面的超鏈接找到所對(duì)應(yīng)的dae文件,提取三維模型的具體點(diǎn)線面信息,從而呈現(xiàn)一個(gè)完整的KMZ三維模型文件。加載效果如圖2所示。

3 KMZ批量加載WorldWind

由于本文以Java版WorldWind為例來(lái)實(shí)現(xiàn)KMZ的批量植入,所以在實(shí)驗(yàn)之前,需要先配置Java環(huán)境[6]。系統(tǒng)環(huán)境搭建完成后,開(kāi)始進(jìn)行KMZ批量加載的相關(guān)實(shí)驗(yàn)。首先,根據(jù)實(shí)驗(yàn)需要,要選取大量的KMZ文件作為實(shí)驗(yàn)對(duì)象。手動(dòng)制作KMZ文件費(fèi)時(shí)費(fèi)力,為了提高實(shí)驗(yàn)效率,該文通過(guò)互聯(lián)網(wǎng)從Sketch UP的三維模型庫(kù)中下載了一定數(shù)量的KMZ文件。在KMZ文件選擇上,選擇了模型資源較為豐富的美國(guó)華盛頓某處,范圍為3000*3000(m)。KMZ文件下載完成后,把下載好的KMZ 文件統(tǒng)一存放到一個(gè)文件夾中。然后在加載類中創(chuàng)建一個(gè)加載接口,該接口與存放KMZ文件的文件夾相連接,然后添加WorldWind優(yōu)先選擇并加載該文件夾文件的代碼,在WorldWind啟動(dòng)后,球體便會(huì)自動(dòng)旋轉(zhuǎn)至KMZ文件加載區(qū)域。根據(jù)不同的需要,可改變文件夾的位置和名稱,以及在里面添加新的KMZ文件,這種方式簡(jiǎn)單易操作,很大程度上提高了KMZ文件加載的效率。相關(guān)代碼如下圖所示。

File file = new File("F:\\washonton\\available\\624.kmz");

new WorkerThread(file, af).start();

String strPath = "F:\\washonton\\available";

String strPath = "F:\\washonton\\olympic park";

File dir = new File(strPath);

File[] files = dir.listFiles();

if (files == null)

return;

for (int i = 0; i < files.length; i++) {

File file = new File(strPath+files[i].getName());

new WorkerThread(file, af).start();

}

kmlAppController.moveTo(kmlRoot.getFeature());

代碼改進(jìn)完成后,運(yùn)行WorldWind,發(fā)現(xiàn)球體加載了代碼中所示的washonton文件夾中的全部KMZ文件,并自動(dòng)旋轉(zhuǎn)到了與KMZ文件相對(duì)應(yīng)的地理坐標(biāo)位置。如圖所示。

圖3 KMZ文件批量加載效果 (下轉(zhuǎn)第4606頁(yè))

(上接第4576頁(yè))

4 結(jié)論

本文通過(guò)對(duì)KMZ文件內(nèi)部結(jié)構(gòu)的研究,改進(jìn)了worldwind中的部分源代碼,成功解決了KMZ文件批量加載worldwind的問(wèn)題,讓KMZ文件從單一加載模式變?yōu)橐晕募A方式集體自動(dòng)加載,減去了不必要的加載步驟,使得KMZ文件加載變的簡(jiǎn)單易操作,大大的提高了KMZ文件的加載效率。WorldWind作為一個(gè)開(kāi)放的三維地理信息系統(tǒng)平臺(tái),以后會(huì)被越來(lái)越多的科研開(kāi)發(fā)人員進(jìn)行研究和改進(jìn)。該文站在前人的基礎(chǔ)上,對(duì)WorldWind加載KMZ文件的問(wèn)題進(jìn)行了一定的擴(kuò)展和改進(jìn),為后續(xù)研究開(kāi)發(fā)WorldWind提供了一定的便利。

參考文獻(xiàn):

[1] Ulf Assarsson & Tomas Moller.Optimized.View Frustum Culling Algorithms for Bounding Boxes[J].Journal of Graphics Tools,2000(1):9-22.

[2] 賈文玨. Google Earth 和 World Wind 比較研究[J].國(guó)土資源信化,2006(5):45-48.

[3] 于淑云,馬繼軍.基于WorldWind的三維模型植入研究[J].電腦知識(shí)與技術(shù), 2011(7):7356-7357.

[4] 袁琦,閔棟,鄒俊偉.KML文件的信息隱藏技術(shù)[J].北京郵電大學(xué)學(xué)報(bào),2011(1):140-144.

[5] 陳丹桂.Java的DAE引擎研究[J].Computer Era,2009(7):30-32.

[6] 盧海濱,鄭文鋒,銀正彤,等.NASA WorldWind JavaSDK數(shù)字地球客戶端開(kāi)發(fā)[J].測(cè)繪科學(xué),2009(5):169-170.

圖1 worldwind窗口界面

2 解析KMZ文件

2.1 KMZ

KMZ是Google Earth默認(rèn)的輸出文件格式,是一個(gè)經(jīng)過(guò)ZIP格式壓縮過(guò)的KML文件,KMZ文件解壓縮后,一般會(huì)有3個(gè)文件。

Images文件夾:存儲(chǔ)三維模型的背景和紋理畫(huà)片等(其中有一個(gè)或多個(gè)文件)。

models文件夾:包含三維模型點(diǎn)線面構(gòu)造信息的DAE文件 (其中有一個(gè)或多個(gè)文件)。

doc.kml文件:KML文件主要起到調(diào)用DAE文件的作用,提供三維模型在 WorldWind上的坐標(biāo)位置、大小比例等屬性。

2.2 KML和DAE

KML是一種文件格式,一般用于在地球?yàn)g覽器中顯示數(shù)據(jù)。在這之前,通常是應(yīng)用在GoogelEarth中。KML最初由Keyhole公司開(kāi)發(fā),是一種基于XML語(yǔ)法與格式的、用于描述和保存地理信息(如點(diǎn)、線、圖像、多邊形和模型等)的編碼規(guī)范。GoogleEarth和GoogleMaps處理KML文件的方式與網(wǎng)絡(luò)瀏覽器處理HTML和XML文件的方式類似,像HTML一樣,KML使用包含名稱、屬性的標(biāo)簽(tag)來(lái)確定顯示方式。所以基于這個(gè)特性,GoogleEarth和GoogleMaps一般被視為KML文件瀏覽器[3]。

KML是一個(gè)通過(guò)標(biāo)記來(lái)實(shí)現(xiàn)相關(guān)功能的文件,在它的內(nèi)部代碼里面定義了大量的標(biāo)記信息,在其內(nèi)部代碼里面,沒(méi)有儲(chǔ)存三維模型的點(diǎn)、線、面、材質(zhì)、圖層等基本信息,只是提供了一個(gè)定位三維模型位置的坐標(biāo)信息。通過(guò)對(duì)其內(nèi)部代碼的解析,該文發(fā)現(xiàn)KML文件是通過(guò)鏈接對(duì)應(yīng)的dae文件來(lái)實(shí)現(xiàn)對(duì)模型信息(點(diǎn)、線、面、材質(zhì)、圖層等)的讀取。KML鏈接的DAE文件采用哈希表的數(shù)字矩陣來(lái)實(shí)現(xiàn)點(diǎn)組成線、線組成面或者直接由點(diǎn)組成面,最后由面來(lái)組成模型。以此來(lái)對(duì)WorldWind里面開(kāi)源代碼的解析,找到能讀取dae文件的相關(guān)類[4]。

Dae是英文Digital Aseet Exchange的縮寫(xiě),意思為數(shù)據(jù)資源交換,Dae是COLLADA的模型文件。Dae文件其實(shí)就是一個(gè)文本文件,其中的內(nèi)容是基于XML格式模型的COLLADA描述,實(shí)質(zhì)上是一個(gè)XML文檔,所以可以將.dae的后綴名改為.xml,或者根據(jù)不同的應(yīng)用程序需要將其改成其他任何后綴名稱[5]。

COLLADA是由索尼(sony)提出的基于XML的一個(gè)開(kāi)放的、免費(fèi)的數(shù)據(jù)交換標(biāo)準(zhǔn),通過(guò)XML Schema的技術(shù)展現(xiàn)三位數(shù)字模型,由于COLLADA基于XML技術(shù),所以這個(gè)標(biāo)準(zhǔn)具有十分優(yōu)秀的一致性,居于不同平臺(tái)的實(shí)時(shí)引擎只要支持這個(gè)保準(zhǔn),就可以實(shí)現(xiàn)三維模型。

2.3 KMZ加載WorldWind

通過(guò)對(duì)WorldWind中相關(guān)代碼的研究,該文發(fā)現(xiàn)WorldWind中只提供了加載KML文件的接口類KMLViewer.java,并沒(méi)有直接提供KMZ文件的加載類。在加載KMZ文件之前,WorldWind會(huì)首先找到KML文件,提取里面的地理坐標(biāo)信息,并通過(guò)KML里面的超鏈接找到所對(duì)應(yīng)的dae文件,提取三維模型的具體點(diǎn)線面信息,從而呈現(xiàn)一個(gè)完整的KMZ三維模型文件。加載效果如圖2所示。

3 KMZ批量加載WorldWind

由于本文以Java版WorldWind為例來(lái)實(shí)現(xiàn)KMZ的批量植入,所以在實(shí)驗(yàn)之前,需要先配置Java環(huán)境[6]。系統(tǒng)環(huán)境搭建完成后,開(kāi)始進(jìn)行KMZ批量加載的相關(guān)實(shí)驗(yàn)。首先,根據(jù)實(shí)驗(yàn)需要,要選取大量的KMZ文件作為實(shí)驗(yàn)對(duì)象。手動(dòng)制作KMZ文件費(fèi)時(shí)費(fèi)力,為了提高實(shí)驗(yàn)效率,該文通過(guò)互聯(lián)網(wǎng)從Sketch UP的三維模型庫(kù)中下載了一定數(shù)量的KMZ文件。在KMZ文件選擇上,選擇了模型資源較為豐富的美國(guó)華盛頓某處,范圍為3000*3000(m)。KMZ文件下載完成后,把下載好的KMZ 文件統(tǒng)一存放到一個(gè)文件夾中。然后在加載類中創(chuàng)建一個(gè)加載接口,該接口與存放KMZ文件的文件夾相連接,然后添加WorldWind優(yōu)先選擇并加載該文件夾文件的代碼,在WorldWind啟動(dòng)后,球體便會(huì)自動(dòng)旋轉(zhuǎn)至KMZ文件加載區(qū)域。根據(jù)不同的需要,可改變文件夾的位置和名稱,以及在里面添加新的KMZ文件,這種方式簡(jiǎn)單易操作,很大程度上提高了KMZ文件加載的效率。相關(guān)代碼如下圖所示。

File file = new File("F:\\washonton\\available\\624.kmz");

new WorkerThread(file, af).start();

String strPath = "F:\\washonton\\available";

String strPath = "F:\\washonton\\olympic park";

File dir = new File(strPath);

File[] files = dir.listFiles();

if (files == null)

return;

for (int i = 0; i < files.length; i++) {

File file = new File(strPath+files[i].getName());

new WorkerThread(file, af).start();

}

kmlAppController.moveTo(kmlRoot.getFeature());

代碼改進(jìn)完成后,運(yùn)行WorldWind,發(fā)現(xiàn)球體加載了代碼中所示的washonton文件夾中的全部KMZ文件,并自動(dòng)旋轉(zhuǎn)到了與KMZ文件相對(duì)應(yīng)的地理坐標(biāo)位置。如圖所示。

圖3 KMZ文件批量加載效果 (下轉(zhuǎn)第4606頁(yè))

(上接第4576頁(yè))

4 結(jié)論

本文通過(guò)對(duì)KMZ文件內(nèi)部結(jié)構(gòu)的研究,改進(jìn)了worldwind中的部分源代碼,成功解決了KMZ文件批量加載worldwind的問(wèn)題,讓KMZ文件從單一加載模式變?yōu)橐晕募A方式集體自動(dòng)加載,減去了不必要的加載步驟,使得KMZ文件加載變的簡(jiǎn)單易操作,大大的提高了KMZ文件的加載效率。WorldWind作為一個(gè)開(kāi)放的三維地理信息系統(tǒng)平臺(tái),以后會(huì)被越來(lái)越多的科研開(kāi)發(fā)人員進(jìn)行研究和改進(jìn)。該文站在前人的基礎(chǔ)上,對(duì)WorldWind加載KMZ文件的問(wèn)題進(jìn)行了一定的擴(kuò)展和改進(jìn),為后續(xù)研究開(kāi)發(fā)WorldWind提供了一定的便利。

參考文獻(xiàn):

[1] Ulf Assarsson & Tomas Moller.Optimized.View Frustum Culling Algorithms for Bounding Boxes[J].Journal of Graphics Tools,2000(1):9-22.

[2] 賈文玨. Google Earth 和 World Wind 比較研究[J].國(guó)土資源信化,2006(5):45-48.

[3] 于淑云,馬繼軍.基于WorldWind的三維模型植入研究[J].電腦知識(shí)與技術(shù), 2011(7):7356-7357.

[4] 袁琦,閔棟,鄒俊偉.KML文件的信息隱藏技術(shù)[J].北京郵電大學(xué)學(xué)報(bào),2011(1):140-144.

[5] 陳丹桂.Java的DAE引擎研究[J].Computer Era,2009(7):30-32.

[6] 盧海濱,鄭文鋒,銀正彤,等.NASA WorldWind JavaSDK數(shù)字地球客戶端開(kāi)發(fā)[J].測(cè)繪科學(xué),2009(5):169-170.

猜你喜歡
三維模型
數(shù)字化人體圖像和三維模型在解剖教學(xué)中的應(yīng)用
礦山虛擬環(huán)境三維模型系統(tǒng)優(yōu)化方法研究
汽車虛擬駕駛培訓(xùn)系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)
虛擬仿真技術(shù)在家畜解剖教學(xué)中的應(yīng)用
基于現(xiàn)代信息技術(shù)的礦產(chǎn)資源監(jiān)管體系建設(shè)
基于WebGL的三維物理模型設(shè)計(jì)與開(kāi)發(fā)
基于生態(tài)足跡的區(qū)域可持續(xù)發(fā)展研究
三維激光掃描在核電維修中的應(yīng)用
基于SolidWorks的零件建模參數(shù)化設(shè)計(jì)應(yīng)用簡(jiǎn)析
基于DIMINE軟件地質(zhì)模型建立
凉城县| 抚州市| 北海市| 古丈县| 勃利县| 聂拉木县| 夏邑县| 离岛区| 辽中县| 海盐县| 竹山县| 德昌县| 康马县| 尖扎县| 海兴县| 兰溪市| 常山县| 开原市| 玉环县| 肃宁县| 堆龙德庆县| 新竹市| 丁青县| 台前县| 磐安县| 博乐市| 饶平县| 广昌县| 定边县| 桓台县| 达尔| 双辽市| 玉门市| 唐山市| 怀化市| 房产| 泰兴市| 江川县| 锡林郭勒盟| 天等县| 益阳市|