[GoogleGEO] PHPを使って住所から経度と緯度を取得する方法
GEOを使用する際のルール
Googleの規約で、GEOを使う際は1日1,500回までという上限が定められています。同ipから1500回までのアクセスが許可されている、という事です。Google Maps API Premierに登録(アクセス数に応じて課金方式)すると、1日あたりの上限が10万回になります。また、GEOを使ったデータ取得を行った際は必ずGoogleマップと組み合わせて使用する事というルールがあり、一般利用でGoogleMapsの表示回数は25,000回までとなっています。
JSONを使ってデータを取得
[googleGEO] http://maps.googleapis.com/maps/api/geocode/json
[googleGEO SSL] https://maps.googleapis.com/maps/api/geocode/json
SSLまたは普通のURLにGETパラメータを渡してリクエストを行います。GETに指定するパラメータは、sensorとaddressが必須です。個人情報が含まれるページからのアクセスの場合、SSLで通信します。
GETのパラメータ
- address
都道府県~番地までの住所(日本語可)
- latlng
経度と緯度が事前にわかっていて、GEOの詳細データを取得したい場合はaddressの代わりに指定
- bounds
地図の矩形ポイント(北東と南西)を指定して、大きいバイアスをかけた情報を得たい場合。
- region
地域コード。日本ならjp。おおよその判定基準になります。
- language
結果を返す言語。指定がなければリクエスト元のドメインによって自動判定。日本語ならja。指定しなくても問題ありません。
- sensor
必須です。GPS搭載のデバイスなどから現在の位置などを元にリクエストする時はtrue、そうでなければfalse
PHPでデータを取得
- <?PHP
- // GET用のパラメータ作成
- $parametar = "?sensor=false®ion=jp&address=".urlencode(mb_convert_encoding('住所の文字', 'UTF8', 'auto'));
- $datas = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json'.$parametar);
- // JSONデータをPHPの値に変換する
- $geo = json_decode($datas);
- $results = $geo->results[0];
- $status = $geo->status;
- ?>
レスポンスデータの解析
住所(address)から判定された結果($geo)には、resultsとstatusが含まれています。ステータスエラーが発生した場合、statusは"OK"以外の文字列になります。PHPにデコードすると、オブジェクト形式で操作する事ができるようになり、結果$resultsには次のような値が格納されています。
($resultsの内容)
- address_components (オブジェクトを格納したインデックス配列)
住所を構成する部品についての情報が格納されています。(国、都道府県、市町村、番地など) 各オブジェクトには、それぞれの部品にあたる long_name(文字列)、short_name(文字列)、types(インデックス配列)をキーとした値が格納されています。typesには住所を分割した際どこの区分に当たるのか?を参照できる情報が格納されています。(countryやlocality)
- formatted_address (文字列)
address_componentsの値を組み合わせて、カンマ区切りにした文字列。国,都道府県,市町村,番地の順)
- geometry (オブジェクト形式)
GEOに関する重要な情報が含まれます。バイアス矩形を表すbounds(オブジェクト形式)、経度と緯度の情報を含むlocation(オブジェクト形式)、GEOの正確さがどのレベルなのかを表すlocation_type(定数文字列)、ビューポートの開始位置として適しているおおよその矩形を表すviewport(オブジェクト形式)をキーとして構成されています。矩形の場合、さらにnortheast(北東)とsouthwest(南西)をキーとするオブジェクトが含まれています。
今回は、経度と緯度が知りたいので、$resultsをベースに次のように記述します。$latと$lngはそれぞれfloat形式(7桁の少数)です。
- <?PHP
- // GET用のパラメータ作成
- $parametar = "?sensor=false®ion=jp&address=".urlencode(mb_convert_encoding('住所の文字', 'UTF8', 'auto'));
- $datas = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json'.$parametar);
- // JSONデータをPHPの値に変換する
- $geo = json_decode($datas);
- $status = $geo->status;
- // エラー判定をして値を取得する
- if($status == "OK"){
- $results = $geo->results[0];
- $geometry = $results->geometry;
- $location = $geometry->location;
- $lat = $location->lat; // 緯度を取得
- $lng = $location->lng; // 経度を取得
- }
- ?>
後は取得した経度と緯度の値を使ってGoogleMapを作成し、ページ上に掲載します。保存できるなら保存しておいて、後から取り出して再利用します。(毎回GEOアクセスせずに済みます)
[GoogleGEO] PHPを使って住所から経度と緯度を取得する方法 への3件のフィードバック
トラックバック送信先