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 ý mun hin th trang Wikipedia tiếng Vit thì thay http://wikipedia.org thành http://vi.wikipedia.org 


(Mun tham kho các Action sn có, chn Add default actions)


Tiếp theo chn công c action đ click vào đi tượng không gian và xem trang Wikipedia tương ng.

Nhân dp khai mc Worldcup 2014, chúng ta cùng tìm hiu đt nước Brazil:


Nếu mun "google" thuc tính ca đi tượng không gian, c th là tên quc gia trong world_borders, ta đnh nghĩa action như sau: type là Open, Name là "Google", Mc Action nhp vào
http://www.google.com/search?q=[% "NAME" %]




Tiếp theo, nếu mun to thêm mt action đ m mt hình nh tiêu biu cho tng quc gia thì có th to thêm trường "image" vi kiu string lưu tr đường dn đến file nh trên máy. Đ thun tin khi cp nht, mc Fields/Line edit chn là Filename (QGIS s m dialog đ người dùng chn file nh thay vì phi nhp th công)


Sau đó t
o mt action mi vi type là Open, Name là "Hình nh", Mc Action chn Insert field "image".  Action s gi trình xem nh mc đnh ca Windows đ hin th hình nh:



Kết qu:





Friday, June 6, 2014

Chuyển đổi tọa độ VN2000 – WGS84 trong QGIS

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

Giả sử ta có dữ liệu Tp.HCM ở hệ tọa độ VN2000. Để chuyển dữ liệu này sang WGS84 trong QGIS, thực hiện các bước sau đây:
Vào Setting à Custom CRS àAdd new CRS

 Đặt tên là Vn2000toWGS84_HCM, ở trường Parameters nhập vào:
+proj=tmerc +lat_0=0 +lon_0=105.75 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,0.00205,0.0005,-0.00335,0.0188 +units=m +no_defs
Các tham số ở đây là kinh tuyến trục địa phương 105o45’, múi chiếu 3 độ của Tp.HCM. Các địa phương khác sử dụng kinh tuyến trục địa phương được hướng dẫn theo Thông tư số 973 /2001/TT-TCĐC, ngày 20/06/2001.
Bộ tham số sử dụng trong bài viết tham khảo tại  georepository/ VN2000 to WGS 84 (2). Các tham số này được mô tả là phù hợp với khu vực Đồng Bằng Sông Cửu Long, bao gồm Tp.HCM, do Trường Đại học Bách Khoa Tp.HCM công bố năm 2010.

Sau khi thiết lập xong, click CRS status  (góc dưới bên phải), hoặc vào Project properties/ CRS, chọn Enable ‘on the fly’ CRS transformation với hệ tọa độ đích là WGS84 (chuyển từ VN2000 sang WGS84).

Tiếp theo, chuột phải vào lớp dữ liệu cần chuyển tọa độ, chọn Set Layer CRS là Vn2000toWGS84_HCM (vừa tạo ở bước trên)

Sau bước này, QGIS sẽ tự động chuyển đổi tọa độ VN2000 sang WGS84 theo các tham số được thiết lập trong custom CRS.

Để QGIS “nhớ” việc chuyển đổi này cho lần load sau, cần save as layer với custom CRS Vn2000toWGS84_HCM (giả sử đặt tên là gt_pl_WGS84_HCM)

