Dữ liệu GIS Sói's Tutorials Ý tưởng

QGIS đọc dữ liệu để từ xa (remote data) thông qua HTTP URL

QGIS đọc dữ liệu để từ xa (remote data) thông qua HTTP URL Tình hình là cái vấn đề về dung lượng lưu trữ nhìn về lâu dài nó cấp bách lắm nếu không có điều kiện đầu tư ổ cứng :v Tuy nhiên, dữ liệu mình muốn chia sẻ với nhiều người và muốn có thể dùng được nhanh chóng, gọn lẹ thì chỉ có cách để dữ liệu đâu đó trên Internet rồi kết nối phần mềm đến đọc thôi.

Và về xa là mình muốn tạo ứng dụng cho phép người dùng có thể sử dụng dữ liệu của chính họ để publish các ứng dụng WebMap, các services bản đồ để chia sẻ thông tin đến nhiều người, góp phần mang dữ liệu địa lý, bản đồ đến gần với nhiều người hơn. Chứ giờ nhắc đến làm bản đồ, làm địa lý mà mọi người cứ nhìn như ông từ trên sao Hỏa xuống không à =))
Lại và.. vì thế mình mới tìm hiểu vấn đề load remote data trong QGIS, để xem có cách nào để QGIS đọc dữ liệu trực tiếp từ các hosting không? Gợi ý của việc này xuất phát từ việc bản QGIS3 có chức năng cho load vector data thông qua Protocol như HTTP, HTTPS, FTP và thậm chí là cloud mặc dù không biết cloud nào :v [caption id="attachment_1673" align="alignnone" width="1002"]QGIS3 có chức năng cho load vector data thông qua Protocol như HTTP, HTTPS, FTP và thậm chí là cloud QGIS3 có chức năng cho load vector data thông qua Protocol như HTTP, HTTPS, FTP và thậm chí là cloud[/caption] Để test thử, mình tiến hành up thử dữ liệu với nhiều loại định dạng khác nhau lên VPS của mình ở địa chỉ:
http://dev.dothanhlong.org
Mình xuất dữ liệu ra một số định dạng dữ liệu hay dùng như Shapefile, GeoJson, GeoPackage, SpatialSQLite và các dạng nén zip của chúng. Trong đó thằng tối ưu về dung lượng nhất là zip của Shapefile và GeoPackage, thằng nặng nhất là SpatialSQLite. [caption id="attachment_1681" align="alignnone" width="714"]tối ưu về dung lượng nhất là zip của Shapefile và GeoPackage tối ưu về dung lượng nhất là zip của Shapefile và GeoPackage[/caption]

Đường dẫn (URL) truy cập đến dữ liệu

http://dev.dothanhlong.org/data/qgis/
[caption id="attachment_1682" align="alignnone" width="482"]Đường dẫn (URL) truy cập đến dữ liệu Đường dẫn (URL) truy cập đến dữ liệu[/caption]

Mở dữ liệu Shapefile trong QGIS thông qua URL

http://dev.dothanhlong.org/data/qgis/shp/vietnam_provinces.shp
[caption id="attachment_1684" align="alignnone" width="1279"]Mở dữ liệu Shapefile trong QGIS thông qua URL Mở dữ liệu Shapefile trong QGIS thông qua URL[/caption] Load dữ liệu Ok, tốc độ cũng khá nhanh^^ Thông tin lớp bản đồ [caption id="attachment_1685" align="alignnone" width="1280"]Thông tin lớp bản đồ Thông tin lớp bản đồ[/caption] Mình để ý có dòng
Source /vsicurl/http://dev.dothanhlong.org/data/qgis/shp/vietnam_provinces.shp
[caption id="attachment_1687" align="alignnone" width="599"]Mở dữ liệu Shapefile trong QGIS thông qua URL Mở dữ liệu Shapefile trong QGIS thông qua URL[/caption] Ồ, hóa ra nó dùng cái giao thức hay gì gì đó nó xử lý cái dữ liệu từ host trước rồi mới add vào QGIS. Mình thử với các dữ liệu khác, và ưu tiên dùng GeoJson vì thằng này rất flexible, có thể dùng “lai” cho cả Desktop lẫn Web. (Javascript đọc json vẫn dễ hơn là đọc Shapefile, kaka)

Mở remote GeoJson trong QGIS

http://dev.dothanhlong.org/data/qgis/vietnam_provinces.geojson
[caption id="attachment_1688" align="alignnone" width="1276"]Mở remote GeoJson trong QGIS Mở remote GeoJson trong QGIS[/caption] Tương tự, GeoJson vẫn mở tốt. kaka Bây giờ test mới zip file

Mở GeoJson Zip trong QGIS thông qua URL

