使用此开源 SDK 开发 GIS 应用程序

NASA 开发的开源 World Wind Java (WWJ) SDK 为地理信息系统(Geographic Information Systems,GIS)社区提供了新的可能性。World Wind 是一种使用 Java™ 语言和 OpenGL 编写的 3D 交互式地球查看工具,使用户可以从外太空观看地球上的任何地方。本文将讲述想要增强基于 Eclipse 的 应用程序的 GIS 开发人员如何将 WWJ SDK 作为插件嵌入到 Eclipse 中。

WWJ SDK 是一种构建在 Java OpenGL (JOGL) 扩展之上的 3D 图形地球仪。WWJ 类层次结构的核心是GLCanvas 的子类 WorldWindowGLCanvas。而 GLCanvas 是一个 Abstract Window Toolkit (AWT) 组件。

WWJ 对 AWT 的依赖性对于想在 Eclipse 应用程序中使用 WWJ 的 GIS 开发人员来讲是一个障碍。您可能知道,Eclipse 使用了 Standard Widget Toolkit (SWT),而 SWT 与 AWT 不兼容。而且,AWT 和 JOGL 紧密集成,这使得很难从 AWT 移植到 SWT。本文将提供一种解决方案,使您可以在 Eclipse 应用程序中使用 WWJ SDK。

与 WWJ 捆绑的数据集

WWJ 捆绑了以下低、中和高分辨率的数据集(参见 参考资料,获取它们的链接):

  • Blue Marble (分辨率:1 千米/像素)
  • i-cubed Landsat 7 (分辨率:15 米/像素),来自马里兰大学高级计算机研究所的 Global Land Cover Facility
  • 海拔数据(源自 SRTM30Plus/SRTMv2/USGS NED 的数据集),来自 NASA 喷气推进实验室
  • USGS 地形图、黑白垂直图像和彩色市区图像,由 USGS 和 Microsoft® 研究
  • 美国地名,来自 USGS 地理名称信息系统
  • 世界地名,来自美国国家地理空间情报局

进入 SWT/AWT 桥梁

SWT 因能够快速构建可伸缩和强大的客户端应用程序而迅速成为一种顶级窗口工具包。SWT 和 AWT/Swing 都在争当 Java 用户界面开发的权威。由于它们各有利弊,Eclipse 基金会意识到有必要构建一座允许在 SWT 中嵌入 AWT/Swing 组件的 SWT/AWT 桥梁。从 Eclipse version 3.0 开始,这座桥梁就已成为 SWT 的一部分。这个的 API 位于org.eclipse.swt.awt 包中(参见 参考资料)。

SWT/AWT 桥梁是通过 SWT 将基于 AWT 的 World Wind 3D Globe 嵌入到 Eclipse 应用程序中所需的关键组件。

WWJ 3D Earth 的 Eclipse 视图

借助 SWT 中已存在的 SWT/AWT 桥梁,可以轻松地将 WWJ 3D Earth 嵌入到您的视图中。清单 1 演示执行此任务的基本 Eclipse 视图:

清单 1. WWJ 3D Earth 的基本 Eclipse 视图
packageorg.eclipse.plugin.worldwind.views;
_/*** World Wind Eclipse RCP Earth View*@authorVladimir Silva**/
public class EarthView extendsViewPart
{private static final Logger logger = Logger.getLogger(EarthView.class);public static final String ID = EarthView.class.getName();final WorldWindowGLCanvas world = newWorldWindowGLCanvas();/*** Initialize the default WW layers*/static{initWorldWindLayerModel();}publicEarthView() {}/*** This is a callback that will allow us to create the viewer and initialize* it.*/public voidcreatePartControl(Composite parent) {//GUI: an SWT composite on topComposite top = newComposite(parent, SWT.EMBEDDED);top.setLayoutData(newGridData(GridData.FILL_BOTH));//Swing Frame and Paneljava.awt.Frame worldFrame =SWT_AWT.new_Frame(top);java.awt.Panel panel= new java.awt.Panel(newjava.awt.BorderLayout());worldFrame.add(panel);//Add the WWJ 3D OpenGL Canvas to the Swing Panel
panel.add(world, BorderLayout.CENTER);parent.setLayoutData(newGridData(GridData.FILL_BOTH));}/** Initialize WW model with default layers*/static voidinitWorldWindLayerModel () {Model m=(Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);world.setModel(m);}/*** Passing the focus request to the viewer's control.*/public voidsetFocus() {}public static voidrepaint() {world.repaint();}@Overridepublic voiddispose() {super.dispose();}}

