*

google mapsの逆ジオコーディングの格闘記

公開日: : API, wordpress

今年、年明けに思い立って、Yahooカテゴリ用に作成した1月1日サイト。

ヤフカテならずで今年のMA6にも応募した。

そのとき、自分のアイディアにプラスしてこうしたらいいんじゃん?っていうアドバイスをいただき、地図から世界各地の日の出を算出するプログラムを作成。

しかし、ネットママ友から

「送信ボタンを押すと、ページがリロードする」

「送信ボタンを押すと、マーカーがもとの戻っていて、自分で選んだ地点がデータに入ってるのか不安」

という厳しいお言葉を頂いた。。。

 

そして年末、またとあるコンテストに応募&ヤフカテ再々挑戦ということで、今日、1日かけて各所を修正・・・

その際、必要になってくるのが、経度緯度から住所を算出する逆ジオコーディング。

日本だけのものならFind.jpとか、使いやすいものがいくつかあったのだが、こちらは世界が対象なので・・・

仕方なく、google mapsの逆ジオコーディングと格闘するハメに・・・

マニュアルはこちらにあるのだが、情報が少ない。

なんといってもレスポンスの部分が。。。

サンプルで

http://maps.google.com/maps/api/geocode/xml?latlng=40.714224,-73.961452&sensor=true

を表示させると、

OK street_address 279-281 ベッドフォード・アベニュー, ブルックリン, ニューヨーク 11211, アメリカ合衆国 279-281 279-281 street_number ベッドフォード・アベニュー ベッドフォード・アベニュー route ブルックリン ブルックリン sublocality political ニューヨーク ニューヨーク locality political ブルックリン ブルックリン administrative_area_level_2 political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 11211 11211 postal_code 40.7142215 -73.9614454 RANGE_INTERPOLATED 40.7110552 -73.9646313 40.7173505 -73.9583361 40.7139010 -73.9616800 40.7145047 -73.9612874 neighborhood political ウィリアムズバーグ, ニューヨーク, アメリカ合衆国 ウィリアムズバーグ ウィリアムズバーグ neighborhood political ニューヨーク ニューヨーク locality political ブルックリン ブルックリン administrative_area_level_2 political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 40.7064461 -73.9536163 APPROXIMATE 40.6979330 -73.9698451 40.7182050 -73.9202810 40.6979330 -73.9698451 40.7182050 -73.9202810 postal_code ニューヨーク, 11211, アメリカ合衆国 11211 11211 postal_code ブルックリン ブルックリン sublocality political ニューヨーク ニューヨーク locality political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 40.7118873 -73.9582633 APPROXIMATE 40.6976359 -73.9761669 40.7261370 -73.9230429 40.6976359 -73.9761669 40.7261370 -73.9230429 sublocality political ブルックリン, ニューヨーク, アメリカ合衆国 ブルックリン ブルックリン sublocality political ニューヨーク ニューヨーク locality political ブルックリン ブルックリン administrative_area_level_2 political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 40.6500000 -73.9500000 APPROXIMATE 40.5510419 -74.0566300 40.7394460 -73.8333650 40.5510419 -74.0566300 40.7394460 -73.8333650 administrative_area_level_2 political ブルックリン, ニューヨーク, アメリカ合衆国 ブルックリン ブルックリン administrative_area_level_2 political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 40.6528762 -73.9594940 APPROXIMATE 40.5510419 -74.0566300 40.7394460 -73.8333650 40.5510419 -74.0566300 40.7394460 -73.8333650 locality political ニューヨーク, アメリカ合衆国 ニューヨーク ニューヨーク locality political ニューヨーク ニューヨーク administrative_area_level_2 political ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 40.7143528 -74.0059731 APPROXIMATE 40.4773990 -74.2590900 40.9175770 -73.7002720 40.4773990 -74.2590900 40.9175770 -73.7002720 administrative_area_level_1 political ニューヨーク, アメリカ合衆国 ニューヨーク NY administrative_area_level_1 political アメリカ合衆国 US country political 43.2994285 -74.2179326 APPROXIMATE 40.4773990 -79.7625900 45.0158650 -71.7774910 40.4773990 -79.7625900 45.0158650 -71.7774910 country political アメリカ合衆国 アメリカ合衆国 US country political 37.0902400 -95.7128910 APPROXIMATE 18.7763000 170.5957000 71.5388000 -66.8850749 18.7763000 170.5957000 71.5388000 -66.8850749

 

