Protomaps - 無料のオープンソース世界地図
(protomaps.com)- Web地図の配信でサーバー運用や地図APIのコストが負担になっているチームに、単一の静的ファイルでセルフホスティングできる代替手段を提供する
- フロントエンド開発者はクラウドストレージとHTTP range requestsだけで、ベクター地図タイルをシンプルかつ低コストに提供できる
- PMTilesはラスタ・ベクターベースマップ・カスタムレイヤーを格納するオープンな形式で、MapLibreプラグイン・CLI・CDN連携をサポートする
- ProtomapsはOpenStreetMapやその他のオープンデータを基盤としたベースマップタイルセットを維持し、インタラクティブなWeb地図にOSMを簡単に適用できるようにする
- 非商用利用は無料で、商用利用または管理型ベースマップタイルAPIが必要な場合はGitHub Sponsorへの参加が必要
単一ファイルでセルフホスティングする地図
- Protomapsは、世界地図を単一の静的ファイルとして配布できる無料・カスタマイズ可能な地図
- クラウドストレージに置いて利用でき、S3の利用経験があれば地球規模のインタラクティブ地図を公開できる
- 追加のサーバー設定なしで、フロントエンド開発者が地図をセルフホスティングできるよう設計されている
- ベクター地図タイルはHTTP range requestsを使ってシンプルかつ低コストに配信される
- 導入資料としてGet Startedとquick start tutorialを提供している
PMTilesと地図の構成方式
- 例では、HTML + JSだけでベースマップとデータオーバーレイを作る最小構成を示している
- PMTilesはHilbert順序のタイルピラミッドアーカイブ仕様で、ラスタ・ベクターベースマップ・カスタムレイヤーのような地理空間データを格納できる
- MapLibre plugin, command line interface, CDN integrationsを提供している
- 形式の詳細はPMTilesドキュメントで確認できる
OpenStreetMapベースのベースマップ
- ProtomapsはOpenStreetMapとその他のオープンデータソースから作られたベースマップタイルセットを維持している
- インタラクティブなWeb地図でOSMを採用しやすくする経路として使える
- 完全なplanetファイルを無料でダウンロードすることも、CLIで必要な地域だけを抽出することもできる
- Download your areaから地域抽出を始められる
- 大きなファイルを自分で管理したくないユーザーは、CDNキャッシュベースのベースマップタイルAPIを利用できる
- 非商用利用は無料
- 商用利用にはGitHub Sponsorが必要
- Maps APIをコードから利用できる
活用シナリオ
- 企業は既存のクラウドストレージを使ってサイト地図埋め込みのフルスタック制御を確保し、月に数百ドル規模の地図コストを数セント単位まで削減できる
- ニュースルームはサードパーティAPIに依存せず、長期間動作するカスタム地図でインタラクティブなストーリーを作れる
- 科学分野ではPMTilesで地球規模の気候・環境データを可視化し、オープンソースツールと地図フロントエンドでデータエクスプローラーを構築できる
- 政府機関はBig Techへの依存を減らしつつ、市民のプライバシーとGDPR準拠を維持し、独占的なGISの無料代替を利用できる
2件のコメント
Protomaps - OpenStreetMap で自分だけの地図システムを作る
Protomaps - Serverless 地図をオープンソースとして公開
Hacker Newsのコメント
Protomapsの pmtilesツールで、San Francisco南方のHalf Moon Bay周辺だけを切り出した地図を作ってみた
最新のmacOS向けGoバイナリは https://github.com/protomaps/go-pmtiles/releases から入手し、おおよそのバウンディングボックスは http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122.... で探した
実行したコマンドは
pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977で、生成された 2MBのhmb.pmtiles を https://maps.protomaps.com/ の「drop zone」にドラッグ&ドロップすると、OpenStreetMapのメタデータや建物の輪郭レベルまでズームできる詳細な地図が表示された2MBでここまでできるのは本当に印象的で、ファイルはこちら: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...
通常はGoogle Mapsを埋め込むが、地域周辺の地図だけで十分で、より安く済むことも多そう
ユーザーがファイル全体をダウンロードすることもないのでかなり良さそうで、静的サイトに地図を入れてみるのが楽しみ
リンク先のpmtileファイルは動作するが、自分で作ったより小さいファイルは動作しない。それでも、プロジェクト用の地図を得るという考え方自体は素晴らしい
Tilemillのアルファアクセス権をもらった頃からMapboxを熱心に使ってきたが、自分の見方では、これはベクタータイルとMapbox GL / Map GL以降のオープン地図分野で最も重要な貢献だ
MapboxはMTSでタイル生成への道を開いてはいたが、強力な一方で複雑すぎて高価だった。Tippecanoeでタイルを生成することはできたが、それでもベクタータイルのホスティングは悩みの種で、PMTilesを使えばMapboxよりもベクタータイルのホスティングがより簡単で便利になり、コストも1桁以上低くできる可能性がある
派手な投影法や3D対応が不要で、MapLibreで十分なら特にそうだ。Feltも内部的にPMTileのアプローチを使っている主要サービスの一つに見え、Tippecanoeへ継続的に投資している点も素晴らしい。Mapboxの焦点が車載ナビゲーションへ移りつつあるように見える中で、新しい場所から破壊的イノベーションが出てくるのはうれしいし、さらに驚くべきなのは、これが1人チームから生まれたという点だ
PMTilesの登場は、DuckDBの空間クエリ対応と相まって多くの革新を生みそうだ。大きなGeoParquetファイルをクエリ・処理し、高速に生成したPMTilesとしてストリーミングできれば、かなり強力なユースケースが可能になる
gpq convert Cairo_Governorate.parquet --to=geojson | tippecanoe Cairo.geojson -o Cairo.pmtileshttps://cloudnativegeo.org/blog/2023/10/where-is-cog-for-vec...
https://github.com/planetlabs/gpq
ジャーナリスト開発者たちのオンラインコミュニティを眺めているが、そこではPMTilesを、カスタムスタイルの地図タイルを自前ホスティングするコスト削減方法として期待している人たちがいる
例えば「How The Post is replacing Mapbox with open source solutions」https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl... は読む価値がある
気になる人のために書いておくと、OSMから派生したサンプルPMTileファイル
protomaps-basemap-opensource-20230408.pmtilesのサイズは 103GB だhttps://docs.protomaps.com/basemaps/downloads
日次・週次・月次の基準ファイルについて、差分だけをダウンロードして適用できるとよさそう
「Google Maps APIには十分な無料枠があるが、地図のロードが30,000回を超えると料金が高くなる。Protomapsは最初からセルフホストするシステムとして設計されており、クラウドストレージ上の100%静的なバックエンドとして動作するため、ストレージと転送のコストだけを負担すればよい。中程度の利用量では数セント程度で済む可能性がある」という点が興味深い
推奨ホスティング構成とGoogle Mapsのコスト比較、そしてどの時点でコスト線が交差するのかを見てみたい
100%最新である必要がなく、特定地域だけで使う地図なら、セルフホストするには本当に魅力的な方式に見える。年に一度ファイルを「再コンパイル」して静的ファイルホスティングに上げれば、外部依存がほとんどない簡単な手順になりそう
追記: 全世界版の公式ダウンロードリンク[1]を見つけたが、100GBを少し超えている。そうすると私の疑問への答えは「数百MBから数GB」くらいになりそうで、この程度ならまったく問題なさそう
[1] https://docs.protomaps.com/basemaps/downloads
Protomapsのドキュメントを読むと、Cloudflare CDNでリクエストをキャッシュする方法が説明されており、キャッシュ期間ごとに各タイルリクエストのコストを一度だけ払えばよい。かなり安い
以前のProtomaps投稿のタイトルは「Serverless maps at 1/700 the cost of Google Maps API」だった
Protomaps創業者のBrandonが数か月前にGeomobポッドキャストに出演していた: https://thegeomob.com/podcast/episode-176
私にとって最も興味深い部分はPMTiles
「PMTilesは、タイルデータのピラミッドのための単一ファイルアーカイブ形式である。PMTilesアーカイブはS3のようなストレージプラットフォームにホストでき、低コストで管理不要の地図アプリケーションを可能にする」
「PMTilesは、Z/X/Y座標でアドレス指定されるタイルデータの汎用形式である。地図ベースマップのベクタータイル、リモートセンシング観測値、JPEG画像など、さまざまなデータを格納できる」
「PMTilesリーダーはHTTP範囲リクエストを使い、PMTilesアーカイブ内から必要なタイルやメタデータだけをオンデマンドで取得する」
「タイルとディレクトリの配置は、移動・ズーム時の追加リクエスト数を最小限に抑えるよう設計されている」
https://docs.protomaps.com/pmtiles/
毎日CSVファイルを受け取り、ベクタータイルに変換してS3と同期し、それをmapbox-glの地図に表示していたが、最大のコストはS3のファイル操作だった。コストを下げるために強くクラスタリングし、タイル数を約75,000個まで減らしたものの、望んでいた更新頻度ではS3操作のコストだけで月$500かかっていた
今はファイル群を単一のPMTilesファイルとして処理し、そのファイル1つだけを配布しているので、コストは数セント程度まで下がった
公開用地図を作る可能性を大きく広げてくれたし、興味があれば2023年全体のカナダのホットスポットデータをここで見られる: https://lens.pathandfocus.com
ベクター側の従来方式は、小さなファイルが非常に多いか、個別タイルを提供するフロントエンドが必要な大きなファイルだった
今では、強力なマシンでOSMダンプを国単位のベースマップなら数分以内、大陸単位でも数時間以内に変換し、その後は通常のWebサーバーでカスタムスタイルシートと一緒にセルフホストできる
Maplibre[1] + PMTiles + Felt の tippecanoe[2] の組み合わせは、Web Mercator 投影法に縛られることを許容できるなら、セルフホストのWeb地図にとても優れています
ほぼすべての地理空間データの元データは、GDAL[3] と tippecanoe で
.pmtilesに変換できます:(.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtilesOpenStreetMap データには planetiler[4] があり、Maplibre と一緒に使える openmaptiles[5] スタイルもあります
この組み合わせなら、オープンソースのデータパイプラインで、AWS S3+CloudFront や Cloudflare R2 上に数セントの費用でホスティングできる、よい出発点が得られます
[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/
ちなみに、GDAL/ogr2ogr のドキュメントはかなり読みにくいと感じるので、最初の例としてはこのようなコマンドを見るとよいです
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.ziphttps://census.gov/geographies/mapping-files/…
このプロジェクトに貢献したことがあり、会社でも 本番環境 で使っています
本当に素晴らしく、Brandon もとても親切で、これまでに投入されたすべての作業に感謝しています
PMTiles を活用した サーバーレス地図 のデプロイで、かなりよい成果を出せました
AWS CloudFront/Lambda@Edge/S3 へのデプロイに興味があるなら、https://github.com/serverlessmaps/serverlessmaps を見るとよいです