map

Google Maps APIで住所から緯度・経度を取得する方法



Google Maps API緯度・経度を使って地図にマーカー等を表示します。
ただ住所はわかっても緯度・経度何て普通はわかりません。
なので住所から緯度・経度を取得します。

住所・地名:

上記サンプルのコード
<!-- Google Maps APIの読み込み -->
<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script type='text/javascript'>google.load('jquery', '1.3.2');</script>
<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false&language=ja' charset='UTF-8'></script>
<script>
// mapオブジェクトの初期化
map = null;

// 初期設定
jQuery(document).ready(function () 
{
	initialize();
});

// マップ初期化
function initialize(){
	var mapdiv = document.getElementById('map_canvas');
	var geocoder = new google.maps.Geocoder();
	var options = 
	{
		// ズーム倍率
		zoom : 8, 
		// 地図中央の緯度・経度(新宿駅)
		center : new google.maps.LatLng(35.68978889880994, 139.70049233458258),
		// 地図タイプ
		mapTypeId : google.maps.MapTypeId.ROADMAP 
	};
	map = new google.maps.Map(mapdiv, options);
}

// 住所から緯度・経度取得
function getLatLng(place) {
	// マップを初期化
	initialize();

	// ジオコーダのコンストラクタ
	var geocoder = new google.maps.Geocoder();

	// geocodeリクエストを実行。
	// 第1引数はGeocoderRequest
	// 住所をaddressプロパティに入れる。
	// 第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;

				// 検索結果地が含まれるように範囲を拡大
				bounds.extend(latlng);

				// マーカー
				var marker = new google.maps.Marker({
					position: latlng,
					map: map
				});

				// 情報ウィンドウを出力
				var infowindow = new google.maps.InfoWindow({
					content: results[i].formatted_address + "<br>(Lat, Lng) = " + latlng.toString()
				});
				infowindow.open(map, marker);

				// ポップアップがクローズされた場合、マーカーを押されたらポップアップが開くイベントを付与
				google.maps.event.addListener(infowindow , "closeclick", function() {
					google.maps.event.addListenerOnce(marker , "click", function(event) {
						infowindow.open(map, marker);
					});
				});
			}
		}

		// 範囲を移動
		map.fitBounds(bounds);
		} else if (status == google.maps.GeocoderStatus.ERROR) {
			alert("Google サーバーへの接続に問題が発生しました。");
		} else if (status == google.maps.GeocoderStatus.INVALID_REQUEST) {
			alert("このリクエストは無効でした。");
		} else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
			alert("ウェブページがリクエストの制限回数を超えました。");
		} else if (status == google.maps.GeocoderStatus.REQUEST_DENIED) {
			alert("ウェブページで PlacesService の使用が許可されていません。");
		}	else if (status == google.maps.GeocoderStatus.UNKNOWN_ERROR) {
			alert("サーバー エラーのため PlacesService リクエストを処理できませんでした。\r\nもう一度実行すると、リクエストが正常に処理される可能性があります。");
		} else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) {
			alert("このリクエストに対する結果が見つかりませんでした。");
		} else {
			alert("その他、不明");
		}
	});
}
</script>
住所・地名:<input type="text" value="桜木町" size="30" id="address"/>
<input type="button" value="緯度・経度取得" onclick="getLatLng(document.getElementById('address').value)" />
<div class='map' id='map_canvas'></div>
これで入力された住所から緯度・経度を求めてマーカーをつけたり移動が可能になります。
ただ、こちらには使用制限があり1秒間で10アクセス程しか出来ません。
それ以上、早くするとgoogle.maps.GeocoderStatus.OVER_QUERY_LIMITが返ってきます。
なので短時間に多量のアクセスは気をつけてください。


コメントを残す