Sau bước này, QGIS sẽ tạo ra file gt_pl_WGS84_HCM.qpj có nội dung:
PROJCS["unnamed",GEOGCS["WGS 84",DATUM["unknown",SPHEROID["WGS84",6378137,298.257223563],TOWGS84[-192.873,-39.382,-111.202,0.00205,0.0005,-0.00335,0.0188]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105.75],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
Khi mở shapefile này, QGIS sẽ đọc các thông số trong gt_pl_WGS84_HCM.qpj để “on the fly” projection đến hệ tọa độ mong muốn.
Một điểm cần lưu ý là do cách quản lý projection của QGIS hơi khác so với ArcGIS (QGIS có thể đọc các tham số chuyển đổi được định nghĩa sẵn trong file *.qpj), nên nếu mở shapefile bằng ArcGIS thì bản chất shapefile vẫn chưa thực sự được chuyển về WGS84. Hình sau cho thấy gt_pl_WGS84_HCM vẫn ở hệ VN2000 khi mở trong ArcMap.

Để có thể thực sự chuyển shapefile về WGS84 cho đa số các phần mềm GIS khác có thể hiển thị đúng, có thể tham khảo bài viết giới thiệu công cụ Chuyển đổi VN2000 sang WGS84 trong ArcGIS.
Có thể thấy các tham số công bố trên georepository hơi khác so với bộ tham số của Bộ TNMT. Để sử dụng bộ tham số này, ta tạo thêm một custom CRS khác với tên là Vn2000toWGS84_HCM_BoTNMT, ở trường Parameters nhập vào:
+proj=tmerc +lat_0=0 +lon_0=105.75 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=-191.90441429, -39.30318279-111.45032835, -0.00928836, 0.01975479, -0.00427372, 0.252906278 +units=m +no_defs
Các thao tác chuyển đổi được thực hiện tương tự các bước trên. Kết quả bước đầu cho thấy sai lệch tương đối giữa 2 bộ tham số này khi chuyển sang WGS84 là khoảng 1.2m.

Thursday, June 5, 2014

Chuyển đổi hệ tọa độ VN2000 sang WGS84 và ngược lại trong ArcGIS

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

Theo quy định hiện hành của Bộ Tài nguyên và Môi trường, dữ liệu GIS được xây dựng và sử dụng thống nhất ở hệ tọa độ quốc gia VN2000. Tuy nhiên, trong thực tế, đối với các ứng dụng GIS không đòi hỏi độ chính xác cao (như so với địa chính), chúng ta có nhu cầu chuyển đổi VN2000 sang WGS84 để có thể chồng khớp với các dịch vụ bản đồ phổ biến hiện nay như Google maps, OSM, Bing maps,…Bài viết trình bày cách chuyển tọa độ VN2000 sang WGS84 trong phần mềm ArcGIS (version 10.2).
Trong ArcGIS, các lớp dữ liệu được load vào trong cùng một data frame (Layers) và sử dụng chung coordinate system của data frame. Khi một shapefile được add vào đầu tiên, Data frame sẽ đọc thông thi từ file *.prj để thiết lập coordinate system cho Data frame, cũng như cho các lớp dữ liệu được thêm vào sau đó.

Chuyển đổi VN2000 sang WGS84
Để thử nghiệm chuyển shapefile từ VN2000 sang WGS84, ta sẽ download và extract lớp ranh giới hành chính phường của TP.HCM (đặt tên là hochiminh.shp) từ http://www.gadm.org/, dữ liệu ở hệ WGS84, file *.prj:
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
Sau khi add hochiminh.shp vào ArcMap, lúc này cả Dataframe và hochiminh.shp đều chia sẻ chung coordinate system, trong trường hợp này là Geographic Coordinate System WGS84.
Tiếp theo add shapefile giao thông Tp.HCM (gt_pl.shp) ở toạ độ VN-2000, kinh tuyến trục địa phương 105 độ 45 phút, múi chiếu 3 độ, Datum Vn2000.
Lúc này, nếu ArcGIS nhận thấy dữ liệu gt_pl khác datum với Data frame (Vn_2000 so với WGS84) thì sẽ xuất hiện hộp thoại yêu cầu người dùng “on the fly” projection để chuyển sang hệ tọa độ WGS84. Trong trường hợp này chúng ta sẽ chọn Transformations

Ở phiên bản 10.2, ArcGIS đã tích hợp sẵn Coordinate Transformation từ Vn2000 sang WGS84 với tên là VN_2000_To_WGS84_2

Có thể tham khảo chi tiết các đặc tả Coordinate Transformation VN_2000_To_WGS84_2 trong thư mục cài đặt ArcGIS, ví dụ C:\Program Files\ArcGIS\Desktop10.2\Documentation\ geographic_transformations.pdf

Kết quả sau khi chuyển đổi:


Tuy nhiên, đây chỉ là “on the fly” transformation, nghĩa là ArcGIS chỉ “nhớ” chuyển đổi về đúng hệ tọa độ WGS84 trong phạm vi project, trong khi vẫn chưa thực sự chuyển đổi dữ liệu về hệ tọa độ WGS84. Để chuyển đổi, chúng ta vào ArcToolbox à Data Management Tools à Projections and Transformations à Feature à Project


Chuyển hệ tọa độ VN2000 sang WGS84
Để chuyển hệ tọa độ WGS84 sang VN2000 trong ArcGIS, có thể dùng chính bộ tham số này để chuyển đổi mà không cần định nghĩa lại tham số trái dấu (như hướng dẫn theo Công văn số 1123/ĐĐBĐ-CNTĐ ngày 26/10/2017).
Trong quá trình chuyển đổi ngược lại, có thể chọn Hệ tọa độ đích là VN2000 UTM Zone 48N, sau đó có thể chỉnh sửa thông số kinh tuyến trục và hệ số tỉ lệ chiều dài cho phù hợp với từng địa phương trong file .prj.

Hoặc để có thể tạo thêm Projected Coordinate System với các tham số kinh tuyến trục và hệ số tỉ lệ chiều dài thích hợp và chọn làm hệ tọa độ đích khi chuyển đổi. Các thông tin này sẽ được lưu vào file .prj ở hệ VN2000 sau khi chuyển đổi.


Có thể thấy hàm chuyển đổi mặc định của ArcGIS sử dụng bộ tham số tại georepository, là bộ tham số địa phương, hơi khác so với bộ tham số của Bộ Tài nguyên và Môi trường công bố.
Nếu muốn sử dụng bộ tham số của Bộ TNMT, cũng như một bộ tham số bất kì khác, có thể tự định nghĩa bằng công cụ CreateCustomGeoTransformation, nhập các thông số tương ứng:
Tham số dịch chuyển gốc tọa độ
X = -191.90441429
Y = -39.30318279
Z = -111.45032835
Góc xoay trục tọa độ
Góc x = -0.00928836
Góc y = 0.01975479
Góc z = -0.00427372
Hệ số tỉ lệ chiều dài k = 0.252906278


Sau khi tạo thành công, công cụ transform được lưu trữ tại:
C:\Users\user_name\AppData\Roaming\ESRI\Desktop10.2\ArcToolbox\CustomTransformations

Sau đó có thể thực hiện projection tương tự các bước trên sử dụng bộ tham số này.

Kết quả chuyển đổi cho thấy có sai lệch tương đối khoảng 1.2m so với bộ tham số mặc định của ArcGIS. Việc đánh giá độ chính xác của bộ tham số chuyển đổi do Bộ Tài nguyên và Môi trường công bố (có tính pháp lý, sử dụng chung cho cả nước) và bộ tham số địa phương là vấn đề khá phức tạp và nằm ngoài phạm vi của bài viết. Do đó, việc lựa chọn bộ tham số nào tùy thuộc vào người dùng (cân nhắc nên sử dụng bộ tham số pháp lý hay bộ tham số chưa được công nhận – nhưng có thể chính xác hơn cho địa phương?). Tuy nhiên, theo quan điểm của người viết, trong khi chưa có công bố pháp lý mới, cũng như chưa có điều kiện kiểm chứng thì đối với các ứng dụng không đòi hỏi độ chính xác cao, người dùng có thể tùy chọn sử dụng một trong hai bộ tham số này.