6 điểm bởi GN⁺ 2023-10-24 | 2 bình luận | Chia sẻ qua WhatsApp
  • Cung cấp một giải pháp thay thế tự host bằng một tệp tĩnh duy nhất cho các đội ngũ thấy gánh nặng khi vận hành máy chủ và chi phí API bản đồ trong việc triển khai bản đồ web
  • Lập trình viên frontend có thể phân phối tile bản đồ vector một cách đơn giản và tiết kiệm chỉ với lưu trữ đám mây và HTTP range requests
  • PMTiles là một định dạng mở chứa basemap raster·vector và các lớp tùy chỉnh, hỗ trợ plugin MapLibre, CLI và tích hợp CDN
  • Protomaps duy trì bộ tile basemap dựa trên OpenStreetMap và các nguồn dữ liệu mở khác, giúp áp dụng OSM vào bản đồ web tương tác một cách dễ dàng
  • Miễn phí cho sử dụng phi thương mại; nếu cần dùng thương mại hoặc API tile basemap được quản lý thì cần tham gia GitHub Sponsor

Tự host bản đồ bằng một tệp duy nhất

  • Protomaps là bản đồ miễn phí và có thể tùy biến, cho phép phân phối bản đồ toàn thế giới dưới dạng một tệp tĩnh duy nhất
  • Có thể tải lên lưu trữ đám mây để sử dụng, và nếu bạn đã quen với S3 thì có thể xuất bản bản đồ tương tác ở quy mô toàn cầu
  • Được thiết kế để lập trình viên frontend tự host bản đồ mà không cần cấu hình máy chủ riêng
  • Tile bản đồ vector được phân phối đơn giản và tiết kiệm bằng HTTP range requests
  • Cung cấp tài liệu bắt đầu gồm Get Startedquick start tutorial

PMTiles và cách tổ chức bản đồ

Basemap dựa trên OpenStreetMap

  • Protomaps duy trì OpenStreetMapbộ tile basemap được tạo từ các nguồn dữ liệu mở khác
    • Có thể dùng như một con đường dễ dàng để áp dụng OSM trong bản đồ web tương tác
    • Có thể tải miễn phí toàn bộ tệp planet hoặc trích xuất chỉ khu vực mong muốn bằng CLI
    • Có thể bắt đầu trích xuất khu vực tại Download your area
  • Người dùng không muốn tự quản lý các tệp lớn có thể sử dụng API tile basemap dựa trên bộ nhớ đệm CDN
    • Miễn phí cho sử dụng phi thương mại
    • Sử dụng thương mại cần GitHub Sponsor
    • Có thể dùng Maps API trong mã

Kịch bản sử dụng

  • Doanh nghiệp có thể dùng chính lưu trữ đám mây hiện có để giành toàn quyền kiểm soát full-stack với bản đồ nhúng trên website, đồng thời giảm chi phí bản đồ hàng tháng từ mức hàng trăm đô xuống mức chỉ vài xu
  • Tòa soạn có thể tạo các câu chuyện tương tác bằng bản đồ tùy chỉnh hoạt động lâu dài mà không phụ thuộc vào API bên thứ ba
  • Trong lĩnh vực khoa học, có thể dùng PMTiles để trực quan hóa dữ liệu khí hậu·môi trường ở quy mô toàn cầu, đồng thời xây dựng trình khám phá dữ liệu bằng công cụ mã nguồn mở và frontend bản đồ
  • Cơ quan chính phủ có thể giảm phụ thuộc vào Big Tech trong khi vẫn bảo toàn quyền riêng tư của công dân và tuân thủ GDPR, đồng thời sử dụng giải pháp thay thế miễn phí cho GIS độc quyền

