java版WorldWind源代码解析之一.docx

上传人:b****3 文档编号:3059178 上传时间:2022-11-17 格式:DOCX 页数:16 大小:570.05KB
下载 相关 举报
java版WorldWind源代码解析之一.docx_第1页
第1页 / 共16页
java版WorldWind源代码解析之一.docx_第2页
第2页 / 共16页
java版WorldWind源代码解析之一.docx_第3页
第3页 / 共16页
java版WorldWind源代码解析之一.docx_第4页
第4页 / 共16页
java版WorldWind源代码解析之一.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

java版WorldWind源代码解析之一.docx

《java版WorldWind源代码解析之一.docx》由会员分享,可在线阅读,更多相关《java版WorldWind源代码解析之一.docx(16页珍藏版)》请在冰豆网上搜索。

java版WorldWind源代码解析之一.docx

java版WorldWind源代码解析之一

Java版WorldWind源代码学习笔记

该文档编写者系数学系毕业且未满一年工作经验的职场新人,java知识有限,对于新事物Worldwind刚接触不久,总结一下。

不足之处,希望得到各位大师的指点。

刚开始,我看了一些WorldWind的相关简介,感觉从整体上给了WorldWind非常好的框架感,所以我将它拷贝了过来。

之后,我们的研究就从大的框架转到细节去。

毕竟,“研究”不只是看大的框架,还要将细节进行分析。

我作为一个新手,对此也非常陌生,那么,就让我们一起来学习吧。

不足之处请见谅。

首先,我们贴出官网上给出的WorldWind的源代码结构如下

∙顶级包

∙用于awt的组件

∙GPS轨道格式

∙GPS轨道格式

∙几何与数学类

∙地球、火星等星球的实现

∙图层

∙专用于地球的图层

WorldWindow和View接口

以下是WorldWindow接口:

∙set/getModel(Model)

∙set/getView(View)

∙getSceneController(...)

pick

以下监听器:

∙PositionListener

∙SelectListener

∙RenderingListener

∙repaint()

View接口:

∙Fields

∙Position,direction,fieldofview,altitude,heading,pitch,roll,

∙Actions

oapply()

ogoto(lat/lon/elev/altitude)

oproject(Point3Dpoint)

∙Compute

ohorizon()

opositionFromScreenPoint(...)

orayFromScreenPoint(...)

在Applet中使用WorldWind

要使用Applet,需要JavaAPIforOpenGL(JOGL)AppletLauncher。

新版本的JOGLAppletLauncher具备在applet中创建和部署基于OpenGL的3D图形的功能,而不需要客户端安装任何软件。

它可以在任何支持JOGL的操作系统和CPU上运行,只需要浏览器上安装以上版本。

以下是典型的在applet中部署WorldWind组件的代码:

     width=400

     height=260

     codebase=""

     archive=",,">

  

     VALUE="">

  

      VALUE="WorldWind Applet Demo">

  

  

      VALUE=",,">

  

  VALUE=";preload,;

  preload,Applet1Up;preload">

其中文件中包含WorldWindApplet类,无需声明,而是作为参数引入;而应当声明的是JOGLAppletLauncher,它的相关类和也需要列出。

架构和API

NASA拥有的海量数据可以以T来计算,这些数据来自卫星和太空望远镜。

NASAWorldWind的可视化技术可以用最便捷和低冗余的方式传送地理空间数据。

下图为ww架构图:

ww包含了交互式的3D图形组件,可用于Swing,AWT和SWT或其他UI组件。

WorldWindAPI主要以接口设计,因此用户可以选择性地替换已有组件。

最高级的接口为WorldWindow,相关的UI组件为Swing/AWT。

其他五个主要的接口为:

∙Globe接口表现地形

∙Layer接口表现影像信息

∙Model接口聚合Globe和Layer,用于创建星球模型

∙SceneController接口控制Model的渲染,可以用于表现事件、时间等

∙View接口控制用户视图

在典型的应用中,程序在一个Model对象中关联一个Globe对象和多个Layer对象。

然后将model传给SceneController对象,用于在一个WorldWindow中显示globe和layers。

SceneController对象控制globe和layers的显示,并与View接口互动来决定用户视图。

实现这些接口的对象可能由ww或其他开发者提供,而实现这些接口的对象可用于任何需要此类接口的地方。

ww已经提供了地球、火星和月球的模型的Globe实现,其他一些基本的Model,SceneController,View接口也都有了基本的实现。

FrameController接口将ww的渲染和整个程序的渲染集成,以便于控制。

所有的数据以缓存文件形式存取,文件缓存可以管理位于多个磁盘的文件碎片的取用、文件缓存可以同区难过WorldWind以单例模式访问。

 

下面开始我们将开始逐个研究Worldwind的类的作用,包含的属性和方法,继承的父类和实现的接口等等(以下是java版的源代码解析)

我们要研究WorldWind的源代码,首先我们要先找到WorldWind里不依赖于自身包的源代码,也就是说,我们要先找到它的源代码中,依赖于java语言的最近本的部分。

所以我们逐个包进行查看,发现当我们查看到包里的所有类,都不依赖于WorldWind的其他包(当然,我是通过最笨的方法,将包里的每个类都检查了一遍,发现了没有引入WorldWind自带的包,后面还有没有类似这样的包,暂时没看,不妨就先从这个开始研究吧),所以我们可以先研究一下他的这个包里的源代码。

这个包的结构如下:

我们下面不妨先打开一个类文件看看,到底里面写的是什么,这里我就拿第一个类文件开始吧。

我们打开发现如下代码(这里刚开始我们给出比较详细的介绍,后面我们就不再这么啰嗦了):

这里我们可以发现他继承了另外的一个类文件,那么我们只能将鼠标放在他继承的类上面,然后按住“Ctrl”不放,再鼠标点击这个类文件,我们进去看看,他又是什么一个情况。

