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

eclipse中添加sdk

WWJ SDK是建立在Java OpenGL(JOGL)扩展之上的3D图形地球仪。 WWJ类层次结构的核心是WorldWindowGLCanvas ,它是GLCanvas的子类。 GLCanvas依次是抽象窗口工具包(AWT)组件。

WWJ对AWT的依赖是想要在其Eclipse应用程序中使用WWJ的GIS开发人员的障碍。 您可能知道,Eclipse使用了与AWT不兼容的Standard Widget Toolkit(SWT)。 此外,AWT和JOGL紧密集成在一起,这使得AWT接口的端口很难连接到SWT。 本文提供了一个解决方案,使您可以将WWJ SDK与Eclipse应用程序一起使用。

进入SWT / AWT桥

SWT正在Swift成为用于快速构建可扩展且功能强大的客户端应用程序的顶级窗口工具箱。 SWT和AWT / Swing都在争夺Java用户界面开发的优势。 考虑到两者都有优点和缺点,Eclipse Foundation认识到有必要构建SWT / AWT桥,该桥允许您将AWT / Swing组件嵌入到SWT中。 自Eclipse 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视图
package org.eclipse.plugin.worldwind.views;
_

/**
 * World Wind Eclipse RCP Earth View
 * @author Vladimir Silva
 *
 */
public class EarthView extends ViewPart
{
   private static final Logger logger = Logger.getLogger(EarthView.class);
   
   public static final String ID = EarthView.class.getName(); 
   final WorldWindowGLCanvas world = new WorldWindowGLCanvas();
   

   /**
    * Initialize the default WW layers
    */
   static {
      initWorldWindLayerModel();
   }

   public EarthView() {
      
   }
   
   /**
    * This is a callback that will allow us to create the viewer and initialize
    * it.
    */
   public void createPartControl(Composite parent) 
   {
      // GUI: an SWT composite on top
      Composite top = new Composite(parent, SWT.EMBEDDED);
      top.setLayoutData(new GridData(GridData.FILL_BOTH));
        
      // Swing Frame and Panel
      java.awt.Frame worldFrame = SWT_AWT.new_Frame(top);
      java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());
      
      worldFrame.add(panel);

      // Add the WWJ 3D OpenGL Canvas to the Swing Panel
      panel.add(world, BorderLayout.CENTER);

      parent.setLayoutData(new GridData(GridData.FILL_BOTH));
        
   }

   /*
    * Initialize WW model with default layers
    */
   static void initWorldWindLayerModel () 
   {
      Model m = (Model) WorldWind.createConfigurationComponent(
            AVKey.MODEL_CLASS_NAME);

      world.setModel(m);
   }

   /**
    * Passing the focus request to the viewer's control.
    */
   public void setFocus() {
   }
   
   public static void repaint() {
      world.repaint();
   }

   @Override
   public void dispose() {
      super.dispose();
   }
   
}

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

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

接下来,使用桥在顶部SWT组件内创建一个子AWT框架,以承载WWJ OpenGL画布所需的Swing panel

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 = new WorldWindowGLCanvas();
panel.add(world, BorderLayout.CENTER);

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

图1. WWJ Earth作为Eclipse视图
图1. WWJ Earth作为Eclipse视图

飞到地球仪中的某个位置

如果您希望应用程序以Google Earth的样式飞行到特定的纬度/经度,则需要三个对象:

  • 一个View ,它遵循左手坐标系的OpenGL约定,提供了从模型坐标到眼睛坐标的坐标转换
  • 代表您正在查看的世界的3D椭球体的Globe
  • 您想飞到的点的纬度/经度坐标

可选信息包括航向角和俯仰角以及以米为单位的高度。

清单2演示了如何飞往某个位置:

清单2.飞行到给定的纬度/经度坐标
public void flyTo (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()方法可平移或缩放地球,从而在地球的目标坐标上产生平滑的飞applyStateIterator()或瞬时缩放效果。

WWJ将地球以外的其他地球捆绑在一起; 从WWJ版本0.4.1开始可用的3D世界是:

  • 地球( 有关包含的数据集,请参阅参考资料)。
  • 月球:40xx / 30xx颜色/灰度图层,是结合了Clementine任务的几个光谱带而创建的。
  • 火星:包括来自诸如火星轨道相机(MOC)等任务的高分辨率图像,使用来自NASA喷气推进实验室的数据以及来自NASA火星奥德赛/ THEMIS的数据创建的高程图。

图2将地球,月球和火星显示为三个不同的Eclipse视图:

图2. RCP应用程序中的地球,月球和火星视图
图2.富客户端应用程序中的地球,月球和火星视图

结论

World Wind Java SDK是用Java和OpenGL编写的3D交互式世界查看器,它允许任何用户从外太空缩放到地球上的任何地方。 本文为您嵌入WWJ SDK作为Eclipse视图奠定了基础,从而为Eclipse中的GIS开发获得了一组新的强大工具。


翻译自: https://www.ibm.com/developerworks/opensource/library/j-wwj/index.html

eclipse中添加sdk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值