と表示されて、階層が全くわからない・・・

困った・・・

サンプルのjsonとかほかのページを参照にしながら、なんとか

$data=$xml->result

$data->formatted_addressで住所が表示されるようになった!

 

ワーーイ!

と喜ぶのもつかの間、日本の緯度経度だと、これだけのレスポンスだと

住所がさっきのアメリカのサンプルのように、ずらーーと出てきてしまう状況に・・・

しばらく格闘して、やっとtypeを取得、typeを指定して一番最初の住所を取り出してみたら、なんと、国ごとにタイプの設定が違うようで、タイプを設定したらほかの国はやはり表示されない状況に・・・・

考えた挙句、最初の1要素だけ取り出せば良いことに気づき、その最初のひとつの要素を取り出すコードを四苦八苦して解明、やっとのぞみの表示が出来上がった。

$url="http://maps.google.com/maps/api/geocode/xml?latlng=$lat,$lng&sensor=true";

$xml=simplexml_load_file ($url);
 
$datas=$xml->result;
foreach($datas as $data){
$i=1;
if ($i==1){
echo '選択された地点は'.h($data->formatted_address).'です。';
break;
}
}

(jsonは公式ページにあるようにresults,typesのようですが、xmlはsがいらないようです。)

ふうーー死ぬかと思ったぜよ・・・

しかしグローバル関数(?つーのかな?)の$i=1;とか自分ではじめて考えて使ってみた。そしてできたので、今度別なのに使ってみたい。

次なる目標は、一度選んだマーカーの位置を、フォーム送信後も維持すること。

これは・・・来年かな・・・爆

今日は、こちらの本を何度かひらいてプログラムを組みました。初心者に必要な情報も豊富で使いやすいです!

楽天市場:PHP逆引きレシピ

セブンネットショッピング:PHP逆引きレシピ すぐに美味しいサンプル&テクニック261

関連記事

【wordpress】 wordpressインストール

今日は久しぶりにwpのインストール。 http://wordpress.xwd.jp/に行って、フ

記事を読む

【wordpress】WPMUの各blog(ブログ)のテーマを設定する

やっとこWPMUのインストールが完了、昨日1日かけてテーマを選びというか手当たり次第DLしてアップ

記事を読む

The plugin generated 3 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.の原因&解決法

自作のwordpressプラグインを入れて、アクティベイト(有効化)しようとすると、 The p

記事を読む

サイトマップを作るプラグイン

movable typeはサイトマップがディフォルトであるけど、wordpressはない。

記事を読む

トップの新着記事にカスタム投稿タイプも含める方法

件名の実装、長らく悩んでいたのですが、今解決しました。 参考にしたページ http:

記事を読む

wordpress カテゴリごとのRSSフィードを作成する

公式サイトでもタグリファレンスがあったが http://codex.wordpress.org/

記事を読む

【wordpress】 最初の1つだけ画像のサムネイルを表示させる

http://topwpthemes.com/trimass/ こちらのテーマを導入したん

記事を読む

【wordpress】 wordpressを久しぶりにインストールしてみた

最近、自分の中では完璧にMTに軍配が上がっていたのだが・・・ APIの勉強をしたので、phpで

記事を読む

【wordpress】 サイトでいろいろな商品が簡単に紹介できる vc search

wackeyさんのプラグインでvc searchというのがあるので使ってみた。  

記事を読む

wordpress muも3.0が出ていた&アップグレードはボタンひとつ!

昨日、wackeyさんのとこの記事でwp3.0がついにリリースされた!という記事を読んだばかりで、

記事を読む

PAGE TOP ↑