document.addEventListener("DOMContentLoaded", () => { var place = [ [38.894331,139.819547], // カフェテリア [38.893771,139.819431], // 事務室付近 [38.893128,139.819452], // 図書室前 [38.892443,139.819352], // ホール付近 [38.893585,139.818951], // 学生棟内1 [38.892972,139.818898], // 学生棟内2 [38.892258,139.819039], // ポイント1 [38.892799,139.819386], // ポイント2 [38.894185,139.819286] // ポイント3 ]; var center = [38.893445,139.819209]; var mymap = L.map("gpsmap").setView(center, 17); 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); /* L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> \ contributors' }).addTo(mymap); */ /* 目的地のマーカー */ L.marker(place[0]).addTo(mymap); L.marker(place[1]).addTo(mymap); L.marker(place[2]).addTo(mymap); L.marker(place[3]).addTo(mymap); L.marker(place[4]).addTo(mymap); L.marker(place[5]).addTo(mymap); var m1 = L.marker(place[6]).addTo(mymap); var m2 = L.marker(place[7]).addTo(mymap); var m3 = L.marker(place[8]).addTo(mymap); var pkey = Math.floor(Math.random()*6); var count = 3; document.getElementById("point").textContent = count; /* 移動するマーカー */ var gpsmarker = L.marker(center).addTo(mymap); gpsmarker.bindPopup("STARTおしてね").openPopup(); var nTrial = 100 var watchId = null; // 最初はnullにしておく function stopGPS() { // watchが動いていたら止めてnullにする console.log("watchId="+watchId); if (watchId != null) { // nullかどうかで比較しないとだめ(初期値0) navigator.geolocation.clearWatch(watchId); document.getElementById("title").textContent = "stop"; gpsmarker.setPopupContent("停めました"); } watchId = null; } function tryWatchGPS() { stopGPS(); // 二重で動かないように注意する watchId = navigator.geolocation.watchPosition( onSuccess, onError,{ maximumAge: 0, timeout: 3000, enableHighAccuracy: true}); document.getElementById("title").textContent = "START!!"; } function onSuccess(pos) { // GPS信号が取れたらここに来る var latlng = L.latLng([pos.coords.latitude, pos.coords.longitude]); mymap.panTo(latlng);// 地図の中心をそこにする console.log(latlng); gpsmarker.setLatLng(latlng).setPopupContent( "ここは lat="+latlng.lat+", lng="+latlng.lng+" です." ).openPopup(); if ((latlng.lat >= 38.8943 && latlng.lat <= 38.8944) && (latlng.lng >= 139.8195 && latlng.lng <= 139.8196)) { var pmarker = 0; } else if ((latlng.lat >= 38.8937 && latlng.lat <= 38.8938) && (latlng.lng >= 139.8194 && latlng.lng <= 139.8195)) { pmarker = 1; } else if ((latlng.lat >= 38.8931 && latlng.lat <= 38.8932) && (latlng.lng >= 139.8194 && latlng.lng <= 139.8195)) { pmarker = 2; } else if ((latlng.lat >= 38.8924 && latlng.lat <= 38.8925) && (latlng.lng >= 139.8193 && latlng.lng <= 139.8194)) { pmarker = 3; } else if ((latlng.lat >= 38.8935 && latlng.lat <= 38.8936) && (latlng.lng >= 139.8189 && latlng.lng <= 139.8190)) { pmarker = 4; } else if ((latlng.lat >= 38.8929 && latlng.lat <= 38.8930) && (latlng.lng >= 139.8188 && latlng.lng <= 139.8189)) { pmarker = 5; } else if ((latlng.lat >= 38.8922 && latlng.lat <= 38.8923) && (latlng.lng >= 139.8190 && latlng.lng <= 139.8191)) { pmarker = 6; } else if ((latlng.lat >= 38.8927 && latlng.lat <= 38.8928) && (latlng.lng >= 139.8193 && latlng.lng <= 139.8194)) { pmarker = 7; } else if ((latlng.lat >= 38.8941 && latlng.lat <= 38.8942) && (latlng.lng >= 139.8192 && latlng.lng <= 139.8193)) { pmarker = 8; } else { pmarker = 9; } if (pmarker == pkey) { document.getElementById("title").textContent = "鍵を発見!"; } else if (6 <= pmarker && pmarker <= 8 ) { count += 1; document.getElementById("title").textContent = "ポイントゲット"; document.getElementById("point").textContent = count; } else if (pmarker == 9) { document.getElementById("title").textContent = "さらにマーカーに近づいてください"; } else { count -= 1; document.getElementById("title").textContent = "ここにはない..."; document.getElementById("point").textContent = count; } } function onError(err) { restN = "あと"+(--nTrial)+"回試行します。"; gpsmarker.setPopupContent("捕捉失敗:"+restN).openPopup(); if (nTrial <= 0) { navigator.geolocation.clearWatch(watchId); } } // STARTボタンに開始を仕込む document.getElementById("start").addEventListener("click", tryWatchGPS); // STOPボタンに停止を仕込む document.getElementById("stop").addEventListener("click", stopGPS); }, false);