Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
278,24 KB
Nội dung
Nhúng SDK Java World Wind của NASA vào Eclipse Phát triển ứng dụng GIS với SDK nguồn mở này Vladimir Silva, Kỹ sư phần mềm, IBM Tóm tắt: Bộ SDK nguồn mở World Wind Java (WWJ) do NASA xây dựng thêm một loạt các khả năng mới cho cộng đồng hệ thông tin địa lý (GIS - Geographic Information Systems) mở. World Wind, một trình hiển thị thế giới tương tác 3 chiều, được viết bằng ngôn ngữ Java™ và OpenGL, cho phép người dùng có thể zoom từ một điểm ngoài không gian tới bất cứ vị trí nào trên Trái Đất. Bài viết này giải thích cách những người xây dựng GIS, muốn nâng cấp các ứng dụng trên nền Eclipse của mình, có thể nhúng SDK WWJ như một trình cắm thêm vào Eclipse như thế nào. SDK WWJ là mô hình địa cầu đồ họa 3 chiều được xây dựng bên trên nền các phần mở rộng Java OpenGL (JOGL). Lõi của hệ phân bậc các lớp của WWJ là lớp WorldWindowGLCanvas, đây là lớp con của lớp GLCanvas. Còn GLCanvas lại là một thành phần của bộ công cụ Window trừu tượng (AWT - Abstract Window Toolkit). Sự phụ thuộc của WWJ vào AWT là một trở ngại cho những người xây dựng ứng dụng GIS khi họ muốn sử dụng WWJ trong các ứng dụng Eclipse của mình. Như bạn có thể đã biết, Eclipse dùng bộ công cụ các tiểu phẩm tiêu chuẩn (SWT - Standard Widget Toolkit) vốn không tương thích với AWT. Hơn thế nữa, AWT và JOGL lại tích hợp chặt chẽ với nhau, điều này khiến cho cổng giao tiếp giữa giao diện AWT và SWT thêm khó khăn. Bài viết này trình bày một giải pháp giúp bạn có thể sử dụng SDK WWJ với các ứng dụng Eclipse. Các tập dữ liệu bó kèm theo WWJ WWJ bó kèm các tập dữ liệu có độ phân giải thấp, trung bình và cao sau đây (xem phần Tài nguyên để tìm liên kết đến chúng): Blue Marble (độ phân giải 1-km/pixel) i-cubed Landsat 7 (độ phân giải 15-meter/pixel) của Global Land Cover Facility thuộc Trường đại học MaryLand, Viện nghiên cứu Máy tính tiên tiến. Dữ liệu độ cao (SRTM30Plus/SRTMv2/USGS NED derived dataset) của NASA Jet Propulsion Laboratory USGS Topographic, của B&W Ortho, và Color Urban Area USGS và Microsoft® Research Các địa danh ở U.S. lấy từ hệ thống thông tin tên địa lý USGS (Geographic Names Information System). Các địa danh trên thế giới, lấy từ National Geospatial-Intelligence Agency Về cầu nối SWT/AWT SWT nhanh chóng trở thành bộ công cụ cửa sổ tầng đỉnh cho phép tạo nhanh các ứng dụng khách mạnh và mở rộng được. Cả SWT lẫn AWT/Swing đang cạnh tranh với nhau để giành ưu thế trong phát triển giao diện người dùng Java. Trên thực tế là cả hai đều có những ưu điểm và nhược điểm, Quỹ Eclipse đã nhận thấy sự cần thiết phải xây dựng một cầu nối SWT/AWT nhằm cho phép mọi người có thể nhúng các thành phần AWT/Swing vào SWT. Thành phần cầu nối này đã trở thành một bộ phận của SWT từ phiên bản Eclipse 3.0. API đơn giản này nằm trong gói org.eclipse.swt.awt (xem phần Tài nguyên). Cầu nối SWT/AWT là một thành phần then chốt mà ta sẽ cần để nhúng chương trình World Wind 3D Globe dựa trên nền AWT vào một ứng dụng Eclipse qua SWT. Khung nhìn Eclipse cho Earth 3D của WWJ Có sẵn cầu nối SWT/AWT trong SWT, việc gắn Earth 3D của WWJ vào khung nhìn rất nhanh. Sau đây là đoạn mã lệnh minh họa cho một khung nhìn Eclipse cơ bản thực thi nhiệm vụ này: Liệt kê 1. Khung nhìn Eclipse cơ sở cho Earth 3D của WWJ 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(); } } Đoạn mã lệnh 1 khởi đầu bằng việc tạo một thành phần đỉnh SWT, thành phần này sử dụng cầu nối để nhúng vải nền (canvas) WWJ swing OpenGL: Composite top = new Composite(parent, SWT.EMBEDDED); top.setLayoutData(new GridData(GridData.FILL_BOTH)); Tiếp đó, một khung con AWT sẽ được tạo ra trong thành phần đỉnh SWT này, sử dụng cầu nối, để chứa thành phần Swing panel, cần thiết cho vải nền WWJ OpenGL: java. awt.Frame worldFrame = SWT_AWT.new_Frame(top); java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout()); Cuối cùng, vải nền WWJ GL sẽ được thêm vào thành phần Swing panel: WorldWindowGLCanvas world = new WorldWindowGLCanvas(); panel.add(world, BorderLayout.CENTER); Hình 1 cho thấy hình Trái Đất được nhúng vào trong một khung nhìn Eclipse, như một phần của ứng dụng nền khách giàu (Rich Client Platform - RCP): Hình 1. Earth WWJ dưới dạng một khung nhìn Eclipse WWJ so với Google Earth và Virtual Earth Google Earth và Virtual Earth là những địa cầu 3 chiều rất phổ biến có sẵn. Chúng đều là mô hình Trái Đất 3 chiều cho phép người dùng có thể zoom và xem các vị trí. Nhưng dù có các nét tương đồng với WWJ, những công cụ này theo những triết lý khác nhau về cơ bản. Google Earth và Virtual Earth là các sản phẩn thương mại, không phải là các SDK, vì thế những người phát triển ứng dụng không thể nâng cấp phía khách để thỏa mãn yêu cầu của họ. Ví dụ, các nhà khoa học không thể thêm hỗ trợ cho các khuôn dạng dữ liệu khoa học hoặc giao diện cho các dịch vụ bản đồ như dịch vụ bản đồ Web của OpenGIS (Web Map Services - WMS) hay dịch vụ các đặc tính web (Web Feature Services - WFS). Bản chất nguồn mở của WWJ cho phép bạn nhúng địa cầu vào bất kỳ một ứng dụng khách nào, như ta sẽ thấy trong bài viết này. Ta cũng có thể sửa WWJ để truy nhập bất cứ dạng dịch vụ dữ liệu nào. Đây là ưu thế hơn hản so với các đối tác thương mại. Bay tới một địa điểm trên địa cầu Nếu bạn muốn ứng dụng của mình lướt tới một vĩ độ/kinh độ xác định giống như Google Earth, cần phải có 3 đối tượng sau: Một khung nhìn (View) cho phép chuyển tọa độ từ tọa độ mô hình sang tọa độ mắt nhìn, theo hệ tọa độ tay trái đã quy ước sẵn của OpenGL Một địa cầu (Globe) biểu diễn một khối cầu Elipxoit 3 chiều chính là thế giới là mà bạn đang quan sát Các tọa độ vĩ độ/kinh độ của nơi mà bạn muốn bay tới Thông tin bổ sung bao gồm các góc đổi hướng (heading angle), góc xuống và độ cao so với mặt biển tính bằng mét. Đoạn mã lệnh 2 minh họa cách bay đến một vị trí: Liệt kê 2. Bay đến một tọa độ kinh/vĩ đã cho 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) ); } Phương thức applyStateIterator() của lớp View lia ống kính hoặc zoom ống kính lên địa cầu, sinh ra hiệu ứng lướt qua êm ái hay zoom tức thời vào các tọa độ đích trên địa cầu. WWJ cũng bó kèm các mô hình địa cầu khác ngoài mô hình Trái Đất; các mô hình 3 chiều có sẵn trong WWJ phiên bản 0.4.1 là: Trái Đất (xem Tài nguyên cùng các tập dữ liệu kèm theo). Mặt trăng: các tầng 40xx/30xx đa cấp xám/màu được tạo ra bằng cách tổ hợp một số dải phổ từ chuyến thăm dò Clementine. Sao Hỏa: Bao gồm cả hình ảnh có độ phân giải cao thu được từ các chuyến thăm dò như Mars Orbital Camera (MOC), các bản đồ độ cao được xây dựng nhờ sử dụng dữ liệu của NASA Jet Propulsion Laboratory, và dữ liệu của NASA Mars Odyssey/THEMIS. Hình 2 cho thấy 3 mô hình Trái Đất, Mặt Trăng và Sao Hỏa trên 3 khung nhìn Eclipse riêng biệt: Hình 2. Các khung nhìn của Trái Đất, Mặt Trăng, và Sao Hỏa trong một ứng [...].. .dụng RCP Kết luận SDK World Wind Java là một trình hiển thị thế giới tương tác 3 chiều được viết bằng Java và OpenGL cho phép bất kỳ người dùng nào zoom từ ngoài không gian vào bất cứ vị trí nào trên Trái Đất Bài viết này cung cấp một cơ sở cho việc nhúng SDK WWJ như một khung nhìn Eclipse để thu được các công cụ mới mạnh hơn cho việc phát triển hệ GIS trong Eclipse Mục lục Về... cung cấp một cơ sở cho việc nhúng SDK WWJ như một khung nhìn Eclipse để thu được các công cụ mới mạnh hơn cho việc phát triển hệ GIS trong Eclipse Mục lục Về cầu nối SWT/AWT Khung nhìn Eclipse cho Earth 3D của WWJ Bay tới một địa điểm trên địa cầu Kết luận . Nhúng SDK Java World Wind của NASA vào Eclipse Phát triển ứng dụng GIS với SDK nguồn mở này Vladimir Silva, Kỹ sư phần mềm, IBM Tóm tắt: Bộ SDK nguồn mở World Wind Java (WWJ) do NASA. Abstract Window Toolkit). Sự phụ thuộc của WWJ vào AWT là một trở ngại cho những người xây dựng ứng dụng GIS khi họ muốn sử dụng WWJ trong các ứng dụng Eclipse của mình. Như bạn có thể đã biết, Eclipse. Bài viết này giải thích cách những người xây dựng GIS, muốn nâng cấp các ứng dụng trên nền Eclipse của mình, có thể nhúng SDK WWJ như một trình cắm thêm vào Eclipse như thế nào. SDK WWJ là