Thiết kế mã nguồn cho plugin

Một phần của tài liệu Đề ti vẽ v phân tích bản Đồ Địa lý việt nam bằng phần mềm qgis (Trang 21 - 26)

2.2 Phân tích thiết kế plugin

2.2.3 Thiết kế mã nguồn cho plugin

Plugin Builder giúp rút ngắn thời gian thiết kế mã nguồn cho plugin mới, giúp tiết kiệm thời gian của các nhà phát triển plugin trong các phần mềm

GIS như QGIS. Ban đầu, Plugin Builder tạo các tệp mã nguồn gốc và tệp giao diện UI có thể chỉnh sửa được. Plugin khởi tạo mới ban đầu chỉ có khung plugin bên ngoài (phần tên Plugin Chuyển đổi toạ độ) và tác vụ OK / Cancel. Sau đó, được thiết kế giao diện như đề cập tới ở trên với 3 phần rõ ràng. Ưu điểm của plugin là cho phép người sử dụng không cần phải quan tâm tới hệ toạ độ gốc của lớp dữ liệu được chọn mà chỉ cần chọn hệ toạ độ đích muốn chuyển toạ độ. Nhược điểm là lớp dữ liệu cần có thông tin về toạ độ mới có thể chuyển đổi toạ độ được. Bên cạnh đó, dữ liệu lưu được từ giao diện không thể ghi đè do đó cần đặt tên khác nhau cho mỗi lần thực thi plugin, và giao diện hiện tại chưa có nhiều hoàn chỉnh. Mặc dù vậy, plugin sau khi được thiết kế mã nguồn đã hoạt động tương đối tốt,

Do đã có các tệp mã nguồn gốc khởi tạo, nên quá trình thiết kế lệnh trên giao diện không tốn quá nhiều thời gian tìm hiểu và tạo mã. Tương ứng với 3 phần đã được thể hiện trên giao diện là 4 lệnh trên giao diện, tuy nhiên chia ra thành 2 phần chính: Phần liên kết giao giao diện (gồm 2 lệnh) và Phần thực hiện tác vụ của plugin (gồm 2 lệnh). Để thực hiện thiết kế mã nguồn, Notepad++ đã được cài đặt và sử dụng như một trình soạn thảo mã,

Về phần liên kết giao diện:

- Lệnh thứ nhất - gọi các lớp hiện có trong phần mềm QGIS và nhập vào ô lựa chọn của phần Lớp dữ liệu cần đổi toạ độ: ô lựa chọn này được thiết kế như một đối tượng (object), có tên sử dụng để truy vấn là mMapLayerComboBox.

Hình 2. 15. Mã nguồn cho lệnh thứ nhất Mã nguồn cho lệnh này được hiểu như sau:

22

layers = QgsProject.instance().layerTreeRoot().children():

tìm kiếm tất cả các lớp dữ liệu đang được mở trong phần mềm QGIS

self.dlg.mMapLayerComboBox.addItems([layer.name() for layer in layers if type(layer) == “QgsVectorLayer”]): thêm toàn bộ các lớp dữ liệu này vào ô lựa chọn Lớp dữ liệu cần đổi toạ độ với loại dữ liệu là Vector (được kiểm tra bằng lệnh if) bởi theo thiết kế plugin ban đầu là sử dụng để chuyển đổi toạ độ một lớp dữ liệu Vector từ OSM.

- Lệnh thứ hai - gọi hộp thoại cho phép đặt tên cho tệp đầu ra và lưu ở dạng .shp:

Hình 2. 16. Mã nguồn cho lệnh thứ hai

Lệnh này được thiết kế trong giao diện với object tên pushButton, để tương tác với object này, sử dụng lệnh self.dlg.pushButton (ô kí hiệu

“…” như trong Hình xx). Một chương trình được xác định để có thể gọi ra hộp thoại lưu trữ là select_output_file. Để trả về đường dẫn cho tệp kết quả đầu ra, lệnh self.dlg.lineEdit.setText(filename) cho phép nhập vào tên tệp kết quả và trả lại tên tệp vào object ô nhập tên với phần mở rộng tự động được thêm vào, tên tệp cuối cùng ở dạng như sau, ví dụ:

Hình 2. 17. Tên tệp kết quả được trả về vào object tên lineEdit với phần mở rộng mặc định là .shp

Về phần thực hiện tác vụ của plugin:

- Lệnh thứ 3 - lựa chọn hệ toạ độ đích cần chuyển đổi:

Hình xx. Gọi toạ độ được chọn trong ô lựa chọn toạ độ Trong giao diện của plugin này, phần Hệ toạ độ đích là một object của giao diện với tên mQgsProjectSelectionWidget, để gọi object này sử dụng lệnh self.dlg.mQgsProjectSelectionWidget, sau đó dùng lệnh .crs() để lấy thông tin về toạ độ được chọn. Sau đó, trở thành một trong số các thông số cho việc chuyển đổi toạ độ

- Lệnh thứ 4 – tác vụ thực hiện chuyển đổi toạ độ:

Sau khi nhấn chọn nút OK tại giao diện, plugin sẽ tiến hành thực thi chuyển đổi toạ độ. Mã nguồn cho lệnh này được thiết kế như sau:

24

Hình 2. 18. Mã nguồn cho lệnh thứ 4

Đầu tiên, khởi tạo lệnh để giao diện có thể giao tiếp với các mã nguồn thành phần và thực thi chúng. Gọi lệnh khởi tạo thực thi plugin và lưu trữ vào biến result. Khi biến result trả về giá trị True (if result / if result==True) thì plugin thực hiện tác vụ của mình (khi nút OK được nhấn chọn tại giao diện), lớp dữ liệu tại phần Lớp dữ liệu cần đổi toạ độ trong giao diện được chọn sử dụng lệnh self.dlg.mMapLayerComboBox.currentLayer(), lệnh này sau đó trả về lớp dữ liệu được chọn hiện tại và lưu ở biến selectedLayer, biến này sau đó được truy xuất nguồn dữ liệu và lưu ở biến layer_path. Tiếp theo, Lệnh thứ 3 được thực thi để truy xuất toạ độ đích và lưu ở biến destCRS. Biến output_path lưu trữ tên tệp đã được trả về tại phần Đặt tên cho tệp đầu ra. Các thông số chuyển đổi toạ độ được xác định và lưu trữ tại biến parameter dạng Dictionary, trong đó gồm INPUT trỏ về biến dữ liệu layer_path TARGET_CRS, trỏ về biến toạ độ destCRS, OUTPUT trỏ về biến đường dẫn lưu trữ output_path.

Những biến kể trên sau khi được trỏ tới và lưu trữ được sử dụng vào lệnh chuyển đổi toạ độ từ Qprocessing, và được lưu trữ vào biến result bằng lệnh processing.run(‘native:reprojectlayer’, parameter). Lệnh này bao gồm các thành phần sau:

- native:reprojectlayer: thông báo tới QProcessing thực thi lệnh chuyển đổi toạ độ

- parameter: thông báo tới QProcessing các thông số sử dụng để chuyển đổi toạ độ

Sau cùng, dữ liệu chuyển đổi toạ độ được mở vào phần mềm QGIS và trở thành một lớp dữ liệu có thể sử dụng được trong QGIS với tên đã đặt trước đó. Các lệnh này được thực hiện dưới phần #Add reprojected layer to QGIS GUI.

Một phần của tài liệu Đề ti vẽ v phân tích bản Đồ Địa lý việt nam bằng phần mềm qgis (Trang 21 - 26)

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

(31 trang)