Google Maps Android API v2 の ズームレベルとは何を指すか

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が適切、ということになります。

 

普通の産業へ:【書評】Being Geek ギークであり続けるためのキャリア戦略

技術書といえばO’REILLY、というのはエンジニアにとって定番中の定番。私も古くはPerlのラクダ本からお世話になってます。

O’REILLYはイベントにも良く出展していて都度立ち読みしていたのですが、つい先日のデベロッパーサミットでは「10%オフ」と「4000円以上でオリジナルTシャツ」に惹かれて3冊ほど買ってしまいました。まあ当日は近年稀に見る大雪で荷物が増えてしまったことを後悔したのですが、あとの祭りですね。

買う前に3冊はどれもサラッと内容を確認したのですが、最初に目に止まったのがこの本でした。
本全体の方向性としては「Geekが社内でキャリアを積むために理解しておくべきこと」という感じでしょうか。
内容はタイトルとはだいぶ異なり、GeekもしくはNerdが人間的な成長を迎えたときにどのようにあるべきかを書いたものです。元はブログの記事をまとめたもののようで内容は散漫としてるのですが、全般的にはソフトウェア企業・もしくはソフトウェア産業で働くエンジニアが生きていくための戦術がまとめられています。そんな感じなので、「どうやったら最良のコードが書けるか」「どうすれば一生プログラマーでいられるか」という視点では書かれてはいません。

こういう本をエンジニアが読まなければならない、その理由だと私が考えているのは、常に環境は変化するということです。ソフトウェア産業は成熟していき、普通の産業になりつつあります。一方で、自分自身の記憶力は減退し、発想力は衰え、新しいタレントが台頭していく中で、会社のなかで以下に自分のポジションを確立していくか。小さい話ではあるんですが、30代くらいのエンジニアの、次の10年の生き方を客観視できる良書だと思います。

端的に面白かったのは下記の引用の部分でした。

 たとえば「このページにちょっとチェックボックスを追加してくれないかな」と頼むとき、頼んだ側の人間は、それが至極簡単なことだと思っている。「If/Thenとかで、条件分岐をさせればすぐにできるだろう」などと思う。
無邪気なものだが、エンジニアにとっては実に苛立たしいことである。
安易に頼まれたとおりにすれば、仕様が変わってしまう。しかも、ひどい仕様になってしまうことが多い。そして、何より困るのは、頼む側が、こちらの作業の具体的内容を良く分かっていると思い込んでいることだ。「この機能を追加するには、こういう作業をすればいいだろう」と想像し、その想像は正しいと信じているのだ。

いやあ、ほんと。分かっていらっしゃる。