程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Eclipse中嵌入NASA World Wind Java SDK

在Eclipse中嵌入NASA World Wind Java SDK

編輯:關於JAVA

使用此開源 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。

進入 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 視圖

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. 顯示為 Eclipse 視圖的 WWJ Earth

在地球儀中飛往某地

如果想讓應用程序在 Google Earth 風格下飛往特定的緯度/經度,則需要三個對象:

View,該對象提供從模型坐標到眼睛坐標的坐標轉換,轉換規則遵循 OpenGL 的左手坐標系統慣例

Globe,該對象表示您看到的世界的 3D 橢球體

您要到達的位置的緯度/經度坐標

可選信息包括飛行方向和傾斜的角度,以及以米為單位的海拔高度。

清單 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() 方法移動或縮放地球儀,在地球儀的目標坐標上制造一種平穩飛行 和即時縮放效果。

除 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 開發的強大工具。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved