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

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

Để 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.

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

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

http://dev.dothanhlong.org/data/qgis/

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

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

http://dev.dothanhlong.org/data/qgis/shp/vietnam_provinces.shp

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

Load dữ liệu Ok, tốc độ cũng khá nhanh^^

Thông tin lớp bản đồ

Thông tin lớp bản đồ
Thông tin lớp bản đồ

Mình để ý có dòng

Source
/vsicurl/http://dev.dothanhlong.org/data/qgis/shp/vietnam_provinces.shp

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

Ồ, 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

Mở remote GeoJson trong QGIS
Mở remote GeoJson trong QGIS

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

Mở GeoJson Zip trong QGIS thông qua URL
Mở GeoJson Zip trong QGIS thông qua URL

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?

Mở GeoJson Zip trong QGIS thông qua URL
Mở GeoJson Zip trong QGIS thông qua URL

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?

Mở GeoJson Zip trong QGIS thông qua URL
Mở GeoJson Zip trong QGIS thông qua URL

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ì

chức năng mở file vector có cho protocol
chức năng mở file vector có cho protocol

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

http://dev.dothanhlong.org/data/qgis/vietnam_provinces.geojson

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

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

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

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

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

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

Mở remote Shapefile trong QGIS 2.x
Mở remote Shapefile trong QGIS 2.x
Mở remote Shapefile trong QGIS 2.x
Mở remote Shapefile trong QGIS 2.x

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

Mở remote Shapefile trong QGIS 2.x
Mở remote Shapefile trong QGIS 2.x

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ó ^^