Newer
Older
j2321-tanakai / html / timer.js
@j2321 j2321 on 15 Dec 1 KB 更新
(() => {
    function locGetTimer() {
        var timerInterval = 5000;	// 衛星信号取得再試行までの間隔(ミリ秒)
        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 locmarker = L.marker(mymap.getCenter()).addTo(mymap);
        locmarker.bindPopup("捕捉中...").openPopup();
        var nTrial = 10;
        var tmId = null;		// 最初はnullにしておく
        function tryGetLOC() {
        locmarker.setPopupContent("start").openPopup()
        navigator.geolocation.getCurrentPosition(
            onSuccess, onError,{maximumAge: 0,
                    enableHighAccuracy: true,
                    timeout: 9000});
        }
        function onSuccess(pos) {
        // 引数 pos は L.latlng で変換してから使用する
        var latlng = L.latLng([pos.coords.latitude, pos.coords.longitude]);
        mymap.flyTo(latlng);
        locmarker.setPopupContent(
            "現在地は "+latlng+"です"
        ).openPopup().setLatLng(latlng);
        }
        function onError(err) {
        var restN = "あと"+(--nTrial)+"回試行します。";
        if (nTrial > 0) {
            locmarker.setPopupContent("捕捉失敗:"+restN).openPopup();
            tmId = setTimeout(tryGetLOC, timerInterval); // 5秒後に再試行
            //tryGetLOC(); //setTimeoutでNGな機種はこちらにする
        } else {
            var m = '<span style="color: red;">中止します。</span>';
            locmarker.setPopupContent(m).openPopup();
        }
        }
        tryGetLOC();
    }
    document.addEventListener("DOMContentLoaded", locGetTimer, false);
    })();