Google Maps API V3で、google.maps.Geocoderクラスのgeocode()を使って、地名や住所から緯度・経度を求めるサンプルプログラムです。
Google MAPS APIの料金(Cloud Platformへの支払い)が高く、維持困難となりましたので、ソース公開のみといたします
Google MAPS APIの料金(Cloud Platformへの支払い)が高く、維持困難となりましたので、ソース公開のみといたします
function getLatLng(place) {
// ジオコーダのコンストラクタ
var geocoder = new google.maps.Geocoder();
// geocodeリクエストを実行。
// 第1引数はGeocoderRequest。住所⇒緯度経度座標の変換時はaddressプロパティを入れればOK。
// 第2引数はコールバック関数。
geocoder.geocode({
address: place
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
// 結果の表示範囲。結果が1つとは限らないので、LatLngBoundsで用意。
var bounds = new google.maps.LatLngBounds();
for (var i in results) {
if (results[i].geometry) {
// 緯度経度を取得
var latlng = results[i].geometry.location;
// 住所を取得(日本の場合だけ「日本, 」を削除)
var address = results[0].formatted_address.replace(/^日本, /, '');
// 検索結果地が含まれるように範囲を拡大
bounds.extend(latlng);
// あとはご自由に・・・。
new google.maps.InfoWindow({
content: address + "<br>(Lat, Lng) = " + latlng.toString()
}).open(map, new google.maps.Marker({
position: latlng,
map: map
}));
}
}
// 範囲を移動
map.fitBounds(bounds);
} else if (status == google.maps.GeocoderStatus.ERROR) {
alert("サーバとの通信時に何らかのエラーが発生!");
} else if (status == google.maps.GeocoderStatus.INVALID_REQUEST) {
alert("リクエストに問題アリ!geocode()に渡すGeocoderRequestを確認せよ!!");
} else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
alert("短時間にクエリを送りすぎ!落ち着いて!!");
} else if (status == google.maps.GeocoderStatus.REQUEST_DENIED) {
alert("このページではジオコーダの利用が許可されていない!・・・なぜ!?");
} else if (status == google.maps.GeocoderStatus.UNKNOWN_ERROR) {
alert("サーバ側でなんらかのトラブルが発生した模様。再挑戦されたし。");
} else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) {
alert("見つかりません");
} else {
alert("えぇ~っと・・、バージョンアップ?");
}
});
}
geocode()の第1引数 GeocoderRequest の address プロパティに住所や地名を与えると、第2引数のコールバック関数には、検索結果が引数として渡されます。見つかった場合には、結果がたとえ1つであっても配列として渡されるので、ループさせて取り出します。
API Referenceには formatted_address なるプロパティは掲載されていませんが、Google Maps Javascript API V3 Servicesのほうには載っています。address_components[]をそれぞれの国の事情に応じて並べてくれているもんなんですが、国名から入るので「日本, ○○県××市・・・」となってしまうように、ちょっと使いにくいところがあるので、日本の場合のみ変形させています。
API Referenceには formatted_address なるプロパティは掲載されていませんが、Google Maps Javascript API V3 Servicesのほうには載っています。address_components[]をそれぞれの国の事情に応じて並べてくれているもんなんですが、国名から入るので「日本, ○○県××市・・・」となってしまうように、ちょっと使いにくいところがあるので、日本の場合のみ変形させています。