Geolocation API-02

取得した位置情報ををGoogleマップに表示してみましょう。

マップへの現在地表示

HTMLソース

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>現在地をグーグルマップに表示</title>
<link rel="stylesheet" href="css/main.css" type="text/css" media="all">
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script src="js/geo.js"></script>
	</head>
	<body>
<h1>現在地をグーグルマップに表示</h1>
<div id="myGoogleMap"></div>
<form>
	<input type="button" id="get" value="現在地の位置情報を取得"><br>
	<input type="button" id="stop" value="位置情報の取得を停止">
</form>
<div id="status"></div>
	</body>
</html>

スクリプトサンプル

// 現在地をグーグルマップ上に表示
var map = null;
var marker = null;
window.addEventListener("load", function(){
	// 地図をページ内に表示する
	map = new google.maps.Map(
		document.getElementById("myGoogleMap"),{
			zoom : 5,
			center : new google.maps.LatLng(36, 135),
			mapTypeId : google.maps.MapTypeId.ROADMAP
		}
	);

	// 情報を表示するための領域を指し示す変数
	var ele = document.getElementById("status");

	// Geolocation APIに対応しているか調べる
	if (!navigator.geolocation){
		ele.innerHTML = "Geolocation APIに対応していません";
		return;
	}

	// 監視用IDを入れるための変数
	var watchID = null;
	document.getElementById("get").addEventListener("click", function(){
		var option = {
			enableHighAccuracy : true,	// 詳細な位置を取得
			timeout : 60*1000,	// タイムアウトまでは60秒
			maximumAge : 0	// 最新のデータを取得
		}
		watchID = navigator.geolocation.watchPosition(getPos, errPos, option);
	}, true);
	// 位置情報を取得した場合に処理を行う関数
	function getPos(position){
		var lat = position.coords.latitude;	// 緯度
		var lng = position.coords.longitude;	// 経度
		var alt = position.coords.altitude;	// 高度
		var acc = position.coords.accuracy;	// 緯度経度の誤差
		var altAcc = position.coords.altitudeAccuracy;	// 高度の誤差
		var hd = position.coords.heading;	// 方角
		ele.innerHTML = "緯度:"+lat+"<br>経度:"+lng+"<br>緯度経度の誤差:"+acc+" m<br>"+
		"高度:"+alt+"<br>高度の誤差:"+altAcc+" m<br>方角:"+hd;
		// 地図の中心を現在地にする
		var currentPosition = new google.maps.LatLng(lat, lng);
		map.setCenter(currentPosition);

		// マーカーを表示する
		if (marker){
			marker.setMap(null);	// マーカーを削除
		}
		marker = new google.maps.Marker({
			position: currentPosition,
			map: map
		});
	}
	// 位置情報の取得に失敗した場合に処理を行う関数
	function errPos(error){
		var message = [ "",
			"ユーザーが位置情報の提供を拒否しました",
			"何らかの原因で位置情報を取得できませんでした",
			"タイムアウトしました。時間内に位置を特定できませんでした"
		]
		ele.innerHTML = error.code+":"+message[error.code];
	}
	// 位置情報の定期的な取得を停止
	document.getElementById("stop").addEventListener("click", function(){
		// 位置情報の取得が行われていない場合は何もしない
		if(watchID == null){
			ele.innerHTML = "位置情報の取得は行っていません";
			return;
		}
		navigator.geolocation.clearWatch(watchID);
		ele.innerHTML = "位置情報の取得を停止しました";
		// 監視を解除したことを示すのでnullを入れる
		watchID = null;
	}, true);
}, true);