Một số tìm hiểu về cấu trúc phần mềm gvSIG

Một phần của tài liệu Báo cáo thực tập tốt nghiệp - - Nghiên cứu WebGIS phục vụ du lịch - - Xây dựng WebGIS phục vụ du lịch tại Trung tâm ứng dụng Hệ thông tin địa lý của Sở Khoa Học Công Nghệ TPHCM (Trang 21 - 26)

TÌM HIỂU VỀ PHẦN MỂM MÃ NGUỒN MỞ

1. TỔNG QUAN VỀ PHẦN MỀM MÃ NGUỒN MỞ

1.4 Một số tìm hiểu về cấu trúc phần mềm gvSIG

- gvSIG là một hệ thống phát triển theo dạng từng module riêng lẻ (Lập trình theo module là một kiểu lập trình cắt nhỏ các chức năng chương trình thành ra các module, mỗi module thực hiện một chức năng và chứa tất cả các mã cũng như các biến cần để hoàn thành chức năng đó)

- Các gói trong gvSIG:

Xem xét cấu trúc của một gói:

 Mã nguồn bắt đầu bằng package

Báo cáo thực tập tốt nghiệp GVHD: Th.S Phan Hiền Vũ

Gói Andami:

 Gói Andami chứa các ứng dụng cơ bản và có các nhiệm vụ như sau:

 Nạp các plugins và các extensions của nó

 Quản lý việc dịch ngôn ngữ

 Quản lý giao diện mặc định với các ứng dụng cũng như những giao diện thông tin, giao diện chào mừng, splash.

 Gói Andami bao gồm một chuỗi các lớp phục vụ cho extension có thể liệt kê như sau:

 Lớp com.iver.andami. Launcher.java là phần lõi của ứng dụng

 Trong khi làm việc với các extensions, chúng ta thường sử dụng lớp com.iver.andami.PluginServices, là lớp hỗ trợ các service plugins với các hàn thong dụng như sau:

getMainFrame () => lấy cửa số ứng dụng chính

getMDIManager () => thông qua lớp này, chúng ta truy xuất đến cửa sổ đang kích hoạt (phương thức

PluginServices.getMDIManager () .getActiveWindow ()), được sử dụng trong nhiều trường hợp khi xây dựng extension isEnabledisVisible. Công dụng còn được ứng dụng để thêm mới cửa sổ và một số việc khác.

getDlgPreferences () => lấy thông tin của hộp thoại một khi tất cả các cấu hình đã được đăng ký.

getArguments () => lấy các tham số của dòng lệnh

getExtension (Class) => khi triệu gọi phương thức này, chúng ta nhận được một trường hợp của extension gọi lớp hiện tại. Nếu lệnh triệu gọi trong phương thức initialize (), chúng ta phải đảm bảo chắc rằng extension đã được khởi tạo

getText (Object, String) => được sử dụng để xử lý việc dịch giữa các ngôn ngữ. Từ plugin và key, chúng ta có thể chuyển sang ngôn ngữ hiện tại.

registerKeyStroke (KeyStroke) => phục vụ truy cập nhanh key toàn cục

 Các cửa sổ trong Andami được xem như các đơn vị độc lập

 Các cửa sổ trong Andami đều được định nghĩa nhờ vào giao diện IWindow. Giao diện này rất đơn giản, nó chỉ cần implement cho phương thức getWindowInfo(). Phương thức này trả về lớp

WindowInfo để xác định kích thước của cửa sổ, tiêu đề, và các hằng chỉ định cửa sổ là modal hay không, có thể resize, và có hay không có Pallette (rất hữu dụng cho việc hiển thị thông tin, nhóm điều khiển, và các công cụ mẫu)

SVTH: Ông Hoàng Trúc Giang - 80504061 Trang 16

libCorePlugin (định nghĩa cho WindowInfo được sử dụng để tạo các dạng cửa sổ JinternalFrame)

