NASA World Wind Java (WWJ) 基於 JOGL/AWT 實現 3D 地球儀,Eclipse RCP 基於 SWT,兩者不兼容。通過 SWT/AWT Bridge (org.eclipse.swt.awt) 將 WWJ `WorldWindowGLCanvas` 嵌入 Eclipse 視圖,構建專業 GIS 應用。
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();
static { initWorldWindLayerModel(); }
public void createPartControl(Composite parent) {
// 1. SWT 容器 (EMBEDDED 模式)
Composite top = new Composite(parent, SWT.EMBEDDED);
top.setLayoutData(new GridData(GridData.FILL_BOTH));
// 2. Bridge 創建 AWT Frame
java.awt.Frame worldFrame = SWT_AWT.new_Frame(top);
java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());
worldFrame.add(panel);
// 3. 嵌入 WWJ Canvas
panel.add(world, BorderLayout.CENTER);
parent.setLayoutData(new GridData(GridData.FILL_BOTH));
}
static void initWorldWindLayerModel() {
Model m = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
world.setModel(m);
}
public void setFocus() {}
public static void repaint() { world.repaint(); }
@Override public void dispose() { super.dispose(); }
}

public void flyTo(LatLon latlon) {
View view = world.getView();
Globe globe = world.getModel().getGlobe();
view.applyStateIterator(FlyToOrbitViewStateIterator.createPanToIterator(
(OrbitView) view, globe, latlon, // 目標經緯度
Angle.ZERO, Angle.ZERO, // Heading, Pitch
3e3 // 高度/縮放 (米)
));
}
`applyStateIterator` 產生平滑飛行/縮放動畫。
WWJ v0.4.1 內置三大星球:

SWT/AWT Bridge 打通 WWJ 與 Eclipse RCP,獲得:3D 交互地球、多星球數據、平滑導航、圖層模型。為 Eclipse GIS 開發提供 NASA 級地理可視化能力。