清单 1 首先创建一个顶层 SWT 组件,该组件使用桥梁嵌入 WWJ swing OpenGL 画布:

Composite top = newComposite(parent, SWT.EMBEDDED);
top.setLayoutData(new GridData(GridData.FILL_BOTH));

其次,使用桥梁在顶层 SWT 组件中创建一个子 AWT 框架,用于保存 WWJ OpenGL 画布所需的 Swingpanel

java.awt.Frame worldFrame =SWT_AWT.new_Frame(top);
java.awt.Panel panel= new java.awt.Panel(new java.awt.BorderLayout());

最后,将 WWJ GL 画布添加到 Swing panel

WorldWindowGLCanvas world = newWorldWindowGLCanvas();
panel.add(world, BorderLayout.CENTER);

图 1 展示了作为 Rich Client Platform (RCP) 应用程序的一部分嵌入到 Eclipse 视图中的 Earth:

图 1. 显示为 Eclipse 视图的 WWJ Earth

在地球仪中飞往某地

如果想让应用程序在 Google Earth 风格下飞往特定的纬度/经度,则需要三个对象:

  • View,该对象提供从模型坐标到眼睛坐标的坐标转换,转换规则遵循 OpenGL 的左手坐标系统惯例
  • Globe,该对象表示您看到的世界的 3D 椭球体
  • 您要到达的位置的纬度/经度坐标

可选信息包括飞行方向和倾斜的角度,以及以米为单位的海拔高度。

清单 2 演示如何飞往指定位置:

