KMZ文件批量加载WorldWind的研究与实现

时间:2022-06-10 12:51:14

KMZ文件批量加载WorldWind的研究与实现

摘要:WorldWind是美国航天宇航局(NASA)研发的一款三维地理信息系统软件。由于WorldWind每次只能加载单个KMZ模型文件,加载效率过低,所以给基于WorldWind三维模型加载的科学研究来带来了很大的不便。基于worldwind对KMZ文件批量加载的需求,该文通过分析KMZ文件内部结构,改进了WorldWind中用于KMZ文件加载的相关代码,最终实现了KMZ文件在worldwind中的批量加载,为基于worldwind的后续研究提供了便利。

关键词:WorldWind;KMZ文件;三维模型;模型加载

中图分类号:TP311 文献标识码:A 文章编号: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是美国航天宇航局(NASA推出的一款完全开放源代码的三维地理信息系统软件。不同于面向大众的GooleEarth,worldwind是一款专门用于科研开发的三维地理信息系统软件。通过研究发现,在模型加载方面,WorldWind提供了一个.x文件的加载接口,通过该接口可加载KML文件。如果要加载KMZ文件,需要根据KML文件中的链接,加载DAE文件,从而实现对KMZ文件的加载。但由于系统原因,每次只能加载一个KMZ文件,这对基于worldwind进行开发的科研人员造成了很大不便。基于对KMZ文件批量加载的需求,该文对KMZ文件进行了拆分和解析,了解其加载原理后改进了WorldWind中用于KMZ文件加载的相关代码,最终实现了KMZ文件在WorldWind中的批量加载。

1 虚拟地球仪WorldWind

WorldWind(简称WW,中文直译为世界风),俗称地球放大镜,是美国航天宇航局(NASA)阿莫斯研究中心的科研人员研发的一款完全开放源代码的地理科普软件。得益于NASA强大的硬件条件,WorldWind可以利用SRTM、MODIS、GLOBE等多颗卫星的数据,将航天飞机雷达遥感数据和Landmark卫星的图像结合在一起,让用户体验遨游三维地球的感觉[1]。

基本功能方面,用户可以通过WorldWind在所观察的形象和模型上随意地旋转、放大、缩小。同时还可以观看到地面和行政区划分,而且WorldWind还包含一个软件包,使用户能够通过这个去浏览地图以及其他由因特网上的OpenGIS Web Mapping Service提供的图像。

相对于GoogleEarth,WorldWind有两大优点[2]:

首先,WorldWind是个开放软件,允许用户对WorldWind软件本身进行任意的修改。在这一点上,WorldWind继承了NASA开放自由的传统,公开全部代码,科研开发人员可以按照自己的需求来改进其中的代码。作为一个开放软件,为了满足广大用户的需要,WorldWind提供了两种版本的开源代码,分别为Java版本和C#版本,Java版本支持B/S模式,C#版本支持C/S模式,该文将以Java版为例进行研究,WorldWind版本为1.5.0版。

其次,WorldWind最大的特点就是其卫星数据的自动更新能力。这种能力让WorldWind具有在世界范围内跟踪天气变化、近期事件、洪涝、火灾、海啸等情况的能力,同时NASA还提供了一系列演示动画,模拟季节变迁、全球飓风动态等全球活动。而且WorldWind可以通过软件接口直接播放动画,显示Golobe数据。在指定时间范围内,用户可以查看云量、气温、降水等数据。另外WorldWind包含了全部的国界、城市、交通、经纬线以及其他可供参考的测层,同时还可以把从GPS接收机接收的数据以及其坐标显示在三维地球上。WorldWind软件界面如图1所示。

图1 worldwind窗口界面

2 解析KMZ文件

2.1 KMZ

KMZ是Google Earth默认的输出文件格式,是一个经过ZIP格式压缩过的KML文件,KMZ文件解压缩后,一般会有3个文件。

Images文件夹:存储三维模型的背景和纹理画片等(其中有一个或多个文件)。

models文件夹:包含三维模型点线面构造信息的DAE文件 (其中有一个或多个文件)。

doc.kml文件:KML文件主要起到调用DAE文件的作用,提供三维模型在 WorldWind上的坐标位置、大小比例等属性。

2.2 KML和DAE

KML是一种文件格式,一般用于在地球浏览器中显示数据。在这之前,通常是应用在GoogelEarth中。KML最初由Keyhole公司开发,是一种基于XML语法与格式的、用于描述和保存地理信息(如点、线、图像、多边形和模型等)的编码规范。GoogleEarth和GoogleMaps处理KML文件的方式与网络浏览器处理HTML和XML文件的方式类似,像HTML一样,KML使用包含名称、属性的标签(tag)来确定显示方式。所以基于这个特性,GoogleEarth和GoogleMaps一般被视为KML文件浏览器[3]。

KML是一个通过标记来实现相关功能的文件,在它的内部代码里面定义了大量的标记信息,在其内部代码里面,没有储存三维模型的点、线、面、材质、图层等基本信息,只是提供了一个定位三维模型位置的坐标信息。通过对其内部代码的解析,该文发现KML文件是通过链接对应的dae文件来实现对模型信息(点、线、面、材质、图层等)的读取。KML链接的DAE文件采用哈希表的数字矩阵来实现点组成线、线组成面或者直接由点组成面,最后由面来组成模型。以此来对WorldWind里面开源代码的解析,找到能读取dae文件的相关类[4]。

Dae是英文Digital Aseet Exchange的缩写,意思为数据资源交换,Dae是COLLADA的模型文件。Dae文件其实就是一个文本文件,其中的内容是基于XML格式模型的COLLADA描述,实质上是一个XML文档,所以可以将.dae的后缀名改为.xml,或者根据不同的应用程序需要将其改成其他任何后缀名称[5]。

COLLADA是由索尼(sony)提出的基于XML的一个开放的、免费的数据交换标准,通过XML Schema的技术展现三位数字模型,由于COLLADA基于XML技术,所以这个标准具有十分优秀的一致性,居于不同平台的实时引擎只要支持这个保准,就可以实现三维模型。

2.3 KMZ加载WorldWind

通过对WorldWind中相关代码的研究,该文发现WorldWind中只提供了加载KML文件的接口类KMLViewer.java,并没有直接提供KMZ文件的加载类。在加载KMZ文件之前,WorldWind会首先找到KML文件,提取里面的地理坐标信息,并通过KML里面的超链接找到所对应的dae文件,提取三维模型的具体点线面信息,从而呈现一个完整的KMZ三维模型文件。加载效果如图2所示。

3 KMZ批量加载WorldWind

由于本文以Java版WorldWind为例来实现KMZ的批量植入,所以在实验之前,需要先配置Java环境[6]。系统环境搭建完成后,开始进行KMZ批量加载的相关实验。首先,根据实验需要,要选取大量的KMZ文件作为实验对象。手动制作KMZ文件费时费力,为了提高实验效率,该文通过互联网从Sketch UP的三维模型库中下载了一定数量的KMZ文件。在KMZ文件选择上,选择了模型资源较为丰富的美国华盛顿某处,范围为3000*3000(m)。KMZ文件下载完成后,把下载好的KMZ 文件统一存放到一个文件夹中。然后在加载类中创建一个加载接口,该接口与存放KMZ文件的文件夹相连接,然后添加WorldWind优先选择并加载该文件夹文件的代码,在WorldWind启动后,球体便会自动旋转至KMZ文件加载区域。根据不同的需要,可改变文件夹的位置和名称,以及在里面添加新的KMZ文件,这种方式简单易操作,很大程度上提高了KMZ文件加载的效率。相关代码如下图所示。

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());

