Newer
Older
matsugaoka / web / map / test.mado / timer.js
@mamadoka mamadoka on 22 Jul 2019 2 KB create timer.js
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);