geo

ズームレベルの現実的な最大は何と考えればよいか

24、この数字を知っておくことの意味

結論から申し上げれば、24 です。

理論的にはズームレベル 25 以上も可能な中で、このような具体的な数字を知っておくことの意味は何でしょうか。そこには、二つの意味があると思います。

  1. ウェブ地図のシステムは論理的な存在ではなく、計算機(とりわけストレージ)と通信回線の上に実現される具体的な存在です。システムを具体化するにあたっては、具体的な数字を出し、理解し、実現へのインパクトを評価することが重要です。ズームレベル 24 のタイル数は、全世界で 4 ** 24 = 281兆4749億7671万0656 となります。これ以上のオーダーのデータ数を相手にする必要はないと知っておくことは、実装技術を選択するにあたって重要です。
  2. ズームレベルは級数的な性質を持つ数であり、ズームレベルが 1 増えると情報の量は 4 倍になります。よって、小さな数字の違いが大きな意味を持ちます。そのような数字について、具体の数字を知っておくことは効果が高いです。

次に、なぜズームレベルの最大は 24 と考えて良いのか、ズームレベル 24 という数字は既存のソフトウェアの中でどう使われているのか、紹介します。

geojson-vt での議論

gh:mapbox/geojson-vt のイシュー 87では、mourner さんが次のように発言しています。

I think we should explicitly limit the zoom to 24 and throw an error on higher values. I haven't seen any practical reasons to support z25+ — a z25 tile will be roughly 1x1m, and even assuming the default extent of 4096, coordinates would have ~0.2mm precision.

ズームレベル 25 のタイルは 1m 四方となるが、(ベクトルタイルの内部座標の定義域である)4096 でこれを割ると、座標の分解能は 0.2mm 程度となってしまい、現実的には十分以上の精度となる、ということを言っていると思います。確かに、(海を含むような)世界全体をユニバーサルな絶対座標で表現する場合には、0.2mm よりも大きい分解能は必要なさそうです。必要な場合には、別の技術体系を考える方が良さそうです。

このようにして、タイル技術の限界を積極的に定義していくことで、限界の内部での性能の最適化に進むことができる、と考えます。

なお、蛇足 ですが、緯度によって分解能は変化する、具体的には、緯度のコサインに「地上画素寸法」は比例する、という側面があります。つまり、緯度が60度になると、赤道と比べて2倍の分解能を持つようになる、つまりズームレベルが1つ上がることに匹敵する、ということです。これについては、高緯度においてはタイルをカットする、ということでタイルを節約できる可能性があると思っています。実はこれでかなりのデータ量が節約できる可能性がある(ただし、定数倍でしか効かないが)と思っています。これはまた別の話。

Mapbox GL JS での 24 の実装

Mapbox GL JS では、すでに最大ズームレベルを 24 として実装しています。例えば Mapbox Style の layer の minzoom/maxzoom の規定では、ズームの値を「between 0 and 24 inclusive」と明記しています。