结果如下:

这里我们发现他也是继承自别的类,不过这个类我们已经很熟悉了,这里我们不妨就在跟进去看一看,他具体是个什么情况,如下:

好了,到这里,我们已经跟的差不多了,因为RuntimeException已经不是WorldWind里的内容了,但是,如果你有兴趣,还可以继续往下跟。

这里我们就不跟了。

那么,我们就可以从WWRuntimeException开始研究源代码了。

后面我们将不再介绍这些即琐碎又简单的操作了。

好吧,这里我们言归正传,开始我们的java版的Worldwind研究之旅(这里我们猜测,Exception是WorldWind源代码中不依赖于自带包的其中一部分,可定还会有别的包,也不依赖于他的自带包,我们就慢慢研究着看吧。

作为第一个吃螃蟹的人,没有人会告诉你一个新东西该怎么学习,这里我们只能凭感觉试探。

好吧,这里就此打住,要不我真的就成老太婆了)

这里我看完了这个包里的六个类文件,发现他都是Super()函数,好吧,没必要仔细研究这个包了,我们接着向下寻找我们要查找的包。

方法不再赘述。

我们开始对源代码进行摸索,搜索吧,在你还没有清楚他的结构之前,并且没有资料可以引导你来学习,我们只能通过慢慢的摸索来学习,这样很浪费时间,但是没办法,研究东西就是这样。

找了好长时间,才发现另一个不依赖于Worldwind自带包的包(其实还不完全是,至少没有nasa相关的字眼了),他的名字就是好吧,下面我们来看看他有是什么一个情况。

上面就是他所包含的类文件,打开上面的包中的某些类文件,还是会发现类似下面的引包字眼:

不过,我猜测应该不会太深了,直觉这样告诉我,这里还有一个比直觉更合适的理由,那就是,搜索到这里,其实我已经基本上快搜索完了整个Worldwind源代码了。

叹气,嗨,没办法。

这就是研究。

(后面证明,这些无谓的过程并不是一文不值,因为他可以让你大致了解了整个源代码的继承情况,为后面扩展开来研究源代码提供了“经历基础”。

继续查找发现了这个包,完全不依赖与任何Worldwind包,欧耶,我们成功了。

来看一下他所包含的内容吧。

这个包里一共三个类,那就分析一下吧。

下面我们先来分析这个类文件吧

首先我们看到这个类文件里的如下信息:

这里我们看见Baseclass字样,好了,终于发现了他的真正的源头。

如果是比较正式的源代码,应该都会标识这样的信息的,所以,我们这里可以先小小的兴奋一下,好,我们开始使用快速搜索法吧,可以不用如此辛苦的逐个摸索了。

于是我们就“Ctrl+Shift+H”输入“Baseclass”来查找我们想要的基础类,即为没有引入任何Worldwind包的类,事实证明,我们的猜测是正确的,搜索的结果如下:

结果不是太多,嗯,我们这里找到了WorldWind源代码里最原始的部分。

那么我们可以迈出研究WorldWind源代码的第一步了。

下面我们将我们的思路跳转回来,继续研究我们的类文件。

先打开该文件,我们看一下该文件所包含的内容吧。

好了,上面就是类文件所包含的内容,我们从结构上粗略的看一下,应该很简单吧,但是作为研究WorldWind源代码,我们还是有必要打开该类文件进行仔细学习和研究的,这里我就忽略这一步了。

说实话,我是数学专业出身的,再加上又是刚毕业不到一年,所学的java知识还很有限,这里我就不班门弄斧了。

接下来我们看一下这个包里面的第二个类文件吧。

文件,首先,我们看一下这个类文件的文件内容吧:

这个文件很简洁的,我们就读一读它英文的介绍吧,这里我的英语刚过四级,不过还是可以看懂这些单词说的是什么意思的,为了更快的翻译这些语句的意思,我选着了在线翻译,翻译好自己在修改一下就行了。

出此下策,全是由于英文不好的缘故,我要是英语过了专八,才不会去装什么有道词典的。

好,继续往下看。

先看一下翻译的结果吧:

翻译的不是十分正确,不过基本上可以使人明白是怎么一回事。

好,我们接着看这个包里面的最后一个类文件。

文件,它所包含的内容如下:

我们大致看一下,基本上也明白是什么情况。

我们就进去看一下大致的内容吧。

如下图:

当然,上面的截图不完整,不过我们已经可以看出一些门道了。

还是一堆介绍,我们用同样的方法,XX这些英文的意思。

这里不重复了。

翻译我还是看的是懂非懂,不过我可以看懂它包含的内容是什么一个情况就行了。

接下来我们就把下面的几个包里的内容先看看吧:

这里的包引用的不算复杂,我们可以耐心的跟一下,最多也跳不到哪里去,到这里,我们就有很多工作要做了,因为要想研究Worldwind源代码,就必须搞清楚每个类文件,每个方法的作用,才可以进行更好的进行二次开发。

也许,你可能会反对我的说法,认为搞那么细致没什么用,随便搞搞,就能做二次开发。

如果你真的这样认为,我也没有办法,你就当我是在这里自言自语好了。

言归正传,上面的几个包,是要搞透彻的,因为我们都是刚开始,这些简单的搞不明白,后面的引用和抽象出来的接口就更麻烦了,所以一定要看的透彻才行。

下面我们开始研究这几个包。

我们不妨从中选择一个包,不妨就选这个包来研究吧。

先看一下里面包含了哪些类文件吧:

那我们就逐个的看看这些类文件吧。

先看第一个类文件,文件结构如下:

从名字上看一下上面的类文件所包含的内容可以发现应该比较简单,我们就就能到类里面仔

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1