各所で報じられているとおり Google Maps の表示可能範囲が世界規模に拡張され、とくに衛星モード(Satellite)では日本上空から撮影した写真も呼び出せるようになり、ぐっと楽しくなりました。…が、残念ながら通常の地図モード(Map)がまだ白地図状態なので、思い通りの場所の写真を呼び出すのはちょっと難しいようです。そこで、MapFan Web のリンク用 URL に組み込まれた緯度経度を Google Map 用に変換するワンライナー(?)を書いてみました。
#('35.39.19.2' '139.44.55.0') with: #(320e-5 -325e-5) collect: [: hms : delta | | value | value := hms asInteger. value := ((hms replaceAll: $. with: $:) asTime asSeconds + (hms last digitValue * 0.1) / 1 hours asSeconds) asFloat fractionPart + delta + value. (value asScaledDecimal: 6) printString allButLast: 2]
やっていることは単純で、度.分.秒 を 度 に変換しているだけです。あと、“なんちゃって”ではありますが測地系補正っぽいこともしています。
まず、Google Maps で行きたい場所を MapFan Web で、検索機能を利用するなどして表示します(スポット名検索でスポットにヒットしてしまった場合は「この場所を中心とした地図ページへ」で改めて通常画面に移動します)。画面左上にある「リンク URL」中の MAP= で始まる部分が、呼び出した地図の中心部の経度、緯度に相当します。
http://www.mapfan.com/index.cgi?MAP=E139.44.55.0N35.39.19.2&ZM=10
この URL 中にあるピリオドで区切られた4つの数値が、それぞれ、経度( E が冠されているもの)、緯度(N が冠されているもの)です。E 、N を含めず、数値とピリオドだけをレシーバの配列リテラルの要素(文字列リテラル)に緯度、経度の順(MapFan Web とは逆順)にペーストしてスクリプト全体を選択後、print it (alt/cmd + p) します。すると次のような出力が得られます。
=> #('35.658533' '139.745361')
この結果中の要素それぞれを Google Maps の URL 中の対応する場所にペーストすれば(小数点以下だけでよいでしょう)ほぼ MapFan Web で呼び出した場所を同じ位置の写真を呼び出せるはずです。
http://maps.google.com/maps?ll=35.658533,139.745361&t=k
は? 緯度経度それぞれをいちいちコピペするのはめんどくさいから URL を吐きださせろ? ごもっとも。w
confirm mapFanUrl mapFanLl googleLl googleUrl |
MapFan Web で「リンクURL」をコピーしてからこのスクリプトを do it (alt/cmd + d) すると、クリップボード内のテキストが Google Maps の URL に置換されますので、そのまま WWW ブラウザ URL 入力欄にペーストすればOKです。
SqueakNihongo7 を含む、Squeak 3.7、3.8 で動きます。あと、Squeak システムが踏み台にしている OS のクリップボード(ペーストボード)との相性がありますが…(とりあえず Mac OS 9、OS X、Win XP ではだいじょうぶなようです)