Bing Mapsに表示されている縮尺について調べてみた

アプリに表示したBingの地図を見ていると右下にこんなバーが表示しているのき気がつきます。

スケールバーと言うやつで、画面上に表示されている地図上の東西の長さが現実世界においてどの程度の距離に相当するのか、いわゆる縮尺を表すものです。

このスケールバーの値がどうやって算出されているのか一応ヘルプにまとまっていますが、ヘルプ記載の式の意味(特に定数)の意味が良くわからなかったのでもう少し調べてみました。

Bing Mapsの地上分解能

Bingのヘルプでは"ground resolution"と言う言葉を使っています。ググると衛星画像やら航空写真のページがでてきますが、ざっと読むと、"地上分解能"とはある画像の1ピクセルの1辺の長さが現実世界においてどの程度の長さに相当するのかを示す値のようです。Fiddlerなんかで見てみるとわかりますが、Bingの地図も実態は世界地図の書かれたた画像なのでこの画像の1ピクセルの1辺の長さと現実世界の長さの比率がわれば、モニターの解像度から画面上に表示されている地図の東西の長さが現実世界においてどの程度の距離に相当するのかを計算することができます。

Bingの地図の画像のピクセル数ですが、これはヘルプに記載があり、ズームレベルが1の場合は512x512ピクセルの正方形画像、ズームレベルが2の場合は1024x1024ピクセルの正方形画像、ズームレベルが3の場合は2048x2048ピクセルの正方形画像となり、あるズームレベル"z"ので地図の画像のピクセル数は以下の式で表すことができます

(地図)画像の高さ = (地図)画像の幅 = 256(px) * 2^z

ここで高さとは経線(北極から南極までを結ぶ線)の長さであり、幅とは緯線(赤道とかの線)の長さのことです。

経線の長さは地球上のどこでも同じですが、緯線の長さは地球上の位置によって変わります。最も長い緯線は赤道であり、北極か南極方向に移動するにつれて緯線は短くなっていきます。しかしBingは(正確にはBingが使っている地図の投影法では)世界を正方形で表すためにこの緯線の長さをすべて赤道と同じ長さに歪ませています。緯線の長さ(東西の長さ)が歪むということは、Bingの地図の画像のピクセルの長さも歪んでいるので、Bingの地図の地上分解能を計算する場合は、地図に表示している位置の緯度を考慮に入れてこの緯線の歪みを補正する必要があります。

ではさっそく地上分解能を計算していきます。まずは歪みのない赤道の場合で考えていきます。

Bingの地図(Bingの地図の使っている投影法)の地球の半径は:

6378137(m)

ここで円周は半径*2*円周率(Pi)ですので、地球の円周(赤道の長さ)は

6378137(m) * 2 * Pi

赤道上におけるBingの地図の画像の1ピクセルあたりの距離を求めるには、赤道の距離をズームレベル"z"における地球の横幅のピクセル数で割ればいいいので

(6378137(m) * 2 * Pi)/(256(px) * 2^z)

数値の部分を計算すると

156543.04(m/px) / 2^z

となります。

ここまでの式は赤道をぐるっと一周する緯線(地図の横の線)の円の半径を基に計算していますが、最初に書いた通り緯線の長さは北極か南極方向に移動するにつれて短くなっていきます。そこである緯度がdの場合の緯線の円の半径を計算して、その半径に上の式を当てはめていきます。

緯度がd度の場合の緯線の半径はcos(dのラジアン) * 地球の半径で求めることができます(参考にさせて頂いたサイト:緯度経度より距離を求める方法・備忘録 | 地球は丸い!)

そこで緯度がd度の場合のBingの地図(Bingの地図の使っている投影法)の緯線の半径は

cos(d * Pi/180) * 6378137(m)
※d * Pi/180は緯度経度からラジアンへの変換

緯度がd度の場合のBingの地図(Bingの地図の使っている投影法)の緯線の円周は

cos(d * Pi/180) * 6378137(m) * 2 * Pi

緯度がd度の場合のBingの地図の画像の1ピクセルあたりの東西の距離は、緯線の円周をズームレベル"z"における地球の横幅のピクセル数で割ればよいので

cos(d * Pi/180) * 6378137(m) * 2 * Pi / (256(px) * 2^)

数値の部分を計算すると

cos(d * Pi/180) * 156543.04(m/px) / 2^z

となりヘルプの地上分解能の式にたどり着きました。この式の解が、緯度が"d"度の位置においてズームレベルが"z"の場合のBingの地図の画像の1ピクセルの1辺が現実世界においてどの程度の東西の距離に相当するのかを表します。

Bingの地図の画面上の縮尺

Bingの地図の画像の地上分解能(1ピクセルの1辺が相当する現実世界の東西の距離)が分かったので、ここから画面上の縮尺を計算します。も計算した地上分解能の単位が m/px 話を簡単にするために表示領域の1辺が1mのモニターで考えていきます。

ある画面解像度において表示領域の1辺が1mのモニターにBingの地図の画像を表示させた場合、表示される画像のピクセル数は

画面解像度(px/in) * 39.37(in/m)

この表示されたピクセル数に、Bingの地図の画像の地上分解能を掛ければ画面上のBingの地図の画像の東西の長さが現実世界の東西の距離のどの程度の長さに相当するかわかります。緯度が"d"度の位置においてズームレベルが"z"の場合、1mのBingの地図の画像の東西の長さが相当する現実世界の東西の距離は

[画面解像度(px/in) * 39.37(in/m) * 1(m)] * [cos(d * Pi/180) * 156543.04(m/px) / 2^z]

となります。上記の解がX(m)の場合、1mのBing の地図の画像の東西の長さとその長さが相当する現実世界の東西の距離の長さの比率は"1:X"となるので、ヘルプの式の通り緯度が"d"度の位置においてズームレベルが"z"の場合のBingの地図の縮尺は

1 : 画面解像度(px/in) * 39.37(in/m) * cos(d * Pi/180) * 156543.04(m/px) / 2^z

となります。

例えば画面解像度が100ppiのモニタでBingマップを緯度35.7度の位置においてズームレベル18で表示した場合の縮尺は

1 : 100(px/in) * 39.37(in/m) * cos(35.7 * Pi/180) * 156543.04(m/px) / 2^18
1 : 3937(px/m)* 0.8121 * 156543.04(m/px) / 262144
1 : 1909.28

となるので、画面上の10cmは19092.8㎝=190.928mと言うことにまります。ただしBingの地図が使っている投影法(メルカトル図法)は計測にはむかないので、東京周辺をズームレベル18で表示するとおおよそ縮尺1:2000、画面上の10cmは200mくらいと、距離感を示す目安程度に考えた方が良いと思います。

しかしここまで書いて自分でまだピンとこないのは式に"cos"さんがいるからだろなー。あー数学勉強しなおしたい・・・orz。