RECRUITさんがやっているMASHUPコンテスト関連の話。
フロム・エー ナビのAPIで提供される情報の中に、緯度経度情報があるのですが、これをGoogleMapsにマッピングしてみようとしました。
GoogleMapsを表示する方法はそこかしこに(というかGoogleのページに)記述があるので割愛します。
で、GoogleMaps上には、
point = new GLatLng(ido,keido);
map.addOverlay(new GMarker(pointi));
こんな感じでido、keidoに値を書いてやったらマーカーが置けるんですが、この緯度経度情報が世界測地系じゃなければ駄目らしいのです。
一方、フロム・エー ナビAPIで提供されているのは、どうやら日本測地系くさい。さらに、「N35.39.24」こんなフォーマットのデータが帰ってきます。これをゴリゴリとGoogleMaps上に置けるように変換してみました。
日本測地系から世界測地系への変換は、こちらのページを参考にしました。
実際に作成したソースは↓こちら。
ido = getTudeData("取得した緯度");
keido = getTudeData("取得した軽度");
addPointToMap(ido,keido);
function getTudeData(str){
leng = str.length;
tmpStr = str.substring(1,leng);
leng2 = tmpStr.lastIndexOf(".");
leng3 = tmpStr.indexOf(".");
addNum = tmpStr.substring(leng2+1,tmpStr.length) / 3600;
addNum2 = tmpStr.substring(leng3+1,leng2) / 60;
addNum3 = tmpStr.substring(0,leng3)
rtnStr = eval(addNum) + eval(addNum2) + eval(addNum3);
return rtnStr;
}
function addPointToMap(ido,keido) {
newido = eval(ido) - (eval(ido) * 0.00010695) + (eval(keido) * 0.000017464) + 0.0046017;
newkeido = eval(keido) - (eval(ido) * 0.000046038) - (eval(keido) * 0.000083043) + 0.010040;
point = new GLatLng(newido,newkeido,true);
map.addOverlay(new GMarker(pointi));
}
みっともないくらいゴリゴリ書いちゃってますが、これで合っているのかちょっと不安だったりします。
それにしても、フロム・エー ナビのAPI仕様ですが、MashUpを謳うのであれば世界測地系で出して欲しかったなぁ。