Table of Contents
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[/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.orgMì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[/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[/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[/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 đồ[/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[/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[/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[/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[/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[/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ề
vsicurlNế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[/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[/caption] [caption id="attachment_1696" align="alignnone" width="1279"] 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.zipFail, 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[/caption] Vậy thử thêm /vsizip//vsicurl/ xem thế nào
/vsizip//vsicurl/http://dev.dothanhlong.org/data/qgis/vietnam_provinces_geojson.zipSau 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[/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[/caption] [caption id="attachment_1701" align="alignnone" width="1288"] 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[/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ó ^^]]>
Warning: Undefined variable $comments_number in /shared/webdir2/dothanhlong.org/wp-content/themes/business-hub/comments.php on line 35
Warning: Undefined variable $comments_number in /shared/webdir2/dothanhlong.org/wp-content/themes/business-hub/comments.php on line 39
0 thoughts on “QGIS đọc dữ liệu để từ xa (remote data) thông qua HTTP URL”