*

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

関連記事

初挑戦! SQLコマンドの方法って??

去年の9月から、知人のサイトを無料ブログからwordpressに移す作業をしていたのだが、今日、ド

記事を読む

【wordpress】 テーマの種類

インストールが終わったら、次はテーマ。   見るところ、フリースペースのほう

記事を読む

【wordpress MU】結局手動でアップしてます

前回の記事に登場したtera termは2日がかりでDLできたんですが、ホストに接続できず、WPM

記事を読む

【wordpress】 wpからwpへのインポート

MTとWPのテンプレを同じにしようと思ったら、WPは無料ブログを利用していたことにいまさら気づいた。

記事を読む

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

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

記事を読む

【wordpress】 DBの文字コード

今日、久しぶりに主人のためにwordpressをインストールした。 今日つまずいたのは、文字コード。

記事を読む

wordpressのテーマ Delicateでトップページの記事リストで日本語のタイトルが表示されない

この度新しいサイトを立ち上げ、最低限のシンプルさでそこそこ見栄えのするテーマはないかなということで

記事を読む

wordpressのアーカイブページ、子カテゴリごとに記事一覧を表示させる

自分のサイトはカテゴリの階層をあまり深くしない(つまり、子カテゴリ・サブカテゴリなどを作成しない)

記事を読む

youtubeの動画ギャラリーが手軽にできるクールなwordpress プラグイン Tubepress

http://kachibito.net/wordpress/tubepress.html こち

記事を読む

sIFRって一体何??

wordpressのBellaっていうテーマを使ったら、どうやっても、タイトルの日本語の部分が出て

記事を読む

PAGE TOP ↑