緯度経度から住所を取得するPHPプログラムを作ってみる - 大人の自由研究

大人の自由研究 ホーム » 未分類 » 緯度経度から住所を取得するPHPプログラムを作ってみる

緯度経度から住所を取得するPHPプログラムを作ってみる

 久しぶりに見たドラマ『JOKER ジョーカー許されざる捜査官 - フジテレビ』
 既に最終回が終わってしまったが。。。
このドラマ、終盤から見始めたんだけど(汗)なかなか楽しかった。
 で、この中でワンシーンで「35.738431 139.680691」みたいなメモ(実際はCD内のデータかな)が発見された。
 その瞬間、緯度経度の情報じゃん!
 ってバレバレでした(笑)

 ま、それは良しとして。。。
 その緯度経度の情報から住所を引きだすアプリを考えてみた。大人の自由研究だ。

 てっとりばやく、Google Maps のAPIを使えば出来そうだが。
 Google以外でも
 簡易逆ジオコーディングサービス / Finds Webサービスってのもあるらしい。

 ※こちらのブログに纏めてありますね
 また、Google先生に『緯度経度から住所』は?って聞くといっぱい教えてくれますね。


 ただパフォーマンスを考えると、、、何らかのアルゴリズムで自前か。。。ってか、作れるのか?

 で、
 位置参照情報ダウンロードサービス
 こんなサイトを発見した。

 緯度経度と住所の情報がダウンロード出来るようだ!

 とりあえず、東京都のデータをダウンロードしてみた。
 凄い量だぁ!

 ロリポのMySQLにデータをぶち込んでみる事に。
 同じ緯度経度が複数行あるようだが、今回は精度は求めない事にして、重複行はスキップする事に。
 約20万件だったかなぁ。登録されたデータは。

 次はPHPでのプログラミング~
 久しぶりなので、シンタックスエラーの嵐ですねぇ(汗)
 if文の条件すら怪しい状態だ(笑)

 :
 :

 一応完成しよん。
 ブラウザから緯度経度の情報を渡してあげると、近い住所を一覧で出すだけ。

 簡単にアルゴリズムを。。。

 受け取った緯度経度(lat,long)だとピンポイントの位置なので、少し範囲を持たせる
適当に、-0.001 +0.001 してみた。どれくらいの大きさになったのか?テニスコートくらいか?
サッカーグランド?それとも東京ドームくらいか?(汗)

$l_lat = $_REQUEST['lat'] - 0.001;
$h_lat = $_REQUEST['lat'] + 0.001;

$l_long = $_REQUEST['long'] - 0.001;
$h_long = $_REQUEST['long'] + 0.001;

 で、これを条件にDBから検索する。

 当然、範囲が大きいので、複数件ヒットする訳だ。

 GORUP BY と ORDER BY を上手く使い、一番多い、住所を取り出す。(とりあえず一覧で並べてみた)
 オモロイですねぇ~

 ただ、川の上辺りを指定すると、検索にヒットしない場合があるようだ。
 そこで、ヒットしない場合はもう少し範囲を広げる事に。(最大2回のクエリー実行)
 微調整は今後するとして。。。-0.005 ~ +0.005 にしてみた。

 それなりの住所が返ってくるじゃん(笑)


 こんな感じ。右の数字は件数ね。
--------------------------
東京都 練馬区 旭丘二丁目 9
東京都 板橋区 向原二丁目 5
東京都 豊島区 千早四丁目 1
--------------------------
 こちら、わざと、練馬区と板橋区と豊島区のきわどい場所を指定してみた結果です。
 練馬区が9件ヒットしてるので、練馬区が近いかなぁ。


 ※注意※
  範囲を持たせて検索するって話しは、どっかのホームページに書いてあった。
  URLが見つからなかった(汗)

 ★サンプルですが、以下のURLで確認可能です。
 http://www.saruyamax.com/gps_test/GetLocation?lat=35.736765&long=139.747790
 みないに呼び出してくれればOK。
 ※東京都と埼玉県しか出てきませんが(汗)

 Au端末を持ってる人は、、
 http://www.saruyamax.com/gps_test/au_gps.html
 からアクセスすると、自分の今の位置が表示される!(と思う)

 次はiPhoneアプリから呼び出してみる。


===========================
追伸
===========================
 緯度経度を+-0.001 した時の距離を調べてみた。正しいのか微妙ですが(汗)
 →このサイトで調べると
 緯度に0.001を足すと、111.3m
 経度に0.001を足すと、 90.4m になるようです。




関連記事
スポンサーサイト
コメント(管理者承認後に公開します)

※未入力可能。メールアドレスは公開されますので、ご注意ください。
非公開コメント

トラックバック

http://ukkey3.blog33.fc2.com/tb.php/329-09d71bb6