最近、逆ジオコーディングを使ったので、
それについてちょっと書いてみたいと思います。
そもそも逆ジオコーディングとは、
当たり前ですが、ジオコーディングの逆のことです。
ジオコーディングが住所から緯度経度を取得するものに対して、
逆ジオコーディングは緯度経度から住所を取得するものです。
例えば、GPSで現在地の緯度経度をパラメータにつけて送信すると、
その場所の住所がわかったりします。
逆ジオコーディングを提供するAPIがポツポツと増えてきました。
Google Maps APIとかYahooローカルサーチAPIとか簡単に使えるもので言うとまだまだあります。
コチラでたくさん紹介されていますので参考にして下さい。
そこで今回は、前回せっかくYAHOOローカルサーチAPIのキーを取得しましたので、
YAHOOローカルサーチAPIから逆ジオコーディングを試してみます。
根本的な使い方は前回と同じです。リクエストURLを作ります。
基本となるリクエストURL
http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch
このURLの後ろにパラメータを付けていきます。
前回同様、アプリケーションIDは必須です。
先ほどのリクエストURLに”?”を入れてくっつけましょう。
?appid=[ココに入力]
必須項目の部分が前回とは変わります。
「p」か「lat・lon・dist」のどちらかを必須に持ってこればいいのですが、
逆ジオコーディングなので、lat(緯度)・lon(経度)・dist(距離)を必須にします。
&lat=[緯度を入力]&lon=[経度を入力]&dist=[距離を入力]
次にカテゴリを指定します。
住所を取得したいので、「address」です。
&category=address
他にもパラメータを付けることはできますが、
説明は割愛致します。前回の記事をご参照下さい。
最後に「al」で住所レベルの絞込みを指定します。
住所レベルの絞り込み: 1 - 市区町村レベル 2 - 町、大字レベル 3 - 丁目、字レベル &al=3
ではここまでで、できたあがったリクエストURLを見てみましょう。
そして、それを変数$urlに入れます。
$url = "http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch?appid=[ココに入力]&lat=[緯度を入力]&lon=[経度を入力]&dist=[距離を入力]&category=address&n=1&datum=wgs&al=3";
入れましたら前回同様、
ファイルの内容を文字列に読み込む関数を使います。
$contents = file_get_contents($url);
そして、XML文字列をオブジェクトに代入します。
$xml = simplexml_load_string($contents);
中身はこれです。
object(SimpleXMLElement)#48 (4) { ["Count"]=> string(2) "16" ["ViewCount"]=> string(1) "1" ["Query"]=> object(SimpleXMLElement)#49 (0) { } ["Item"]=> object(SimpleXMLElement)#50 (7) { ["Category"]=> string(7) "Address" ["Title"]=> string(46) "大阪府大阪市中央区博労町3丁目" ["Address"]=> string(46) "大阪府大阪市中央区博労町3丁目" ["AddressLevel"]=> string(1) "4" ["DatumTky97"]=> object(SimpleXMLElement)#51 (2) { ["Lat"]=> string(11) "34.67755194" ["Lon"]=> string(9) "135.50198" } ["DatumWgs84"]=> object(SimpleXMLElement)#52 (2) { ["Lat"]=> string(15) "34.680807321833" ["Lon"]=> string(15) "135.49917076401" } ["Url"]=> object(SimpleXMLElement)#53 (0) { } } }
これで住所を取得できました。逆ジオコーディング完了です。
若干の誤差はありますね。ただ数値を変えれば。
数値を変えれば、もっと細かく番地まで出すことも可能です。
時間がある方は、どのAPIが一番精度が高いかを試してみるのもいいかもしれないですね。