http://dev.dothanhlong.org/data/qgis/vietnam_provinces_geojson.zip
Ồ, ngạc nhiên chưa, được luôn này [caption id="attachment_1689" align="alignnone" width="1277"]Mở GeoJson Zip trong QGIS thông qua URL Mở GeoJson Zip trong QGIS thông qua URL[/caption] Kaka, thấy phấn khích rồi đấy. Vì GeoJson mà nén zip lại thì dung lượng thì sẽ giảm rất nhiều, như trường hợp dữ liệu hành chính Việt Nam, từ Geojson ~ 2.3Mb mà zip lại còn 627Kb. Kinh ngạc chưa? [caption id="attachment_1692" align="alignnone" width="623"]Mở GeoJson Zip trong QGIS thông qua URL Mở GeoJson Zip trong QGIS thông qua URL[/caption] Kiểm tra thông tin dữ liệu xem đường dẫn nó có khác gì với mở trực tiếp không? [caption id="attachment_1693" align="alignnone" width="1280"]Mở GeoJson Zip trong QGIS thông qua URL Mở GeoJson Zip trong QGIS thông qua URL[/caption] Phát hiện ra cái này:
Source /vsizip//vsicurl/http://dev.dothanhlong.org/data/qgis/vietnam_provinces_geojson.zip
Ồ, thì ra nếu mà dữ liệu dạng nén zip thì nó cần thêm vsizip phía trước vsicurl Vậy. Để đọc được dữ liệu từ url thì cần thêm tiếp đầu vsicurl để nó load data về
vsicurl
Nếu dữ liệu là dạng nén zip thì cần thêm vsizip để phần mềm giải nén ra
vsizip

Test với QGIS 2.x

Với QGIS 2.x thì mình nhớ là không có chức năng mở dữ liệu từ URL sẵn, vậy mình sẽ thử Đới với QGIS 2.18.22 (Cái mình đang sài) thì chức năng mở file vector có cho protocol nhưng không ghi rõ là loại gì [caption id="attachment_1695" align="alignnone" width="796"]chức năng mở file vector có cho protocol chức năng mở file vector có cho protocol[/caption]

Mở dữ liệu GeoJson với QGIS 2

http://dev.dothanhlong.org/data/qgis/vietnam_provinces.geojson
[caption id="attachment_1697" align="alignnone" width="477"]Mở dữ liệu GeoJson với QGIS 2 Mở dữ liệu GeoJson với QGIS 2[/caption] [caption id="attachment_1696" align="alignnone" width="1279"]Mở dữ liệu GeoJson với QGIS 2 Mở dữ liệu GeoJson với QGIS 2[/caption] Ok, vẫn được nhé. Nhưng nó không ghi là có dùng vsicurl hay không :p

Mở dữ liệu zip geojson trên QGIS 2

http://dev.dothanhlong.org/data/qgis/vietnam_provinces_geojson.zip
Fail, không mở được. Nó không nhận dạng được dữ liệu [caption id="attachment_1698" align="alignnone" width="1292"]Mở dữ liệu zip geojson trên QGIS 2 Mở dữ liệu zip geojson trên QGIS 2[/caption] Vậy thử thêm /vsizip//vsicurl/ xem thế nào
/vsizip//vsicurl/http://dev.dothanhlong.org/data/qgis/vietnam_provinces_geojson.zip
Sau khi thêm /vsizip//vsicurl/ thì ok [caption id="attachment_1699" align="alignnone" width="1276"]Mở dữ liệu zip geojson trên QGIS 2 Mở dữ liệu zip geojson trên QGIS 2[/caption] Suy ra /vsizip//vsicurl/ cũng quan trọng phết, kaka Test với Geojson thì ok trên bản QGIS 2.x rồi, thế còn shapefile? Vì không thấy nó list danh sách cho mở shapefile ở tab protocol

Mở remote Shapefile trong QGIS 2.x

http://dev.dothanhlong.org/data/qgis/shp/vietnam_provinces.shp
[caption id="attachment_1700" align="alignnone" width="477"]Mở remote Shapefile trong QGIS 2.x Mở remote Shapefile trong QGIS 2.x[/caption] [caption id="attachment_1701" align="alignnone" width="1288"]Mở remote Shapefile trong QGIS 2.x Mở remote Shapefile trong QGIS 2.x[/caption] Faile quá Fail :’) Vậy thì phải nhờ đến “Magic Words” vsicurl – Nói theo cách của MapServer khi tạo mapfile thôi :v

[caption id="attachment_1703" align="alignnone" width="1279"]Mở remote Shapefile trong QGIS 2.x Mở remote Shapefile trong QGIS 2.x[/caption] Haha, Ok – mở tốt :p vậy đấy, đối với QGIS 2 thì chúng ta hãy cùng nhớ đến những Magic Words sau
  • vsizip: Để giải nén
  • vsicurl: Để load remote data

Vậy là chúng ta có thể tha hồ lưu trữ dữ liệu Online để có thể truy cập mọi lúc, mọi nơi mà không cần download dữ liệu về máy Ở Vọc vạch lần sau mình sẽ tets thử trên các hosting miễn phí xem có load được hay không, vì dù sao thì VPS hoặc Hosting xịn không phải ai cũng có ^^]]>

1 thought on “QGIS đọc dữ liệu để từ xa (remote data) thông qua HTTP URL

Leave a Reply

Your email address will not be published. Required fields are marked *