*

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

関連記事

ヘッダーバナー(画像)をトップページ(index)以外に表示させない方法(wordpress)

先日、とあるドメインのMTのルートフォルダが削除されてしまった事件を受け、洋楽サイトをwordpr

記事を読む

Ktai Styleと携帯サイトがパソコンから見れるfiremobilesimulater&useragentswitcher

クライアントの携帯サイトを長らく放置していたのですが、wordpressのプラグインにKtai S

記事を読む

wordpress3.0へ 画像投稿に問題があるときはRewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]をお忘れなく

昨夜から、画像を登録しても表示されないエラーに悩んでいた。 いつものことながらやさしいwacke

記事を読む

PHPによるWordPressカスタマイズブック

ブログのカスタマイズからプラグインの作成方法まで書かれた幅広い本です。   ネッ

記事を読む

wordpress muで、ファイルをインストールしたフォルダ以外にサイトを表示させたい場合

ということで、昨日試してみた。 参考にしたのはこちらの記事です。 http://blog.

記事を読む

【wordpress】 テーマの決定

出張などがあり、投稿に間が開いてしまった。 結局、あの後、テーマを決定するのに、3日間かかった。 数

記事を読む

APIの威力

まずこちらのページを見てください。 http://info.happymarriage.bi

記事を読む

【wordpress】post_typeで全部の投稿タイプを指定したいとき

1年ぶりの投稿です。   最近、仕事関係でカスタムフィールドの特定のフィールドが

記事を読む

デザインのカスタマイズ

次なる手順は、デザインのカスタマイズ。 wpではテーマという。 バナーの写真変更はかなり簡単にできた

記事を読む

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

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

記事を読む

PAGE TOP ↑