世界のレンダリング

MapBoxのリードプログラマーであるYoung Hahnは、FOSS4Gカンファレンスからのプレゼンテーションの転写を投稿しました。



MapBoxは、オープンソースのTileMillマッピングデザインスタジオおよびTileStreamタイルサーバーの開発者として知られています。 彼らは最近、新しいMapBox Streetsシステムをリリースしました。これは、Google Streetsの類似物ですが、OpenStreetMapのオープンマップ上にあります。 これは、個々の家、トンネル、地下鉄駅などのレベルにズームするグローバルマッピングサービスです。



Rendering the Worldというタイトルのプレゼンテーションで、同社のリードプログラマーは、地球全体のズームレベルでタイルを生成する方法について話します。







必要なタイルの数をグローバルスケールで数えると、データボリュームは天文学的なものになります。 このシステムでは、z0スケールは世界地図全体の1つのタイルに対応します。z1レベルでは、マップは、z2レベルで4つのフラグメントで構成され、16個のフラグメントなどになります。 一般に、各レベルzのタイルの数は4 zです。



完全に高いサーバーパフォーマンス、たとえば1秒あたり1000タイル、最小タイルサイズ400バイトを想定すると、レベルz17では200日間のレンダリングが必要であり、マップデータの量は10.3テラバイトです。







このような数値では、強力なレンダリング最適化でも決定的な効果は得られません。 2倍に高速化すると、レンダリング時間が200日から100日に増加しますが、どちらの場合も受け入れられません。



この問題のもう1つの変形は、現在到着しているユーザーへの特定のリクエストをリアルタイムでレンダリングするためのサーバー数の単純な増加です。







しかし、実際には、そのようなシステムは拡張が困難です。 そのようなサーバーは保守が遅く、高価であり、リアルタイムレンダリングには多数のサーバーが必要ですが、MapBoxは小さな会社であり、余裕がありません。



彼らはどのようにしてz17で全世界をレンダリングしましたか? 彼らは問題に賢明に近づいた。 地理データを分析すると、地球の表面の半分以上を実際にレンダリングする必要がないことがわかります。 タイルの約60%はシンプルな青い正方形、つまり海の領土です。 学校で、彼らは海が表面の70-80%を占めるが、実際には南極大陸とグリーンランドが巨大な地域を覆っているため、青い正方形の約60%を占めると教えています。







これはアルファベットの文字のようなもので、その50%をテキストから削除できます。これにより、テキストの意味が失われることはありません。



タスクをさらに最適化するために、MapBox開発者は、地球の表面の何パーセントが情報負荷を運ばず、無視できるかを分析し始めました。 彼らは海に加えて、海岸線の近くにない陸地を特定しました。 ほとんどの場合、それらは均一な「空の」タイルでもあることが判明しました。 一般的に、タイルのわずか2%が沿岸地域に落ちます。 そして、あなたが都市、道路、および人間の生命のあらゆるオブジェクトを撮影した場合、それらは地球の1%でのみ顕著です!







したがって、zレベルのタイルの数は4 zに等しくなくなります。これは、各スケールレベルの有用な領域の1%で、1つの有用なタイルを生成する必要があるためです。







MapBoxによって作成されたMBTilesタイルストレージシステムでは、冗長性を考慮してタイルを保存できます。つまり、同一のタイルは複製されず、単に1つのサンプルを参照します。 したがって、このシステムのz17レベルでの地球の領土全体は、10.3テラバイトの代わりに200ギガバイトです。 また、タイルサーバーの200日間の作業の代わりに、有用な領域の2%のレンダリングにかかる​​時間はわずか4日間です。



All Articles