Newer
Older
TADOKOROc1231429 / locget-timer.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Try to Get GNSS Signal 10 times</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="leaflet.css" />
<script src="leaflet.js"></script>
<script type="text/javascript" src="locget-timer.js" charset="utf-8"></script>

<style type="text/css">
<!--
div#mymap {width: 90vw; height: 80vh; margin: 0 auto;}
button {
    padding: 10px 20px;
    font-size: 16px;
    margin: 10px;
}
-->
</style>
</head>

<body>
<h1>Try 10 gets</h1>
<p>GNSS信号の取れない(弱い)ところでは、10回だけ
<span>getCurrentPosition()</span> を繰り返す。
取れたらその場所に地図移動する。</p>
<div>
    <button id="startButton">START</button>
    <button id="stopButton">STOP</button>
</div>
<div id="mymap"></div>

<script>
let map = L.map('mymap').setView([35.681236, 139.767125], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

let marker;
let count = 0;
let intervalId;

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition, showError);
    } else {
        alert("Geolocation is not supported by this browser.");
    }
}

function showPosition(position) {
    let lat = position.coords.latitude;
    let lon = position.coords.longitude;
    if (marker) {
        marker.setLatLng([lat, lon]);
    } else {
        marker = L.marker([lat, lon]).addTo(map);
    }
    map.setView([lat, lon], 13);
    count++;
    if (count >= 10) {
        stopLocating();
    }
}

function showError(error) {
    switch(error.code) {
        case error.PERMISSION_DENIED:
            alert("User denied the request for Geolocation.");
            break;
        case error.POSITION_UNAVAILABLE:
            alert("Location information is unavailable.");
            break;
        case error.TIMEOUT:
            alert("The request to get user location timed out.");
            break;
        case error.UNKNOWN_ERROR:
            alert("An unknown error occurred.");
            break;
    }
    stopLocating();
}

function startLocating() {
    count = 0;
    intervalId = setInterval(getLocation, 1000);
}

function stopLocating() {
    clearInterval(intervalId);
}

document.getElementById('startButton').addEventListener('click', startLocating);
document.getElementById('stopButton').addEventListener('click', stopLocating);
</script>
</body>
</html>