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で消せるので、オリジナルマーカーにもできます。
こんな感じでスマートフォンサイトでお店までのルート検索ができました。