タイトルってむずいな。
仕事関連でメモ。
MTOS(Movabletypeのオープンソースですな)にGooglemaps API突っ込んで観光地紹介みたいに使ってるブツに、どうせだからと周辺宿泊施設の表示機能(じゃらんwebサービス)をくっつけ、ついでに各宿までの距離を表示みたいな。
まずは宿泊施設の表示。
基準となるその場所の座標はGooglemapsにあわせて10進数で保持。
Googlemapsは世界測地系ってやつらしいので、じゃらんの日本測地系に変換後、ミリ秒にしておく。
で、じゃらんのチュートリアルを参考に、距離をプルダウンで選べるようにして現在地と検索範囲、ミリ秒にした緯度経度等をリクエストに含めて投げる&取得。今回はphp5に入ってるsimplexml使いました。PEARとかやってみたがどうもAJAX部分でエラー出すもんで・・・
連想配列に入るから、foreachの中で$data->HotelNameとかやってデータ表示
キャッシュとかも考えた方いいのかなー
で、二点間距離。もちphp(しか出来ない)
いろいろ調べてみたが、自分で計算して出すしかないっぽかったので式とかをGoogleさんで探す。
で、h2caster.netさんを参考に(というかほぼまんま)して書いてみましたー
$X = $value->X;//宿の位置取得x
$Y = $value->Y;//宿の位置取得y
// 始点 緯度 ラジアンに変換
$syrad = $lat2/3600000*M_PI/180;//$lat2はじゃらんに投げる用にミリ秒にしてあるやつ
// 始点 経度 ラジアンに変換
$sxrad = $lon2/3600000*M_PI/180;//$lon2は…以下略
// 終点 緯度 ラジアンに変換
$eyrad = $Y/3600000*M_PI/180;
// 終点 経度 ラジアンに変換
$exrad = $X/3600000*M_PI/180;//2点間の平均緯度を計算
$aveirad = ($sxrad + $exrad)/2;
//2点間の緯度差を計算
$deffirad = $sxrad – $exrad;
//2点間の経度差を計算
$deffkrad = $syrad – $eyrad;//子午線曲率半径を計算
$temp = 1 – 0.006674*(sin($aveirad)*sin($aveirad));
$dmrad = 6334834 / sqrt($temp*$temp*$temp);
//卯酉線曲率半径を取得
$dvrad = 6377397 / sqrt($temp);
//ヒュベニの距離計算式
$t1 = $dmrad * $deffirad;
$t2 = $dvrad*Cos($aveirad)*$deffkrad;
$d = sqrt($t1*$t1 + $t2*$t2);
$dis = floor($d);//小数点以下ぶったぎり
こいつみたいなのを前述の宿検索phpのforeachの中で回して各宿のトコに基準の場所(観光地とか)からの距離を表示させると。
そんな感じでいけました。
キョリ測とかで測ってみたけどほぼ同じ値なので約って付けておけばいーべなってくらいで完了。
数学?算数?三角関数?ってむずいね。