さて、以前にたくさんの座標を取得する必要があり、 http://www.geocoding.jp/api/ なんかを頼りに一つ一つ調べていたのですが、あまりの多さにらちがあかないと思い、自動化しようと思いました。
ジオコーディングは実はGoogle Ajax Search APIで実現できます。(
現在はGoogle Maps APIで代用できるようです。わかり次第報告します。)Google Ajax Search APIはその名前の通りAjaxでGoogle検索する代物です。ご存じの方も多いと思いますが、Google検索にはWeb検索、画像検索、地図検索のように対象ごとに検索エンジンが分かれています。これはGoogle Ajax Search APIでも同様でこのAPIで地図検索をすればジオコーディングができてしまいます。
さて、Google Ajax Search APIを使うには以下からAPIKeyを取得する必要があります。
http://code.google.com/apis/ajaxsearch/signup.html
ただどうやらURLごとに発行されるこのKeyはGoogle Maps APIで取得したKeyと同じようですでにGoogle Maps APIでkeyを取得されている方はそのkeyをそのまま使うことができます。
keyを取得したらページの中に以下のようなJavaScriptを追加すればokです。
<script src="http://www.google.com/uds/api?file=uds.js&v=0.1&key=***" type="text/javascript" charset="utf-8"></script>
検索の仕方ですが地図検索はGlocalSearchクラスで行えます。Google Ajax Search APIはAjaxの部分が完全に隠蔽されているので、検索結果を受け取るメソッドをsetSearchCompleteCallbackで指定し、executeを呼び出すだけで終わりです。JavaScriptで以下のように書きます。
var query = "東京駅"; var gls = new GlocalSearch(); gls.setSearchCompleteCallback(null, onQueryComplate); gls.execute(str);
setSearchCompleteCallbackの第一引数は、globalな関数を第二引数に指定するときは不要です。次にonQueryComplateの実装ですが、GlocalSearchオブジェクトのresultsに検索結果が格納されているので、その中身をチェックすれば良いです。
function onQueryComplate() { if (gls.results[0]==undefined) { alert("見つかりません"); } else { var point = gls.results[0]; var gpoint = new GLatLng(point.lat,point.lng); alert(query + "=" + gpoint) } }
resultsに格納されているオブジェクトの詳細は以下のGlocalResultクラスを見るとよいです。
http://code.google.com/apis/ajaxsearch/documentation/reference.html#_class_GlocalResult
今回の一通りのコードをまとめたのが以下です。(実行する際はapikeyのところだけ置き換えてください)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Google Ajax Search API Test</title> <script src="http://maps.google.com/maps?file=api&v=2&key=***" type="text/javascript" charset="utf-8"></script> <script src="http://www.google.com/uds/api?file=uds.js&v=0.1&key=***" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> <!-- var query = "東京駅"; var gls = new GlocalSearch(); gls.setSearchCompleteCallback(null, onQueryComplate); gls.execute(query); function onQueryComplate() { if (gls.results[0]==undefined) { alert("見つかりません"); } else { var point = gls.results[0]; var gpoint = new GLatLng(point.lat,point.lng); alert(query + "=" + gpoint) } } //--> </script> </head> <body> <h1>Google Ajax Search API Test</h1> </body> </html>