清单 2. 飞往指定纬度/经度坐标
public voidflyTo (LatLon latlon)
{View view=world.getView();Globe globe=world.getModel().getGlobe();view.applyStateIterator(FlyToOrbitViewStateIterator.createPanToIterator((OrbitView)view, globe, latlon//bbox, Angle.ZERO   //Heading, Angle.ZERO   //Pitch, 3e3 )       //Altitude/Zoom (m)
);
}

View 类的 applyStateIterator() 方法移动或缩放地球仪,在地球仪的目标坐标上制造一种平稳飞行和即时缩放效果。

除 Earth 以外,WWJ 还捆绑了其他地球仪;WWJ v0.4.1 中可用的 3D 地球仪包括:

  • Earth(参见 参考资料,获取包含的数据集)。
  • Moon:40xx/30xx 颜色/灰度层,使用一组来自 Clementine 任务的光谱带创建
  • Mars:包括来自 Mars Orbital Camera (MOC)、Elevation Maps 等任务的高分辨率图像,使用来自 NASA 喷气推进实验室和 NASA Mars Odyssey/THEMIS 的数据创建。

图 2 展示了以三种不同的 Eclipse 视图显示的 Earth、Moon 和 Mars:

图 2. RCP 应用程序中的 Earth、Moon 和 Mars 视图

结束语

World Wind Java SDK 是使用 Java 和 OpenGL 编写的 3D 交互式地球查看工具,它允许任何用户从外太空缩放 Earth 上的任何地方。本文介绍了将 WWJ SDK 作为一个 Eclipse 视图嵌入的基本原理,获得了一组在 Eclipse 中进行 GIS 开发的强大工具。

原文链接:在 Eclipse 中嵌入 NASA World Wind Java SDK

转载于:https://www.cnblogs.com/rainbow70626/p/5268695.html

[转]在 Eclipse 中嵌入 NASA World Wind Java SDK相关推荐

  1. eclipse中添加sdk_在Eclipse中嵌入NASA World Wind Java SDK

    eclipse中添加sdk WWJ SDK是建立在Java OpenGL(JOGL)扩展之上的3D图形地球仪. WWJ类层次结构的核心是WorldWindowGLCanvas ,它是GLCanvas的 ...

  2. eclipse maven打包jar 部分jsp无法访问_Maven系列教材 (九)- 在Eclipse中创建maven风格的java web项目...

    Maven系列教材 (九)- 在Eclipse中创建maven风格的java web项目 步骤1:删除j2ee目录步骤2:新建Maven 项目步骤3:这个界面点下一步步骤4: 这个界面使用webapp ...

  3. Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法

    见:http://outofmemory.cn/java/OutOfMemoryError/outofmemoryerror-permgen-space-in-tomcat-with-eclipse ...

  4. Eclipse中设置作者日期等Java注释模板

    转载自:https://jingyan.baidu.com/article/1612d500856cb1e20e1eeed5.html Eclipse作为JavaIDE(Integrated Deve ...

  5. world wind java sdk_World wind Java SDK安装开发测试

    worldwind早前发布了开源的java版本的SDK.下载到后的安装测试步骤如下: 1. 下载worldwind java sdk 解压之后,可以获得jogl.jar.gluegen-rt.jar. ...

  6. Eclipse中新建Maven项目没有java以及test目录

    场景 用Eclipse第一次新建Maven项目,采用Artifact Id为maven-archetype-webapp时, 项目目录下没有java以及test目录. 解决 右击项目--propert ...

  7. 如何在Eclipse中添加新建包,java文件,工程工具栏按钮

    不多说,直接看图: 完成: MyEclipse也类似.

  8. JDK与JRE及其在Eclipse中的使用

    转载自:http://blog.csdn.net/gx1058742912/article/details/51033942 JDK与jRE的区别 JDK(java development kit): ...

  9. 在Eclipse中编写servlet时出现The import javax.servlet cannot be resolved 问题解决办法

    在Eclipse中,project->properties,选择Java Build Path->Libraries->Add External JARs,找到你计算机中tomcat ...

  10. 【eclipse中配置java】

    在eclipse中配置jdk Window–>Preferences–>java–>installed JREs–>add–>Standard VM–>选择jdk安 ...

最新文章

  1. AI芯片重磅破局者,开启边缘新智元
  2. Windows 下直接运行 Linux的Live CD版的方法
  3. 南大计算机考研录取,南京大学拟录取名单公示,初试最高446分,推免占比竟高达75%...
  4. 激活层是每一层都有吗_89小户型复式这样装,每一层都设计得很棒,完工后秒变小区样板间,邻居前来取经...
  5. Linux文件压缩命令笔记
  6. 页面那些位置是投放广告的最佳位置
  7. 前端学习(1561):ng-class颜色切换
  8. 图片文件夹要放在html,在网页中插入图像,若图像文件位于html文件的上两级文件夹,则在文件名之前加入()...
  9. php serialize error at offset,PHP Notice: unserialize(): Error at offset XX of XX bytes
  10. 经常用到的一些小病的预防的治疗
  11. 了解一下Bootstrap
  12. 公众平台模板消息所在行业_微信公众号模板消息群发工具免费注册试用7天
  13. 外包的水有多深?华为18k的外包测试岗能去吗?
  14. Flink1.12-2021黑马 8 Flink高级特性和新特性
  15. Hyperledger04
  16. 一级计算机电子表格人,计算机一级电子表格.doc
  17. 笔记本加固态小白怎么设置
  18. springboot入门(四):ajax实现登录
  19. VMware Workstation导出的ovf格式虚拟机 不能用VirtualBox导入
  20. 计算机应用论文经验总结,计算机应用基础总结论文

热门文章

  1. 小米生态链全面爆发,IOT或有望取代手机成为新的增长动力
  2. Spring基于 XML 的IoC配置(实现账户的CURD)
  3. Java web文件上传下载
  4. linux ehci ehci_urb_enqueue之qh_urb_transaction()分析(一)
  5. canvas微信图片生成海报
  6. 视频行人重识别2019各顶会顶刊文章阅读笔记
  7. 定时任务调度框架Quartz--Misfire处理规则
  8. 重庆计算机的发展,2010-2014年重庆市计算机与网络发展情况
  9. CF935E Fafa and Ancient Mathematics
  10. 【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现