diff --git a/GPS/gps.js b/GPS/gps.js index cca4f98..e2543e3 100644 --- a/GPS/gps.js +++ b/GPS/gps.js @@ -1,7 +1,6 @@ document.addEventListener("DOMContentLoaded", ()=>{ var distanceThresh = 10; - var gpsTryMax = 10, nTrial = gpsTryMax;// 最大試行回数を決めておく - var gpsTimer; + var gpsWatchID = null, gpsCount = {}; var mymap, infobox, gpsMarker, btnGet, btnSTOP; var direction; var gsiLayer = L.tileLayer( @@ -188,27 +187,31 @@ function dispInfo(msg) { info.innerText = msg; } - function clearGetGPS() { // 位置取得ボタンを元に戻す + function clearWatchGPS() { // 位置取得ボタンを元に戻す + navigator.geolocation.clearWatch(gpsWatchID); + gpsWatchID = null; btnGet.classList.remove('running'); btnGet.disabled = false; } function getGPS(ev) { - navigator.geolocation.getCurrentPosition( + if (gpsWatchID) { + dispInfo("既に探索中です."); + return; + } + gpsWatchID = navigator.geolocation.watchPosition( onSuccess, onError, { maximumAge: 0, timeout: 8000, enableHighAccuracy: true }); + setTimeout(clearWatchGPS, 10000); btnGet.classList.add('running'); btnGet.disabled = true; dispInfo("取得中..."); } function stopGPS(ev) { - dispInfo("GPS捕捉停止中..."); - nTrial = 1; - clearGetGPS(); + clearWatchGPS(); + dispInfo("GPS捕捉を停止しました."); } function onSuccessL(latlng) { - nTrial = gpsTryMax; - clearGetGPS(); mymap.panTo(latlng); // 地図の中心を取得した位置に let lat = latlng.lat, lng = latlng.lng; let str = `ここは北緯${lat.toFixed(5)}, 東経${lng.toFixed(5)}. `; @@ -216,9 +219,24 @@ let sel = document.getElementById("goals"); console.log("val="+sel.value); if (sel && sel.value && sel.value.indexOf(",") > -1) { + // GPSに頼った数をカウントする let useGPS = LS.getItem("useGPS"), - helpCount = useGPS ? 1+parseInt(useGPS) : 1; - LS.setItem("useGPS", helpCount); + helpCount = useGPS ? parseInt(useGPS) : 0; + let countUp; + if (gpsCount[gpsWatchID]) + countUp = 0; // 一度カウントしたwatchIDではノーカウント + else if (gpsWatchID == null) + countUp = 1; // おそらくタップ×2の位置取得 + else { + countUp = 1; + gpsCount[gpsWatchID] = 1; + } + if (useGPS) { + helpCount += countUp; + } else { + helpCount = 1; + } + LS.setItem("useGPS", helpCount); // セッションを越えた回数記憶 str += ` (位置取得${helpCount}回)`; let areaname = sel.name; let idx = sel.selectedIndex, pname = sel.options[idx].text; @@ -281,16 +299,10 @@ onSuccessL(L.latLng([pos.coords.latitude, pos.coords.longitude])); } function onError(err) {// 失敗時のコールバック - restN = "あと"+(--nTrial)+"回試行します。"; gpsMarker.setPopupContent("取得失敗:"+restN).openPopup(); - dispInfo(restN); - if (nTrial > 0) {// 残り回数があれば - getGPS();// 再度取得を試行する - } else { - dispInfo("GPS捕捉を中止しました.") - clearGetGPS(); - nTrial = gpsTryMax; - } + dispInfo("空がよく見える位置で試して下さい"); + dispInfo("GPS捕捉を中止しました.") + clearWatchGPS(); } workerInit(); mapInit(); diff --git a/GPS/serviceworker.js b/GPS/serviceworker.js index 2d3aeeb..c3382f5 100644 --- a/GPS/serviceworker.js +++ b/GPS/serviceworker.js @@ -1,4 +1,4 @@ -var cacheName = 'jd-jaxa-gps-cache-2022-10-28g'; +var cacheName = 'jd-jaxa-gps-cache-2022-10-28h'; var filesToCache = [ './', './index.html',