エンジニアワーキンググループより、ベクトルタイルに関する進捗報告

OpenStreetMap財団のエンジニアリングワーキンググループより、openstreetmap.orgのベクトルタイル作成に関する最新情報をお知らせします。 この作業が重要な理由、これまでの進捗状況とコミュニティのフィードバックを取り入れ方、さらに詳しい技術的な詳細についてご紹介します。

背景

現在、openstreetmap.orgウェブサイトではピクセルで構成される画像タイル、すなわちラスタータイルを配信しています。しかし現在、サイトにベクトルタイルを導入する取り組みが始まっており、地図の見た目と動作が改善されます。プロジェクトの背景については、こちらで詳しく読むことができます。

ベクトルタイルでは、ポイント、ライン、ポリゴンといったベクターデータとして地図が配信されます。ベクトルタイルでは、格納される地理データ(例えばOpenStreetMapを構成するデータなど)はダイナミックなスタイリングとインタラクティビティが可能になります。ユーザーにとって、ベクトルタイルはopenstreetmap.orgでの滑らかなズームが可能な新しくモダンなマップスタイル、データ変更時の迅速な地図更新、よりよいパフォーマンスをもたらします。

さらに今後に焦点を当てた時、このベクトルタイルプロジェクトで実現できる最もワクワクする部分は、ボランティアやタイル利用者の参画が可能になることです。例えば、3D地図、より効率的なデータの組み合わせやその他のデータセットの統合、テーマスタイル、多言語対応の地図、行政境界の異なる表示、インタラクティブな観光地点、視覚障害者向けのより利用しやすい地図、そしてまだ誰も思いついていない他のアイデアが生まれることが期待されます。OSMコミュニティの人々の長年の関心事だったことが多く実現できることでしょう。

計画

ベクトルタイルプロジェクトの目標は、openstreetmap.orgで機能するベクトルタイルの動作環境を一式を提供することです。つまり、世界中のユーザーやサービスから大きな需要があり、地図の根底となるデータが常に変化する、世界規模の複雑なベースマップサイトです。

技術的に言えば、高負荷の世界規模の複雑なベースマップにおいて、毎分単位の更新が必要な動作環境を作成します。

Paul Normanさんが、ベクトルタイルプロジェクトを主導しています。

彼はPostgreSQLデータベースからベクトルタイルを生成する Tilekilnプロジェクト に機能を追加し、ベクトルタイル内のレイヤーやプロパティの命名方式である Shortbreadスキーマを活用し、OSMデータをPostgresデータベースに追加できるThemeparkの改善を行っています。

作業は3つのステップに分かれています。 

1. TilekilnおよびShortbread Themeparkの改善、第1ラウンド

2. 並列処理の改善

3. Shortbreadの本番環境公開

最初の2ステップはほぼ完了しています。Tilekilnは今や並列でタイルを生成できるため、世界全体のタイル生成が実用的になりました。次のステップはOSMFのハードウェアへの本番環境導入の準備です。  

ステップ1の技術的詳細

作業中の技術的詳細に興味がある方のために、上記第1ステップの5つの主要コンポーネントをご紹介します。

        1.        Tilekilnのパッケージ自動化

        2.        Prometheusエクスポーターによる、Tilekilnメトリクスの公開

        3.        Themepark Shortbreadのレビュー

        4.        毎分ごとのShortbreadタイルの更新とオンデマンドのタイルレンダリングを行うデモサーバーの運用

        5.        コミュニティへのデモの公開

1と2は議論の必要なく完了しています。3については、osm2pgsqlのThemepark Shortbread実装にレイヤーが欠けているなど、Paulさんがいくつかの問題を発見したため、予想以上の工程が必要だと判明しました。  

4と5は完了しています。Paulさんのデモサーバーは1分ごとの更新で動作しており、必要なハードウェア要件は予想より控えめでした。  

コミュニティからも有用なフィードバックが寄せられています。例えばPaulさんのOSMコミュニティフォーラムへの投稿へもフィードバックが投稿されています。

コミュニティからは多くの提案がありました。その中にはすでに取り入れられたものもあります。コミュニティから提案された範囲内の残課題は、曲線がギザギザに描画されること、ベクトルタイルが大きすぎることです。

ギザギザの線の問題は、ベクトルタイル内でスムーズな曲線がどのように表現されているかによるものです。おおむね対処済みですが、同様の問題が将来的に発生することが予想されます。標準タイルレイヤーの最小縮尺に相当する縮尺が設定されました。より小さなスケールにズームインすることは可能ですが、新しい課題が現れ始める可能性があります。

ベクトルタイルのサイズ最適化は今後も継続的に取り組む必要がある課題です。現在のタイルは特に大きくなっています。このテスト期間中に、サイズを半分に削減する変更が加えられましたが、今後も最適化の課題は残り続けます。タイルサイズがユーザーエクスペリエンスに最も大きな影響を与えるからです。

生成されているタイルは使用可能ですが、さらなる作業が残されています。並列処理の作業が完了したことにより、テストのために大量のタイルを生成できるようになったため、Paulさんの作業は再度、タイルサイズの改善と残りの問題の修正となります。ただし、現在のタイルは 使用可能です。

使用されているツールについて

このプロジェクトで使用されている様々なツールについて紹介します。

Tilekiln は、Paul Normanさんが作成した、PostgreSQLデータベースからベクトルタイルを生成するソフトウェアです。代替ツールとしてmartin(またはt_rex)があります。Tilekilnは新しい開発段階にありますが、ベクトルタイルデータを生成するために多くの標準的なPostgreSQLの機能を使用しています。ほとんどのOSMベースの地図(osm.orgのosm-cartoを含む)は、PostgreSQLデータベースからのSQLデータベースクエリから生成されています。Tilekilnは同様のクエリからベクトルタイルを生成します。Tilekilnはまだ開発されてそれほど日が経っていません。

Themepark は、osm2pgsqlツールスイートの一部で、OSMデータをPostgresに追加し、それらの処理ステップを他のプロジェクト間で共有できるようにするものです。多くのPostgreSQLベースのOSMマップスタイル(osm-cartoなど)がosm2pgsqlを使用しています。  

osm2pgsql はOSMで15年以上の歴史があり、多くの場所で使用されています。Paulさんもコードに貢献していますが、主要な開発者ではありません。osm2pgsqlは最近数年で高度化し、より良くなっています。その強みの一部はデータの前処理にあり、Themeparkはこれらの前処理ステップを簡単にしようとする試みです。

Shortbread はGeofabrikが作成した「ベクトルタイルスキーマ」です。ベクトルタイル内のレイヤーやプロパティの命名方式のデータフォーマットとなっています。

This blog posts contains contributions from Adam Hoyle, Mikel Maron, Amanda McCann, Paul Norman, and Andrew Wiseman

The OpenStreetMap Foundation is a not-for-profit organisation, formed to support the OpenStreetMap Project. It is dedicated to encouraging the growth, development and distribution of free geospatial data for anyone to use and share. The OpenStreetMap Foundation owns and maintains the infrastructure of the OpenStreetMap project, is financially supported by membership fees and donations, and organises the annual, international State of the Map conference. Our volunteer Working Groups and small core staff work to support the OpenStreetMap project. Join the OpenStreetMap Foundation for just £15 a year or for free if you are an active OpenStreetMap contributor.

This post is also available in: 英語 フランス語 スペイン語 ギリシア語