Một vài gói trong folder Extensions:

 Gói gốc com.iver.cit.gvsig, trong đó ta có thể tìm thấy các entry points tương ứng với các menu, button…

 Gói com.iver.cig.gvsig.project bao gồm các lớp quan trọng nhất là Project.javaProjectFactory.java. Lớp Project.java là lớp quản lý gvSIG project và chứa phương thức tĩnh createFromXML() để đọc tập tin .gvp (tập tin project của gvSIG). Tuy nhiên, để lưu một project .gvp thì ta phải sử dụng phương thức writeProject trong gói ProjectExtension và phải gọi phương thức getXMLEntity() từ lớp Project.

 Bên trong gói project là gói com.iver.cit.gvsig.project.documents có 2 lớp: ProjectDocument ProjectDocumentFactory. Lớp ProjectDocument là lớp mà hầu hết các document còn lại phải kế thừa từ nó. Trong khi đó, lớp ProjectDocumentFactory sẽ đảm trách việc tạo documents và quản lý các documents tiềm năng trong tương lai khi mở rộng

 Gói com.iver.cit.gvsig.gui.layout chứa lớp Layout đảm trách về việc chuẩn bị các bản đồ cho in ấn cũng như các lớp bên trong gói Fframes đầy đủ các thành phần thể hiện trong layout (như khung nhìn - views, chú dẫn - legends, thanh chỉ Bắc - north arrows, các kí tự - text, các đối tượng đồ họa - graphics, thanh tỉ lệ - scale,…).

Fframes là một khung chữ nhật và mỗi lớp được thừa kế từ Fframes sẽ đảm nhiệm việc vẽ bên trong khung chữ nhật đó. Với giải pháp này, chúng ta có thể thêm các phần tử vào trong Layout

 Lớp com.iver.cit.gvsig.ProjectExtension đảm nhiệm các hoạt động tạo mới project, loading project có sẵn, lưu project...

 Các gói còn lại có liên quan đến layout, viewtable. Và ngoài ra các gói còn hỗ trợ các exceptions cũng như giao diện người sử dụng (lớp GUI) để thêm lớp dữ liệu

- Khung nhìn View:

Báo cáo thực tập tốt nghiệp GVHD: Th.S Phan Hiền Vũ

chất là một document ProjectView, mà trong đó sẽ có một MapContext được liên kết với Mapcontrol và một MapContext khác sẽ đối ứng với lớp MapOverview.

ToC sẽ là cách thể hiện khác của MapContext mà được liên kết với Mapcontrol

Map Control:

- Trong các extensions việc đầu tiên là đọc đối tượng View và từ đó lấy MapControl và MapContext tương ứng. Khi đó, với MapContext lấy được, chúng ta có thể lấy được danh sách các lớp dữ liệu (Flayers), khi đó, ta có thể xác định lớp dữ liệu cần thiết. Cụ thể:

com.iver.andami.ui.mdiManager.IWindow view = PluginServices.getMDIManager().getActiveWindow();

if (!(view instanceof View)) return;

View vista=(View)view;

IProjectView model = vista.getModel();

MapContext mapa = model.getMapContext();

MapControl mapCtrl = vista.getMapControl();

logger.debug("Comand : " + s);

if (s.equals("FULL") ) { try {

// mapa.beginAtomicEvent();

mapa.getViewPort().setExtent(mapa.getLayers().getFullExtent());

mapa.clearAllCachingImageDrawnLayers();

vista.repaintMap();

// mapa.endAtomicEvent();

} catch (DriverException e) {

NotificationManager.addError("Error getting full extent", e);

} }

- Phần code này từ lớp com.iver.cit.gvsig.ViewControls. Nó sử dụng PluginServices.getActiveWindow() để lấy cửa sổ đang được active. Và nếu cửa sổ này là một View, nó sẽ lấy MapContext và phóng khung nhìn đến tất cả các lớp:

mapa.getViewPort().setExtent(mapa.getLayers().getFullExtent());

- Xét một vài lớp quan trọng sau:

Lớp ViewControls: bao gồm các phương thức: hiển thị toàn bộ lớp (full extent), di chuyển (panning), cấu hình vị trí bản đồ (configure locator map), phóng to (zoom in), thu nhỏ (zoom out), đo khoảng cách

(meassure), thiết lập bật/tắt lớp dữ liệu (set layers as visible/not visible), kích hoạt và không kích hoạt (active, not active), lưu thành tập tin ảnh (save to raster), thay đổi tỉ lệ (change scale)...

Lớp ViewSelectionControls: hỗ trợ chọn điểm, chọn hình chữ nhật và chọn theo đa giác, chọn theo lớp dữ liệu và đảo chọn dữ liệu.

Lớp Export: kết xuất sang ảnh những thông tin trên khung nhìn.

SVTH: Ông Hoàng Trúc Giang - 80504061 Trang 18

