google mapsの逆ジオコーディングの格闘記
今年、年明けに思い立って、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";
(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がついにリリースされた!という記事を読んだばかりで、