前回(Geolocation APIで現在地を取得する - @thorikiriのてょりっき)は現在地の取得を一発行うことをやりましたので、今回は連続的に取得してみたいと思います。
モバイルでは、移動中の場所を知りたい欲求にかられると思いますし、移動しながらある一定の範囲に入ったことを知りたいとか、進んだ経路をプロットしたいとかあるんじゃないでしょうか。
連続的に取得するのは、navigator.geolocation.watchPosition(onSuccess, onError [, option])を使います。getCurrentPositionと基本はかわりません。
navigator.geolocation.watchPosition(function(position) { document.getElementById('message').innerHTML = 'You are at ' + position.coords.latitude + ', ' + position.coords.longitude + ' now'; }, function(e) { document.getElementById('message').innerHTML = typeof e == 'string' ? e : e.message; });
連続的に取得するのをやめるには、clearWatchを使います。使い方はsetInterval()と同様と思ってもらえば問題ないかと思います。watchPositionの戻り値をclearWatchの引数にするだけですね。
サンプルコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>Location API Sample</title> </head> <body> <h1>Location API Sample</h1> <div id="message"></div> <div> <button id="stop">STOP</button> </div> <script> var watch; window.onload = function() { if (navigator.geolocation) { watch = navigator.geolocation.watchPosition(function(position) { document.getElementById('message').innerHTML = 'You are at ' + position.coords.latitude + ', ' + position.coords.longitude + ' now'; }, function(e) { document.getElementById('message').innerHTML = e.message; }); } else { document.getElementById('message').innerHTML = 'Location APIがサポートされていません。'; } }; document.getElementById('stop').onclick = function() { navigator.geolocation.clearWatch(watch); document.getElementById('message').innerHTML = 'STOP!!'; }; </script> </body> </html>
HTML5ガイドブック 増補改訂版 (Google Expert Series)
- 作者: 羽田野太巳,古籏一浩,太田昌吾,小松健作,伊藤千光,吉川徹
- 出版社/メーカー: インプレスジャパン
- 発売日: 2012/10/19
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 6回
- この商品を含むブログを見る