代码改进完成后,运行WorldWind,发现球体加载了代码中所示的washonton文件夹中的全部KMZ文件,并自动旋转到了与KMZ文件相对应的地理坐标位置。如图所示。

图3 KMZ文件批量加载效果 (下转第4606页)

(上接第4576页)

4 结论

本文通过对KMZ文件内部结构的研究,改进了worldwind中的部分源代码,成功解决了KMZ文件批量加载worldwind的问题,让KMZ文件从单一加载模式变为以文件夹方式集体自动加载,减去了不必要的加载步骤,使得KMZ文件加载变的简单易操作,大大的提高了KMZ文件的加载效率。WorldWind作为一个开放的三维地理信息系统平台,以后会被越来越多的科研开发人员进行研究和改进。该文站在前人的基础上,对WorldWind加载KMZ文件的问题进行了一定的扩展和改进,为后续研究开发WorldWind提供了一定的便利。

参考文献:

[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].国土资源信化,2006(5):45-48.

[3] 于淑云,马继军.基于WorldWind的三维模型植入研究[J].电脑知识与技术, 2011(7):7356-7357.

[4] 袁琦,闵栋,邹俊伟.KML文件的信息隐藏技术[J].北京邮电大学学报,2011(1):140-144.

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

[6] 卢海滨,郑文锋,银正彤,等.NASA WorldWind JavaSDK数字地球客户端开发[J].测绘科学,2009(5):169-170.

上一篇:基于Helix的网络视频直播系统的设计与实现 下一篇:银企互联中对账文件动态生成机制