本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

NASA の World Wind Java SDK を Eclipse に組み込む

オープンソースの SDK を使って GIS アプリケーションを開発する

Vladimir Silva (vladimir_silva@hotmail.com), Consultant, Lockheed-Martin
  Vladimir Silva
Vladimir Silva は、以前 IBM のソフトウェア・エンジニアとして IBM WebAhead 技術シンクタンクで IBM Grid Toolbox などのプロジェクトに従事していました。サーバー・サイドのセキュリティーに関する彼の作業成果の一部は Globus Toolkit の中に取り入れられています。彼の著書には『Grid Computing for Developers』(2005 年 Charles River Media 刊) があります。彼が関心を持っている他の領域としては、ニューラル・ネットや人工知能があります。彼は無数の IT 認定証を持っています。

概要: NASA (アメリカ国立航空宇宙局) によるオープンソースの WWJ (World Wind Java) SDK によって、オープンな GIS (Geographic Information Systems) コミュニティーに新たな可能性が生まれます。World Wind は Java™ 言語と OpenGL で作成され、世界を 3D で見られる対話型のビューアーであり、ユーザーは宇宙空間から地球上の任意の場所にズームインすることができます。この記事では、Eclipse ベースのアプリケーションを機能強化したいと望む GIS 開発者のために、WWJ SDK を Eclipse のプラグインとして組み込むための方法について説明します。

日付:  2008年 6月 03日
レベル:  中級 この記事の原文:  英語
アクティビティー: 4219 ビュー
お気軽にご意見・ご感想をお寄せください: 


WWJ SDK は 3D グラフィックスによる地球儀であり、JOGL (Java OpenGL) 拡張機能の上に構築されています。WWJ クラスの階層構造の中心には GLCanvas のサブクラスである WorldWindowGLCanvas があります。そして GLCanvas は AWT (Abstract Window Toolkit) コンポーネントです。

WWJ が AWT に依存していることは、Eclipse アプリケーションの中で WWJ を使おうとする GIS 開発者にとっては障害です。おそらくご存じのように、Eclipse は AWT とは互換性のない SWT (Standard Widget Toolkit) を使っています。しかも AWT と JOGL は緊密に統合されているため、AWT インターフェースを SWT に移植することは困難です。この記事では Eclipse アプリケーションで WWJ SDK を使えるようにするためのソリューションについて説明します。

WWJ にバンドルされているデータセット

WWJ には次のような、低解像度、中解像度、高解像度のデータセットがバンドルされています (これらのデータセットへのリンクは「参考文献」を参照)。

  • Blue Marble (1-km/ピクセルの解像度)
  • University of Maryland Institute for Advanced Computer Studies の Global Land Cover Facility による、i-cubed 処理の Landsat 7 (15-m/ピクセルの解像度)
  • NASA の Jet Propulsion Laboratory (ジェット推進研究所) による標高データ (SRTM30Plus/SRTMv2/USGS NED 派生データセット)
  • USGS (United States Geological Survey: 米国地質調査所) と Microsoft® Research によるUSGS Topographic、B&W Ortho、Color Urban Area
  • USGS Geographic Names Information System による米国の地名
  • National Geospatial-Intelligence Agency (米国家地球空間情報局) による世界の地名

SWT/AWT ブリッジの登場

SWT はスケーラブルで強力なクライアント・アプリケーションを素早く作成するためのウィンドウ処理用ツールキットとして急速に高い人気を誇るようになっています。また SWT と AWT/Swing は、Java のユーザー・インターフェース開発における優位性を競っており、どちらにも利点と欠点があることから、Eclipse Foundation では AWT/Swing コンポーネントを SWT に組み込むことのできる SWT/AWT ブリッジを構築する必要があると認識しました。このブリッジは Eclipse のバージョン 3.0 から SWT の一部となっています。この単純な API は org.eclipse.swt.awt パッケージの中にあります (「参考文献」を参照)。

SWT/AWT ブリッジは、AWT ベースの World Wind 3D Globe を SWT を介して Eclipse アプリケーションの中に組みこむための重要なコンポーネントです。

WWJ 3D Earth に対する Eclipse のビュー

SWT/AWT ブリッジは既に SWT の中に用意されているため、ビューの中に 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 はまず、このブリッジを使って WWJ の Swing OpenGL キャンバスを組み込むための最上位 SWT コンポーネントを作成することから始めています。

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

次に、WWJ の OpenGL キャンバスに必要な Swing の panel をホストするための AWT 子フレームが、このブリッジを使って最上位 SWT コンポーネントの中に作成されています。

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 は、RCP (Rich Client Platform) アプリケーションの一部として Eclipse のビューの中に組みこまれた WWJ 3D Earth を示しています。


図 1. Eclipse のビューとしての WWJ 3D Earthw

WWJ とGoogle Earth、そして Virtual Earth

