Google Mapsを取り込んだAndroidアプリを作っていた際に、
「画面の1/4程度を動かすとデータリロードさせたい」
という要望が上がりまして、その実現方法を検討したことがありました。
通常 Mapの移動については、MapオブジェクトにsetOnCameraChangeListenerを設定して、
カメラの移動を取ればよいのですが、取れるのはLatLonであり、そのときのMapのズームレベルによって「画面上どれだけ動いたか」が変わることになります。
そこで、LatLonとズームレベル・それから画面上の実移動についての相関をアバウトに取れる仕組みをアプリに入れました。そのロジックをご紹介します。
Google Maps Android APIではズームレベル自体は2〜21まで設定できるのですが、
ズームレベル2を設定した場合、Google Mapは世界地図の概ね1/4を表示していましたので、
実際には、0を起点とした下記のような仮説を立てました。
スマートフォンの画面に表示される地図の幅(Km)
= 地球の円周(Km) / (2 ^ ズームレベル )
つまり、地球の円周≒40075km とすると、
ズームレベル 2 の場合は 40075km / (2 ^ 2) = 約10018km
がスマートフォンの画面幅に合わせて表示されます。
逆に駅から徒歩10分の周辺を表示したい場合は、
徒歩所要時間 = 80m / 1分だとして、大体1.6km四方が見られれば良いので、
40075 / 2 ^ x = 1.6(km)
x ≒ 14.6
となり、ズームレベルは14.6が適切、ということになります。