Tuesday, June 24, 2014

Tạo Routing cho PostgreSQL sử dụng OSM2PO

Quách Đồng Thắng 
Trung tâm Ứng dụng GIS Tp.HCM

Tiếp theo bài Sử dụng PgRouting phân tích mạng trong ứng dụng GIS, bài viết này trình bày cách sử dụng dữ liệu OpenStreetMap để tạo mạng routing trong CSDL PostGIS với công cụ OSM2PO.

Các phần mềm cần cài đặt trước: PostgreSQL/PostGIS, QGIS
Download và giải nén OSM2PO.
Cấu hình lại file demo.bat để download dữ liệu OSM ở khu vực tùy chọn. Trong ví dụ này là dữ liệu OSM Việt Nam trên geofabirk server.
java -Xmx512m -jar osm2po-core-4.8.8-signed.jar prefix=vn tileSize=x http://download.geofabrik.de/asia/vietnam-latest.osm.pbf
Nếu muốn dữ liệu OSM ở khu vực nhỏ hơn (ví dụ Tp.HCM), có thể dùng công cụ Download OpenStreetMap Data trong QGIS (vào Vector/OpenStreetMap/Download Data)

Lúc này, file demo.bat được chỉnh sửa lại đường dẫn trỏ đến file osm vừa download
java -Xmx512m -jar osm2po-core-4.8.8-signed.jar prefix=hcm tileSize=x đường dẫn đến file.osm
Tiếp theo, tạo database với template postgis trong PostgreSQL, đặt tên là routing. Sau đó chạy file demo.bat. Kết quả:

Tiếp theo, sử dụng psql hoặc vào PgAdmin thực thi câu lệnh hcm_2po_4pgr.sql để tạo table cho database routing.

Đến đây, nhà phát triển ứng dụng có thể sử dụng các hàm routing (đã được tích hợp sẵn trong template postgis) để phát triển các ứng dụng tìm đường (tham khảo bài viết Sử dụng PgRouting phân tích mạng trong ứng dụng GIS). Tuy nhiên, người dùng có thể sử dụng chức năng PgRouting trong QGIS để kiểm tra nhanh kết quả:
Trong QGIS, vào Plugins/ Manages and install Plugins, tìm và cài đặt PgRouting.
Kết nối đến database routing và sử dụng công cụ pgRouting để thử nghiệm chức năng tìm đường

Ngoài ra, công cụ OSM2PO cũng tạo ra một giao diện chạy service routing  tại http://localhost:8888/Osm2poService (lưu ý vẫn để file demo.bat chạy để duy trì service)


Nhận xét: so với công cụ OSM2PgRouting, công cụ OSM2PO đơn giản hơn nhiều do chỉ tạo duy nhất một table phục vụ routing. Người dùng quan tâm có thể tìm hiểu sâu hơn các tham số cấu hình của OSM2PO, cũng như chỉnh sửa các tham số mạng của table routing và thực hiện các chức năng tương tác phía client để có được ứng dụng mong muốn.

Thursday, June 12, 2014

Tạo liên kết đối tượng không gian đến trang Wikipedia sử dụng action trong QGIS

Quách Đồng Thắng
Trung tâm Ứng dụng GIS TP.HCM

QGIS hỗ trợ tính năng rất hay, cho phép người dùng tự tạo "action" cho đối tượng không gian khi có thao tác click, như mở một hình ảnh, một đoạn video hay truy cập đến một ứng dụng bất kỳ. Bài viết trình bày cách tạo một action trong QGIS thông qua ví dụ kết nối các quốc gia đến trang Wikipedia, giúp người dùng có thể truy cập nhanh đến các khái niệm được định nghĩa trong Wikipedia cho một đối tượng trên bản đồ.

Đầu tiên, download bản đồ thế giới world_borders và mở trong QGIS. Trong bảng thuộc tính của world_borders có trường "NAME" là tên quốc gia. Chúng ta sẽ kết nối thuộc tính NAME với trang Wikipedia tương ứng bằng cách định nghĩa một action bằng Python:

Vào properties --> Actions. Mục Type chọn Python, đặt tên trong trường Name (ví dụ Wikipedia), mục Action thêm vào đoạn script Python sau:

from PyQt4.QtCore import QUrl; from PyQt4.QtWebKit import QWebView; myWV = QWebView(None);
myWV.load(QUrl('http://vi.wikipedia.org/wiki/[% "NAME" %]')); myWV.show()

Lưu ý muốn hiển thị trang Wikipedia tiếng Việt thì thay http://wikipedia.org thành http://vi.wikipedia.org 


(Muốn tham khảo các Action sẵn có, chọn Add default actions)


Tiếp theo chọn công cụ action để click vào đối tượng không gian và xem trang Wikipedia tương ứng.

Nhân dịp khai mạc Worldcup 2014, chúng ta cùng tìm hiểu đất nước Brazil:


Nếu muốn "google" thuộc tính của đối tượng không gian, cụ thể là tên quốc gia trong world_borders, ta định nghĩa action như sau: type là Open, Name là "Google", Mục Action nhập vào
http://www.google.com/search?q=[% "NAME" %]




Tiếp theo, nếu muốn tạo thêm một action để mở một hình ảnh tiêu biểu cho từng quốc gia thì có thể tạo thêm trường "image" với kiểu string lưu trữ đường dẫn đến file ảnh trên máy. Để thuận tiện khi cập nhật, ở mục Fields/Line edit chọn là Filename (QGIS sẽ mở dialog để người dùng chọn file ảnh thay vì phải nhập thủ công)


Sau đó t
ạo một action mới với type là Open, Name là "Hình ảnh", Mục Action chọn Insert field "image".  Action sẽ gọi trình xem ảnh mặc định của Windows để hiển thị hình ảnh:



Kết quả: