« Ruby on Rails勉強開始 | メイン | NTTカード、電子マネー「ネットキャッシュ」のID約8万件が流出--不正利用も確認 »

フロム・エー ナビAPIの緯度経度情報をGoogleMapsにマッピング

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を謳うのであれば世界測地系で出して欲しかったなぁ。