function gpsGetTimer() { var timerInterval = 5000; // GPS取得再試行までの間隔(ミリ秒) var mymap = L.map("mymap").setView([38.891, 139.824], 16); L.tileLayer('//cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', { attribution: '<a href="http://maps.gsi.go.jp/development/ichiran.html">\ 国土地理院</a>' }).addTo(mymap); var gpsmarker = L.marker(mymap.getCenter()).addTo(mymap); gpsmarker.bindPopup("捕捉中...").openPopup(); var nTrial = 10; var tmId = null;// 最初はnullにしておく var gpsID = null; kyori = 0; function tryGetGPS() { //gpsをとる動き gpsmarker.setPopupContent("start").openPopup() gpsID = navigator.geolocation.getCurrentPosition( onSuccess, onError,{maximumAge: 0, enableHighAccuracy: true, timeout: 9000}); } function stopGPS() { //gpsをとるのをやめる動き navigator.geolocation.clearWatch(gpsID); clearTimeout(tmId); alert("とめたよ!"); } var polyline = L.polyline([], {color: "red"}).addTo(mymap); function onSuccess(pos) { // 引数 pos は L.latlng で変換してから使用する var latlng = L.latLng([pos.coords.latitude, pos.coords.longitude]); mymap.flyTo(latlng); //その地点までとぶ gpsmarker.setPopupContent( "現在地は "+latlng+"です" ).openPopup().setLatLng(latlng); gpsmarker.setLatLng(latlng); polyline.addLatLng(latlng); var gll = polyline.getLatLngs();//polylineを構成する座標配列 var len = gll.length; //その配列の個数 //let kyori = 0; if (len > 1) { //配列が2個以上だったら //位置1.distanceTo(位置2)で2点間距離が得られる //[len-2]は末尾から2つめの位置 kyori += latlng.distanceTo(gll[len-2]); document.getElementById("distance").innerHTML = Math.round(kyori);//「[]m移動しました」の所に書き込む } } function onError(err) { var restN = "あと"+(--nTrial)+"回試行します。"; if (nTrial > 0) { gpsmarker.setPopupContent("捕捉失敗:"+restN).openPopup(); tmId = setTimeout(tryGetGPS, timerInterval); // 5秒後に再試行 //tryGetGPS(); //setTimeoutでNGな機種はこちらにする } else { var m = '<span style="color: red;">中止します。</span>'; gpsmarker.setPopupContent(m).openPopup(); } } //tryGetGPS(); document.getElementById("start").addEventListener( //startボタンを押したとき "click", tryGetGPS ); document.getElementById("stop").addEventListener( //stopボタンを押したとき "click", stopGPS ); } document.addEventListener("DOMContentLoaded", gpsGetTimer, false);