Lớp này phức tạp hơn mô tả vì nó phải thực hiện các thao tác: hiển thị hộp thoại từ các pluggings bên ngoài. Sau đó, sử dụng pluggings khác để thêm dữ liệu đủ thứ loại như spatial databases, WMS, WFS,… Trong lớp này, chỉ có các đoạn lệnh thêm các lớp dữ liệu tập tin (như .shp,

raster, .dxf, .dgn, etc). Khai thác lớp này cần chú ý đến phép chiếu liên quan đến dữ liệu và view

Lớp InfoToolExtension: Cửa sổ hiển thị các thông tin. Lớp này là phần duy nhất tự tìm các phương thức riêng của nó

Bên trong các khung nhìn, các MapOverview và MapControl có những mối liên hệ chặt chẽ và khắn khít nhau khi thể hiện bản đồ

Map OverView:

- Đối tượng MapOverview là lớp con của MapControl, với đặc tính chuyên biệt là liên kết đến một Mapcontrol trong một View nào đó. Nó thường sử dụng để định vị, hiển thị vài vị trí của các lớp dữ liệu bằng một hình chữ nhật để ánh xạ với vị trí MapControl đang hiển thị.

- Đối tượng MapOverview là một lắng nghe (listener) đến đối tượng MapControl, để mọi thay đổi trong khu vực hiển thị của MapControl sẽ được cập nhật bên MapOverview tương ứng.

- Đoạn code “gắn” MapOverView vào MapControl:

public void setModel(MapContext model) { this.setMapContext(model);

model.setProjection(m_MapAssoc.getMapContext().getProjection());

m_MapAssoc.getMapContext().getViewPort().addViewPortListener(this);

getMapContext().getViewPort().addViewPortListener(this);

}

- Một khi đã “kết nối” với MapOverview, một đoạn code được thêm vào ở listener của viewPort tương ứng với MapControl

- Sau đó, MapOverview sẽ implement lại ViewPortListener interface, và mỗi thay đổi về extent của Mapcontrol sẽ bắt thay đổi thay đổi tương ứng đối với MapOverView

Table of Content (T.O.C.)

- Đối tượng ToC có thể được xem như cách thể hiện khác để hiển thị đối tượng MapContext theo người sử dụng. Trong ToC, chúng ta có thể thấy tập các lớp dữ liệu chứa bởi một MapContext và được vẽ ra thông qua một

Báo cáo thực tập tốt nghiệp GVHD: Th.S Phan Hiền Vũ

 Được kích hoạt hay không

 Chú dẫn sẽ được applied vào mỗi lớp dữ liệu

 Các thông tin khác - Bảng dữ liệu – Tables:

 Bảng trong trong gvSIG có 2 dạng:

 Dạng bảng thuộc tính của một lớp không gian nào đó trong một View

 Dạng chỉ đơn thuần là bảng dữ liệu được thêm vào project

 Đối với bảng thuộc tính từ lớp dữ liệu không gian, nó sẽ bao gồm các thuộc tính kèm theo khác và các listeners của các sự kiện để các hành vi trên lớp dữ liệu sẽ tác động qua lại đối với bảng. Ví dụ khi xóa hay khi cập nhật thì dữ liệu không gian và bảng dữ liệu thuộc tính sẽ có mối liên hệ với nhau để dữ liệu được toàn vẹn

 Lớp thể hiện document Table là ProjectTable. IEditableSource là nơi dữ liệu được nắm giữ thật sự (các giá trị của từng dòng). Các thông tin khác được sử dụng để quản lý các lớp liên quan đến table, các field…

 Thông thường, chúng ta sẽ làm việc với mô hình IeditableSource khi chúng ta muốn làm việc với dữ liệu thô

 Để thêm các chức năng cho table window, ta xem xét lớp

com.iver.cit.gvsig.project.documents.table.gui.Table, tổng quan của nó gồm:

 Các listeners liên quan để đáp trả các sự kiện từ mouse và keyboard (như TableKeyListener, MouseRow, MouseHandler).

 Trả lời các sự kiện selection events (là TableSelectionListener).

Một phần của tài liệu Báo cáo thực tập tốt nghiệp - - Nghiên cứu WebGIS phục vụ du lịch - - Xây dựng WebGIS phục vụ du lịch tại Trung tâm ứng dụng Hệ thông tin địa lý của Sở Khoa Học Công Nghệ TPHCM (Trang 21 - 26)

Tải bản đầy đủ (DOC)

(54 trang)
w