- MapLibre Tile (MLT) là định dạng vector tile thế hệ mới thay thế Mapbox Vector Tile (MVT) hiện có, được thiết kế để nâng cao hiệu quả xử lý dữ liệu địa không gian quy mô lớn
- Cung cấp tỷ lệ nén cải thiện tới 6 lần cùng hiệu năng giải mã nhanh dựa trên SIMD, giúp cải thiện dung lượng lưu trữ, độ trễ và hiệu quả bộ nhớ đệm
- Có khả năng mở rộng trong tương lai, hướng tới hỗ trợ tọa độ 3D (độ cao), xử lý dựa trên GPU, kiểu dữ liệu phức hợp, linear referencing và m-values
- Hiện có thể dùng ngay với MapLibre GL JS và MapLibre Native, đồng thời hỗ trợ tile demo, máy chủ chuyển đổi và tạo dữ liệu thông qua Planetiler
- Đây là định dạng được phát triển nhờ sự hợp tác giữa cộng đồng mã nguồn mở, doanh nghiệp và học thuật, và được hoàn thiện với tài trợ từ Microsoft và AWS
Giới thiệu về MapLibre Tile
-
MapLibre Tile (MLT) là định dạng kế nhiệm của [Mapbox Vector Tile(MVT)], được thiết kế lại từ đầu để xử lý khối lượng dữ liệu địa không gian tăng mạnh và các định dạng nguồn thế hệ mới phức tạp
- Được thiết kế để tận dụng hiệu năng của phần cứng hiện đại và các graphics API, cho phép xử lý và kết xuất basemap 2D và 2.5D ở quy mô toàn cầu với hiệu năng cao
- Bản triển khai hiện tại tương đương MVT về mặt chức năng, nhưng được cải thiện về hiệu năng và hiệu quả
-
Các cải tiến kỹ thuật chính
- Cải thiện tỷ lệ nén: tăng tới 6 lần trên các tile lớn, nhờ áp dụng bố cục hướng cột và mã hóa nhẹ đệ quy
- Cải thiện hiệu năng giải mã: cấu trúc mã hóa nhanh và nhẹ, có thể kết hợp với lệnh SIMD/vectorization
- Kết quả là giảm độ trễ, giảm chi phí lưu trữ và truyền tải, tăng hiệu quả sử dụng bộ nhớ đệm
Khả năng mở rộng trong tương lai
-
MLT được thiết kế với mục tiêu hỗ trợ các tính năng tương lai sau
- Tăng cường hỗ trợ tọa độ 3D (độ cao)
- Tối ưu hóa định dạng lưu trữ và bộ nhớ để CPU và GPU xử lý hiệu quả
- Hỗ trợ linear referencing và m-values để tương thích với các định dạng thế hệ mới như Overture Maps (GeoParquet)
- Hỗ trợ các kiểu phức hợp như thuộc tính lồng nhau, danh sách, map
-
Hướng phát triển của MLT sẽ được quyết định theo nhu cầu của cộng đồng, và hoan nghênh nhiều ý tưởng mở rộng cũng như đóng góp khác nhau
- Tài liệu liên quan gồm slide trình bày FOSS4G 2024 của Markus Tremmel, bài nói chuyện trên YouTube và bài báo ACM
Thời điểm có thể sử dụng và tích hợp
-
MLT đã có thể sử dụng ngay lúc này
- Cả MapLibre GL JS và MapLibre Native đều hỗ trợ nguồn MLT
- Có thể sử dụng bằng cách chỉ định giá trị
mltcho thuộc tínhencodingtrong style JSON
-
Cách trải nghiệm và phát triển
- Sử dụng kiểu tile demo dựa trên MLT
- Dùng Encoding server để chuyển đổi thời gian thực style MVT hiện có sang MLT
- Phiên bản tiếp theo của Planetiler sẽ hỗ trợ tạo MLT
- Có thể xem tình trạng tích hợp tại trang trạng thái triển khai chính thức
-
Để chia sẻ trải nghiệm sử dụng MLT, nên tham gia kênh
#maplibre-tile-formattrên Slack hoặc GitHub Issues/Discussions
Lời cảm ơn và hợp tác
- MLT được phát triển thông qua nhiều năm hợp tác giữa giới học thuật, mã nguồn mở và doanh nghiệp
- Markus Tremmel là người nghĩ ra định dạng, Yuri Astrakhan là người dẫn dắt dự án
- Tim Sylvester phụ trách bản triển khai C++, Harel Mazor, Benedikt Vogl, Niklas Greindl phụ trách bản triển khai JavaScript
- Microsoft và AWS đã hỗ trợ kinh phí phát triển
Ghi chú
- Khác với MVT, MLT không hỗ trợ các layer mà kiểu giá trị trong cùng một cột thay đổi theo từng feature
1 bình luận
Ý kiến trên Hacker News
Khuyên nên tham dự buổi nói chuyện về MapLibre tại Geospatial devroom của FOSDEM vào thứ Bảy
Liên kết lịch sự kiện
Mình tìm thử vài trang ví dụ và so sánh ví dụ hiển thị bản đồ với MLT với ví dụ hiển thị bản đồ hiện có
Xem console log thì thấy hiệu quả nén được cải thiện khoảng 10%. Khá ấn tượng
Định dạng MLT tích hợp nhiều kiểu mã hóa nhẹ khác nhau, và thậm chí mỗi tile có thể được mã hóa theo cách khác nhau
Vì vậy cần một cách tiếp cận heuristic để tìm ra tổ hợp tối ưu, và luôn tồn tại đánh đổi giữa kích thước tile và hiệu năng giải mã
Dù vẫn đang ở giai đoạn đầu, AWS năm nay vẫn đang tài trợ cho công việc tối ưu hóa MLT nên còn nhiều dư địa cải thiện trong tương lai
Khi benchmark, điều quan trọng là xem xét mô hình sử dụng thực tế hơn là tổng kích thước tile — vì chẳng ai phóng to giữa đại dương cả 😉
Gần đây mình triển khai một giải pháp dựa trên pmtiles và thực sự rất hài lòng
Tham khảo tài liệu PMTiles
pmtiles dùng MVT, nhưng mình hy vọng sau này sẽ có công cụ chuyển đổi sang MLT
MapLibre là thư viện JS tốt nhất mình từng dùng cho việc hiển thị bản đồ trong trình duyệt
Nghĩ đến việc nó chuyển sang định dạng mới đã thấy háo hức rồi
Trong Planetiler, có thể tạo MLT bằng tùy chọn CLI
--tile-format=mltHiện tại mới chỉ có trên nhánh main nhưng sẽ sớm được phát hành
Kết quả thử nghiệm cho thấy với cấu hình mặc định, kích thước archive OpenMapTiles giảm khoảng 10%. Vẫn đang tiếp tục tối ưu thêm
Tiếc là Tilemaker chưa có kế hoạch hỗ trợ MLT trong trung hạn
Vì vậy một bộ phận cộng đồng có thể bị bỏ lại trong quá trình chuyển đổi
Xem thảo luận liên quan tại thread issue này
Thật thú vị khi các định dạng tệp vector vẫn đang tiếp tục được tái phát minh
Mình hiểu lợi ích về tỷ lệ nén hay tốc độ giải mã, nhưng vẫn tò mò không biết ý tưởng hay insight mới nào đã dẫn dắt thiết kế này
Mình đã theo dõi dự án này một thời gian và thực sự rất kỳ vọng
Với góc nhìn của người dùng stack MapLibre, mình nghĩ bài toán lớn cuối cùng là thêm hàm As_MLT() vào PostGIS
Có ai ở đây đang self-host bản đồ không? Mình muốn nghe về ưu nhược điểm và các công cụ mọi người đang dùng
Server chỉ cần có khả năng phục vụ tệp tĩnh bằng range request là được (Caddy hay Nginx đều ổn)
Bản đồ là một tệp lớn duy nhất nên cũng dễ chia sẻ giữa nhiều server
Gần như không có nhược điểm gì, nhưng phía client cần thêm thư viện hỗ trợ giao thức tùy chỉnh
Việc chỉnh sửa style hơi rắc rối một chút, nhưng có thể nạp style của protomaps vào trình chỉnh sửa Maputnik để sửa
Tham khảo tài liệu hướng dẫn
Mình tạo riêng một bản đồ độ phân giải thấp cho toàn thế giới (50MB) và một bản đồ độ phân giải cao cho Úc (900MB), rồi upload lên S3
Vì không cần dữ liệu mới nhất nên cứ để vậy mà dùng, và nó hoạt động rất tốt
API thương mại либо quá đắt để tạo raster 300dpi, либо có hạn chế về việc bán lại
Mình dùng PostGIS để lưu trữ và phục vụ vector tile, còn dữ liệu raster thì lưu trên AWS S3 dưới dạng GeoTiff COG
Build pbf từ OSM cho khu vực quan tâm (Colorado), khởi chạy container openstreetmap-tile-server, rồi áp dụng style và render bằng renderd
MLT cũng rất hay, nhưng mình cũng mong có những bước tiến tương tự ở định dạng tile 3D
Hiện tại 3D Tiles của Cesium gần như là lựa chọn duy nhất trên thực tế, nhưng hiệu năng vẫn chưa nhanh như kỳ vọng