MapLibre Tile 公開 - モダンで効率的なベクタータイルフォーマット
(maplibre.org)- MapLibre Tile(MLT) は、既存の Mapbox Vector Tile(MVT) を置き換える新しい次世代ベクタータイルフォーマットであり、大規模な地理空間データ処理の効率を高めるために設計されている
- 最大6倍向上した圧縮率とSIMD ベースの高速デコード性能を提供し、保存容量、レイテンシ、キャッシュ効率を改善
- 今後は3D 座標(高度)、GPU ベースの処理、複合データ型、線形参照および m-values のサポートを目標に拡張可能
- 現在は MapLibre GL JS と MapLibre Native ですぐに利用可能で、デモタイル、変換サーバー、Planetiler を通じた生成をサポート
- オープンソースコミュニティ、企業、学術界の協力によって開発されたフォーマットで、Microsoft と AWS の支援を受けて完成
MapLibre Tile の紹介
-
MapLibre Tile(MLT) は [Mapbox Vector Tile(MVT)] の後継フォーマットで、急増する地理空間データ量と複雑な次世代ソースフォーマットを扱うために、ゼロから新たに設計された
- 最新のハードウェアとグラフィックス API の性能を活用するよう設計されており、惑星規模の 2D および 2.5D ベースマップを高性能に処理・レンダリング可能
- 現在の実装は MVT と機能的に同等だが、性能と効率の面で改善されている
-
主な技術的改善点
- 圧縮率の向上: 大きなタイルで最大 6 倍改善。カラム指向レイアウトと再帰的な軽量エンコーディングを適用
- デコード性能の向上: SIMD / ベクトル化命令と組み合わせられる高速かつ軽量なエンコーディング構造
- その結果、レイテンシの低減、保存および転送コストの削減、キャッシュ活用度の向上を実現
今後の拡張性
-
MLT は次のような将来機能のサポートを念頭に置いて設計されている
- **3D 座標(高度)**のサポート強化
- CPU および GPU の効率的処理のための保存・メモリフォーマット最適化
- 線形参照(linear referencing)およびm-values のサポートにより、Overture Maps(GeoParquet) のような次世代フォーマットと互換
- ネストされた属性、リスト、マップなどの複合型をサポート
-
MLT の発展方向はコミュニティの要望に応じて決まり、さまざまな拡張アイデアや貢献を歓迎している
- 関連資料として、Markus Tremmel の FOSS4G 2024 発表スライド、YouTube 講演、ACM 論文が提供されている
利用可能時期と統合
-
MLT は現在すぐに利用可能
- MapLibre GL JS と MapLibre Native の両方が MLT ソースをサポート
- スタイル JSON の
encoding属性にmltの値を指定して利用できる
-
体験および開発方法
- MLT ベースのデモタイルスタイル を利用
- Encoding server を通じて既存の MVT スタイルを MLT にリアルタイム変換
- Planetiler の次期バージョンで MLT 生成をサポート予定
- 統合状況は 公式実装状況ページ で確認可能
-
MLT の利用経験共有のため、Slack の
#maplibre-tile-formatチャンネルやGitHub イシュー / ディスカッションへの参加を推奨
謝辞と協力
- MLT は学術界、オープンソース、企業の長年にわたる協力を通じて開発された
- Markus Tremmel がフォーマットを考案し、Yuri Astrakhan がプロジェクトを主導
- Tim Sylvester が C++ 実装、Harel Mazor、Benedikt Vogl、Niklas Greindl が JavaScript 実装を担当
- Microsoft と AWS が開発資金を支援
注記
- MLT は MVT と異なり、カラム内の値の型がフィーチャーごとに異なるレイヤーはサポートしない
1件のコメント
Hacker Newsのコメント
土曜のFOSDEMのGeospatial devroomで行われるMapLibreの発表に参加してみることを勧める
イベントスケジュールのリンク
例のページを少し見て、MLTで地図を表示する例と従来の地図表示の例を比較してみた
コンソールログを見ると、約10%ほど圧縮効率が向上しているのを確認できた。かなり印象的だ
MLTフォーマットにはさまざまな軽量エンコーディングが組み込まれており、タイルごとに異なる方式でエンコードすることもできる
そのため最適な組み合わせを見つけるにはヒューリスティックなアプローチが必要で、タイルサイズとデコード性能の間にはトレードオフがある
まだ初期段階だが、AWSが今年もMLT最適化作業を支援しているので、今後の改善余地は大きい
ベンチマークではタイル全体のサイズより実際の使用パターンを見ることが重要だ — 誰も海のど真ん中を拡大したりしないので 😉
最近pmtilesベースのソリューションをデプロイしたが、本当に満足している
PMTilesドキュメントを参照
pmtilesはMVTを使うが、今後MLTへ変換できるツールが出てくることを期待している
MapLibreはブラウザで地図を表示するためのJSライブラリとして、これまで使った中で最高だ
新しいフォーマットへ移行することを思うと楽しみだ
Planetilerでは
--tile-format=mltCLIオプションでMLTを生成できる現時点ではmainブランチにしかないが、まもなくリリース予定だ
テスト結果ではデフォルト設定でOpenMapTilesアーカイブのサイズが約10%減少した。追加の最適化も進行中だ
残念ながらTilemakerは中期的にMLTをサポートする計画がない
そのためコミュニティの一部は移行から取り残される可能性がある
関連する議論はIssueスレッドを参照
ベクターファイル形式が今なお新しく再発明され続けているのは興味深い
圧縮率やデコード速度の向上は理解できるが、この設計を導いた新しいアイデアや洞察が何なのか気になる
このプロジェクトをしばらく追ってきたが、本当に楽しみだ
MapLibreスタックの利用者として、最後に残る大きな課題はPostGISにAs_MLT()関数が追加されることだと思う
地図をセルフホスティングしている人はいる? 長所短所や使っているツールが気になる
サーバーは静的ファイルをrange requestで配信できれば十分だ(CaddyでもNginxでも可能)
地図は1つの大きなファイルなので、複数サーバー間での共有も簡単だ
欠点はほとんどないが、クライアント側にカスタムプロトコル対応ライブラリを追加する必要がある
スタイル編集は少し厄介だが、Maputnikエディタでprotomapsスタイルを読み込んで修正できる
ガイド文書を参照
全世界の低解像度地図(50MB)とオーストラリアの高解像度地図(900MB)を別々に作ってS3にアップロードした
最新データは不要なのでそのまま使っているが、とてもよく動いている
商用APIは300dpiラスタ生成コストが高すぎるか、再販制限があった
PostGISでベクタタイルを保存・配信し、AWS S3にGeoTiff COG形式でラスタデータを保存している
OSMから関心地域(コロラド)のpbfをビルドし、openstreetmap-tile-serverコンテナを立ち上げた後、スタイルを適用してrenderdでレンダリングしている
MLTも素晴らしいが、3Dタイルフォーマットでもこうした進展があってほしい
現状ではCesiumの3D Tilesが事実上唯一の選択肢だが、性能は期待するほど速くない