Google Earth も Virtual Earth も、利用可能な 3D の地球儀として人気があります。どちらも 3D の地球を表しており、ユーザーはさまざまな場所にズームインして、その場所を表示させることができます。これらのツールは WWJ と似ていますが、根本的な考え方が異なります。Google Earth と Virtual Earth は商用の製品であって SDK ではないため、開発者が必要に応じてクライアントを機能強化する、ということはできません。例えば、科学者が科学データ・フォーマットのサポートを追加したり、OpenGIS の WMS (Web Map Services) や WFS (Web Feature Services) といった地図サービスのインターフェースのサポートを追加したりすることはできません。WWJ はオープンソースであるため、この記事からもわかるように、ほとんどどのようなタイプのクライアントにも 3D の地球儀を組み込むことができます。また WWJ を変更して任意のタイプのデータ・サービスにアクセスすることもできます。これは WWJ 相当の商用サービスと比べて非常に大きなメリットです。

地球儀上の、ある場所に行く

Google Earth のスタイルでアプリケーションが特定の緯度と経度に行くようにするためには、次の 3 つのオブジェクトが必要です。

  • OpenGL の左手座標系の規則に従ってモデルの座標から人間の目の座標に変換する View

  • ユーザーが見る世界を 3D の楕円体で表現する Globe

  • 行く先の点の緯度座標と経度座標

オプション情報としては、ユーザーが Google Earth を見ている向き (方角) と角度 (傾き)、そしてメートルで表した高度があります。

リスト 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() メソッドは地球儀のパンとズームを行い、地球儀上の対象座標にスムーズに移動したり、あるいは対象座標を瞬時にズームしたりする、といった効果を実現します。

WWJ には地球以外の天体もバンドルされています。WWJ のバージョン 0.4.1 で利用できる 3D の世界には次のようなものがあります。

  • Earth (地球: 含まれるデータセットについては「参考文献」を参照してください)
  • Moon (月): 40xx/30xx のカラーとグレースケールのレイヤー (Clementine 探査機からのスペクトラム帯域をいくつか組み合わせて作成されています)
  • Mars (火星): MOC (Mars Orbital Camera) など探査機からの高解像度画像や、NASA Jet Propulsion Laboratory のデータを使って作成されたエレベーション・マップ (標高地図)、NASA の Mars Odyssey/THEMIS からのデータなど

図 2 は、地球と月、火星を、それぞれ別の Eclipse ビューとして表示しています。


図 2. RCP アプリケーションの中の地球と月、火星のビュー


まとめ

World Wind Java SDK は、世界を 3D で見られる対話型のビューアーであり、Java と OpenGL で作成されたものです。この SDK では、ユーザーは宇宙空間から地球上の任意の場所にズームインすることができます。この記事では、WWJ SDK を Eclipse のビューとして組み込み、GIS 開発のための新しい強力なツール・セットを Eclipse の中に実現するための基礎を説明しました。


参考文献

学ぶために

  • World Wind Central は NASA World Wind SDK の正式なナレッジ・ベースであり、サポート・サイトでもあります。

  • WWJ には次のような、低解像度、中解像度、高解像度のデータセットがバンドルされています。
    • Blue Marble (1-km/ピクセルの解像度)
    • University of Maryland Institute for Advanced Computer Studies の Global Land Cover Facility による、i-cubed 処理の Landsat 7 (15-m/ピクセルの解像度)
    • NASA Jet Propulsion Laboratory の SRTM Project プロジェクトによるエレベーション・データ (SRTM30Plus/SRTMv2/USGS NED 派生データセット)
    • TeraSeerver から入手可能な USGS と Microsoft Research によるUSGS Topographic、B&W Ortho、Color Urban Area
    • USGS Geographic Names Information System による米国の地名
    • National Geospatial-Intelligence Agency による世界の地名

  • SWT/AWT ブリッジに関して SWT_AWT クラスの Javadoc を見てください。

  • Swing/SWT Integration」(Gordon Hirsch 著、eclipse.org、2007年) は SWT/AWT ブリッジを使って既存の Swing コンポーネントを SWT ベースの RCP アプリケーションに組み込む方法に焦点を当てた記事です。

  • Find your way around open source GIS」(Frank Pohlmann、developerWorks、2005年5月) は UNIX® や Linux® のユーザーのための GIS ツールをいくつか解説しています。

  • Eclipse project resources には Eclipse 開発者のためのリソースが豊富に用意されています。

  • Technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。

  • developerWorks の Java technology ゾーンには Java プログラミングのあらゆる側面を網羅した記事が豊富に用意されています。

製品や技術を入手するために

議論するために

著者について

  Vladimir Silva

Vladimir Silva は、以前 IBM のソフトウェア・エンジニアとして IBM WebAhead 技術シンクタンクで IBM Grid Toolbox などのプロジェクトに従事していました。サーバー・サイドのセキュリティーに関する彼の作業成果の一部は Globus Toolkit の中に取り入れられています。彼の著書には『Grid Computing for Developers』(2005 年 Charles River Media 刊) があります。彼が関心を持っている他の領域としては、ニューラル・ネットや人工知能があります。彼は無数の IT 認定証を持っています。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology, Open source
ArticleID=317200
ArticleTitle=NASA の World Wind Java SDK を Eclipse に組み込む
publish-date=06032008
author1-email=vladimir_silva@hotmail.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。