Google Maps API V3で、google.maps.Geocoderクラスのgeocode()を使って、緯度・経度から住所を求めるサンプルプログラムです。
- プログラムに興味はなく、地図上で調べたいだけの場合は緯度・経度・住所・標高を取得するを。
- 住所から緯度経度を求めたい場合は、地名や住所から緯度・経度を取得するを。
地図上をクリックすると、その地点の住所を表示します。
function getAddress(latlng) { // ジオコーダのコンストラクタ var geocoder = new google.maps.Geocoder(); // geocodeリクエストを実行。 // 第1引数はGeocoderRequest。緯度経度⇒住所の変換時はlatLngプロパティを入れればOK。 // 第2引数はコールバック関数。 geocoder.geocode({ latLng: latlng }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { // results.length > 1 で返ってくる場合もありますが・・・。 if (results[0].geometry) { // 住所を取得(日本の場合だけ「日本, 」を削除) var address = results[0].formatted_address.replace(/^日本, /, ''); new google.maps.InfoWindow({ content: address + "<br>(Lat, Lng) = " + latlng }).open(map, new google.maps.Marker({ position: latlng, map: map })); } } } 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 の latLng プロパティに住所や地名を与えると、第2引数のコールバック関数には、検索結果が引数として渡されます。プロパティ名の大文字小文字にご注意を。見つかった場合には、結果がたとえ1つであっても配列として渡される・・のですが、複数返ってきた場合、results[x].geometry.locationがlatLngと異なっている場合があるんですが…。
API Referenceには formatted_address なるプロパティは掲載されていませんが、Google Maps Javascript API V3 Servicesのほうには載っています。address_components[] をそれぞれの国の事情に応じて並べてくれているもんなんですが、国名から入るので「日本, ○○県××市・・・」となってしまうように、ちょっと使いにくいところがあるので、日本の場合のみ変形させています。
API Referenceには formatted_address なるプロパティは掲載されていませんが、Google Maps Javascript API V3 Servicesのほうには載っています。address_components[] をそれぞれの国の事情に応じて並べてくれているもんなんですが、国名から入るので「日本, ○○県××市・・・」となってしまうように、ちょっと使いにくいところがあるので、日本の場合のみ変形させています。