2 bình luận

 
GN⁺ 2023-10-24
Các ý kiến trên Hacker News
  • Tôi đã thử dùng công cụ pmtiles của Protomaps để tạo một bản đồ chỉ cắt vùng quanh Half Moon Bay, phía nam San Francisco
    Tôi tải bản nhị phân Go mới nhất cho macOS từ https://github.com/protomaps/go-pmtiles/releases, và tìm hộp bao gần đúng bằng http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122....
    Lệnh đã chạy là pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977, và khi kéo thả hmb.pmtiles 2MB thu được vào “drop zone” trên https://maps.protomaps.com/, tôi có được một bản đồ chi tiết có thể phóng to tới mức metadata OpenStreetMap và đường viền tòa nhà
    Thật ấn tượng khi chỉ 2MB mà được như vậy, tệp ở đây: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...

    • Tôi đã làm thành demo https://simonw.github.io/hmb-map/ và bài blog https://til.simonwillison.net/gis/pmtiles
    • Thật sự rất tuyệt. Có vẻ hữu ích cho doanh nghiệp địa phương
      Thường thì họ nhúng Google Maps, nhưng nhiều khi chỉ cần bản đồ quanh khu vực là đủ và có lẽ rẻ hơn
    • Tôi làm bản đồ Gran Canaria theo cách tương tự thì ra 15MB
      Người dùng cũng sẽ không phải tải toàn bộ tệp xuống, nên khá hay, và tôi rất hào hứng với ý tưởng đưa bản đồ vào site tĩnh
    • Không phải câu hỏi hỗ trợ kỹ thuật, nhưng tôi không hiểu sao phía tôi lại không chạy được
      Tệp pmtile được liên kết thì hoạt động, còn tệp nhỏ hơn do tôi tạo thì không. Dù vậy, bản thân ý tưởng có được bản đồ cho dự án là rất hay
  • Tôi đã dùng Mapbox rất nhiều từ khi được quyền truy cập alpha Tilemill, và theo quan điểm của tôi, đây là đóng góp quan trọng nhất cho lĩnh vực bản đồ mở kể từ vector tile và Mapbox GL / Map GL
    Mapbox vẫn để ngỏ cánh cửa với cách tiếp cận nướng tile bằng MTS, nhưng tuy mạnh mẽ, nó quá phức tạp và đắt đỏ. Có thể nướng tile bằng Tippecanoe, nhưng hosting vector tile vẫn là chuyện đau đầu; dùng PMTiles thì việc hosting vector tile có thể dễ hơn, tiện hơn so với Mapbox và chi phí có thể thấp hơn hơn một bậc độ lớn
    Điều này đặc biệt đúng nếu bạn không cần các phép chiếu cầu kỳ hay hỗ trợ 3D và MapLibre là đủ. Felt dường như cũng là một trong các dịch vụ lớn dùng cách tiếp cận PMTile nội bộ, và việc họ tiếp tục đầu tư vào Tippecanoe cũng rất tuyệt. Trong bối cảnh trọng tâm của Mapbox có vẻ đang chuyển sang điều hướng xe hơi, thật vui khi thấy đổi mới mang tính phá vỡ xuất hiện từ nơi khác, và điều đáng kinh ngạc hơn là nó đến từ một nhóm một người
    Sự xuất hiện của PMTiles, kết hợp với hỗ trợ truy vấn không gian của DuckDB, có vẻ sẽ mở ra nhiều đổi mới. Nếu có thể truy vấn/xử lý các tệp GeoParquet lớn rồi stream thành PMTiles được nướng nhanh, sẽ có những trường hợp sử dụng khá mạnh mẽ

  • Tôi hay đọc lướt một cộng đồng trực tuyến của các nhà báo-lập trình viên, và ở đó có người kỳ vọng PMTiles như một cách giảm chi phí khi tự host tile bản đồ với style tùy chỉnh
    Chẳng hạn, bài “How The Post is replacing Mapbox with open source solutions” https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl... đáng để xem

    • Các cơ quan báo chí làm sao biết dữ liệu này là chính xác?
    • Nghe như một cộng đồng thú vị. Có thể chia sẻ đó là ở đâu không?
  • Với những ai tò mò, kích thước của tệp PMTile mẫu protomaps-basemap-opensource-20230408.pmtiles dẫn xuất từ OSM là 103GB
    https://docs.protomaps.com/basemaps/downloads

    • Hiện giờ là 107GB
      Sẽ thật tốt nếu có thể chỉ tải và áp dụng phần thay đổi cho các tệp theo ngày/tuần/tháng
    • Đây đúng là loại thứ rất phù hợp để tải bằng Bittorrent
    • Họ dùng gì để nén tile nhỉ? Có thể làm nhỏ hơn bằng AVIF không? Hay AVIF cho phần văn bản + overlay SVG thì sao?
    • Chính đây là điều tôi tò mò. Có thể xem là kích thước khá hợp lý
  • Điểm thú vị là: “Google Maps API có hạn mức miễn phí khá hào phóng, nhưng phí sẽ cao khi vượt quá 30.000 lượt tải bản đồ. Protomaps được thiết kế ngay từ đầu như một hệ thống tự vận hành, chạy với backend tĩnh 100% trên cloud storage, nên bạn chỉ phải chịu chi phí lưu trữ và truyền tải. Với mức sử dụng trung bình, chi phí có thể chỉ ở mức vài cent”
    Muốn xem cấu hình hosting được khuyến nghị, so sánh chi phí với Google Maps, và tại điểm nào thì hai đường chi phí giao nhau

    • Không thấy trong FAQ, nhưng sẽ thú vị nếu biết kích thước file PMTiles của một quốc gia cỡ trung bình là khoảng bao nhiêu
      Nếu không cần mới 100% và chỉ dùng bản đồ cho một khu vực cụ thể, đây có vẻ là một cách rất hấp dẫn để tự host. Mỗi năm “biên dịch lại” file một lần rồi đưa lên hosting file tĩnh, quy trình có lẽ sẽ khá đơn giản và gần như không có phụ thuộc bên ngoài
      Sửa: Tôi đã tìm thấy link tải chính thức cho toàn thế giới[1], dung lượng hơn 100GB một chút. Vậy câu trả lời cho câu hỏi của tôi có lẽ là khoảng “vài trăm MB đến vài GB”, và mức này trông hoàn toàn ổn
      [1] https://docs.protomaps.com/basemaps/downloads
    • Theo Cloudflare, hosting 100GB là $1, 10 triệu request là $0.36
      Đọc tài liệu Protomaps thì có hướng dẫn cách cache request trên Cloudflare CDN, nên với mỗi chu kỳ cache bạn chỉ phải trả chi phí cho mỗi request tile một lần. Khá rẻ
      Tiêu đề lần gửi Protomaps trước đây là “Serverless maps at 1/700 the cost of Google Maps API”
  • Brandon, nhà sáng lập Protomaps, đã xuất hiện trên podcast Geomob vài tháng trước: https://thegeomob.com/podcast/episode-176

  • Phần thú vị nhất với tôi là PMTiles
    “PMTiles là một định dạng lưu trữ một file duy nhất cho kim tự tháp dữ liệu tile. Kho lưu trữ PMTiles có thể được host trên các nền tảng lưu trữ như S3, cho phép tạo ứng dụng bản đồ chi phí thấp và không cần quản trị”
    “PMTiles là một định dạng phổ dụng cho dữ liệu tile được định địa chỉ bằng tọa độ Z/X/Y. Nó có thể chứa nhiều loại dữ liệu như tile vector bản đồ nền, quan sát viễn thám, ảnh JPEG, v.v.”
    “Trình đọc PMTiles dùng HTTP range request để chỉ lấy theo nhu cầu các tile hoặc metadata cần thiết bên trong kho lưu trữ PMTiles”
    “Cách bố trí tile và thư mục được thiết kế để giảm thiểu số request bổ sung khi di chuyển và phóng to/thu nhỏ”
    https://docs.protomaps.com/pmtiles/

    • PMTiles rất tuyệt. Tôi biết đến nó khi làm bản đồ điểm nóng cháy rừng ở Canada mùa hè này
      Tôi từng nhận file CSV hằng ngày, chuyển thành tile vector, đồng bộ lên S3 rồi hiển thị trên bản đồ mapbox-gl, và chi phí lớn nhất là thao tác file trên S3. Để giảm chi phí, tôi đã gom cụm mạnh tay và giảm số tile xuống còn khoảng 75.000, nhưng với tần suất cập nhật mong muốn thì riêng chi phí thao tác S3 đã là $500/tháng
      Giờ tôi xử lý các file thành một file PMTiles duy nhất và chỉ triển khai file đó, nên chi phí giảm xuống mức vài cent
      Nó mở ra rất nhiều khả năng khi làm bản đồ công khai; nếu tò mò, bạn có thể xem toàn bộ dữ liệu điểm nóng Canada năm 2023 tại đây: https://lens.pathandfocus.com
    • PMTiles là phiên bản vector tương ứng với Cloud Optimized GeoTIFF(COG), cho phép client sử dụng thông tin bản đồ hiệu quả khi server hỗ trợ HTTP range request
      Cách làm trước đây ở phía vector là hoặc có rất nhiều file nhỏ, hoặc một file lớn cần frontend để phục vụ từng tile riêng lẻ
      Giờ bạn có thể chuyển đổi dump OSM thành bản đồ nền cấp quốc gia trong vài phút, cấp châu lục trong vài giờ trên phần cứng mạnh, rồi tự host trên web server thông thường cùng stylesheet tùy chỉnh
    • Có thể dùng PMTiles như một cách host dữ liệu không gian địa lý rẻ, thô và nhanh không hẳn là “tile bản đồ” theo nghĩa nghiêm ngặt không? Ví dụ như một cơ sở dữ liệu POI khá lớn nhưng không cập nhật thường xuyên
    • Nếu là file vector thì có nghĩa là có thể styling ngay tại chỗ không?
  • Tổ hợp Maplibre[1] + PMTiles + tippecanoe[2] của Felt là một lựa chọn tuyệt vời cho bản đồ web tự host, nếu bạn thấy việc bị ràng buộc vào phép chiếu Web Mercator là chấp nhận được
    Gần như mọi nguồn dữ liệu không gian địa lý đều có thể được chuyển đổi sang .pmtiles bằng GDAL[3] và tippecanoe: (.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtiles
    Với dữ liệu OpenStreetMap thì có planetiler[4], và cũng có các style openmaptiles[5] có thể dùng cùng Maplibre
    Với tổ hợp này, bạn có một điểm khởi đầu tốt để xây dựng pipeline dữ liệu mã nguồn mở và host trên AWS S3+CloudFront hoặc Cloudflare R2 với chi phí chỉ vài xu
    [1] https://maplibre.org/
    [2] https://github.com/felt/tippecanoe
    [3] https://gdal.org/
    [4] https://github.com/onthegomap/planetiler
    [5] https://openmaptiles.org/styles/
    Ngoài ra, cá nhân tôi thấy tài liệu GDAL/ogr2ogr khá khó đọc, nên để làm ví dụ khởi đầu bạn có thể xem lệnh như thế này
    ogr2ogr -f GeoJSON counties.json -t_srs EPSG:4326 -nln counties -sql "SELECT STATEFP, COUNTYFP, NAME FROM tl_2022_us_county" /vsizip/tl_2022_us_county.zip
    https://census.gov/geographies/mapping-files/…

    • Tôi là sinh viên muốn nâng cao năng lực về không gian địa lý/khoa học máy tính; với thứ này thì có thể làm dự án nào? Có điểm khởi đầu tốt nào đáng khuyến nghị không?
  • Tôi từng đóng góp cho dự án này và công ty cũng đang dùng nó trong production
    Nó thật sự rất tốt, Brandon cũng cực kỳ thân thiện, và tôi rất biết ơn tất cả những công sức đã được bỏ vào cho đến nay

  • Tôi đã đạt được kết quả khá tốt khi triển khai bản đồ serverless bằng PMTiles
    Nếu bạn quan tâm đến việc triển khai trên AWS CloudFront/Lambda@Edge/S3, hãy xem https://github.com/serverlessmaps/serverlessmaps