2011 24 5月

スマートフォンサイトでGeolocation APIを使ってみる

Nasunaviのスマートフォンサイトで、Google MAPでお店の場所と現在地からのルートを表示するようなものを作ったのでメモ。

まず、ページにmapを表示させてお店の場所にマーカーを表示。

function initialize(){
	$(‘#pageMap’).live(’pageshow’, function(){
		var map;
		var directionsDisplay = new google.maps.DirectionsRenderer();
		var directionsService = new google.maps.DirectionsService();
		var myLatLng = new google.maps.LatLng(‘お店の緯度’, ‘お店の経度’);
		var myOptions = {
			zoom: 15,
			center: myLatLng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}
		var elem = $(‘#map_canvas’)[0];
		var map = new google.maps.Map(elem, myOptions);
		var createMarker = new google.maps.Marker({
			position: myLatLng,
			map: map
		});
		//クリックで位置情報取得・ルート表示
		$(‘#root’).click(function(){
			myLocation();
		});
	});
}

jQuery Mobile使ってるのでpageshowイベントで発生させてます。
お店の位置情報(緯度経度)はwordpressのカスタムフィールドで持たせたものを渡してます。

ここから本番。
Geolocation APIで位置情報を取得させますが、AndroidブラウザではGoogle Gearsを利用しなければダメみたいなのでgears_init.jsを読み込みます。

function myLocation(){
	var geo = navigator.geolocation || google.gears.factory.create(‘beta.geolocation’);
	if(geo){
		geo.getCurrentPosition(
			function(pos){
				var my_lat = pos.coords.latitude;
				var my_lng = pos.coords.longitude;
				//取得したデータからルート表示を実行
				myRoot(my_lat, my_lng);
			},
			function(){
				alert(‘位置情報を取得できませんでした。’);
			},
			{
				enableHighAccuracy: true
			}
		);
	}
}

Geolocation APIで取得した位置情報をもとに、現在地からお店までのルートを表示します。
今回は運転ルートで指定してます。

function myRoot(my_lat, my_lng){
	directionsDisplay.setMap(map);
	var request = {
		origin: myLatLng,
		destination: my_lat+’,'+my_lng,
		travelMode: google.maps.DirectionsTravelMode.DRIVING
	}
	directionsService.route(request, function(response, status) {
		if (status == google.maps.DirectionsStatus.OK) {
			directionsDisplay.setDirections(response);
		}
	});
}

上記には記載してませんが位置情報取得中などは$.mobile.pageLoading()でローディング表示したりしてます。
また、ルート検索で表示される緑のマーカーはdirectionsDisplay.setOptionsで消せるので、オリジナルマーカーにもできます。

こんな感じでスマートフォンサイトでお店までのルート検索ができました。