问题描述
//Tracker Functions
let tempCoords = [];
const homePosition = [];
function setHome() {
alert("Location Set");
document.getElementById("start").classList.remove('disabled');
navigator.geolocation.getCurrentPosition(
data => {
console.log(data);
homePosition.push([data.coords.latitude,data.coords.longitude]);
window.localStorage.setItem("homePosition",JSON.stringify(homePosition));
});
}
//lat long distance calculate
function arePointsNear(checkPoint,centerPoint,km) {
var ky = 40000 / 360;
var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
return Math.sqrt(dx * dx + dy * dy) <= km;
}
function start() {
if (Notification.permission === "granted") {
/* do our magic */
alert("We are Now tracking your location");
setInterval(() => {
navigator.geolocation.getCurrentPosition(
data => {
console.log(data);
tempCoords.push([data.coords.latitude,data.coords.longitude]);
window.localStorage.setItem('coords',JSON.stringify(tempCoords));
})
let homeLatLong = homePosition[0];
let currentlatLong = tempCoords[0];
var inside5km = arePointsNear({
lat: homeLatLong[0],lng: homeLatLong[1]
},{
lat: currentlatLong[0],lng: currentlatLong[1]
},0.1);
console.log(`Is this dumbass inside 5km?: ${inside5km}`);
if (!inside5km) {
outsideZoneNotif();
tempCoords.length = 0;
} else {
insideZoneNotif();
tempCoords.length = 0;
}
},15000);
} else if (Notification.permission === "blocked") {
alert("Please Enable Notifications!");
/* the user has prevIoUsly denied push. Can't reprompt. */
} else {
/* show a prompt to the user */
alert("Please Enable Notifications!");
}
}
同样,当位置更改时,arePointsNear
仍显示为true,直到再次运行,然后才意识到它是错误的
基本上,该错误发生在第一次循环时,或者第一次arePointsNear
读取为false时
并且需要第二次循环才能正常运行
如果需要更多信息,可以从here查看网站/ pwa。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)