はてなマップブックマークレット

すでに誰か作ってる人いるかもしれませんが、Yahoo!地図 - 地図検索・雨雲レーダー搭載の多機能マップで表示中の地図をはてなマップで表示させるブックマークレットを作ってみました。
Yahoo!と「はてな」以外の外部サーバは使用してません*1


はてなダイアリーにはブックマークレットそのものを貼り付けることは出来ないようなんで、コードを載せときます。

javascript:(function(){function h(u){if(u.match(/^http:\/\/map.yahoo.co.jp\/pl\?(.+)/)){l='';a={'el':'x=','nl':'y='};b={'el':-11.5,'nl':11.9};k=RegExp.$1.split('&');for(var i in k){if(k[i].match(/(nl|el)=(\d+)\.(\d+)\.(\d+)\.(\d+)/)){c=RegExp.$1;l+=a[c]+RegExp.$2+'.'+String(Math.round((Number(RegExp.$3)/60+(Number(RegExp.$4)+b[c])/3600+Number(RegExp.$5)/36e5)*1e4))+'&'}}return(l+'z=2')}else return(0)}function o(s){location.href='http://map.hatena.ne.jp/?'+s}var r=h(location.href);o(r)})();

動作確認はWindowsXP Pro SP2上のIE6で行ってます。
実際に使うときははてなダイアリーのキーワード「ブックマークレット」の解説を参考にしてください。


どうやら、Yahoo!地図情報で扱ってる緯度経度は日本測地系のようで、Yahoo!地図情報で得た緯度経度をそのまま*2世界測地系はてなマップに渡すと500m前後の誤差が出ます。
ところが、この補正には複雑な計算が必要らしく、外部サーバを使わずにブックマークレット単体で正確に計算させるのはブックマークレットで使用できる文字数の関係上無理っぽいので、ここでは国土地理院のサイトで公開されてる表からよく使う地域のパラメータを抜き出して補正値としてブックマークレットの中に持たせることにしました。
なので、利用者がよく使う地域に応じ、先の表を参考にこの数値を変えてやらないといけません。…うぅ、全然実用的じゃないかもorz


変える部分は

b={'el':-11.5,'nl':11.9};

の数字のとこです。
神奈川・東京の場合はこのままで構いません。


対応は

'el' → dL
'nl' → dB

です。


あと、この数値は小数点以下第一位までにしてください。
第二位以下をつけると、IEブックマークレットで使える文字数を超えてしまいエラーとなります。切り捨てるなり四捨五入するなりしてください。


もう寝ないと…
今夜は本当は新谷良子さんのライブDVD観るつもりだったんだけど、あきらめるしか

*1:同じ日にもっと使い勝手の良いブックマークレットを開発している人がいることに気づいて、慌てて取って付けた一文ww。案の定、あちらがデファクトスタンダードとなりました

*2:もちろん、60進→10進変換はしないといけません。上のブックマークレットにはその変換処理も実装されています