我正在尝试创建一个找到用户位置的应用,然后提醒他们距离固定位置的距离。我是JavaScript的新手,我在尝试弄清楚方面遇到了很多麻烦。我无法弄清楚的部分是如何获取变量lat1和lon1的用户位置。我已经研究过如何找出用户的经度和纬度,但我能找到的只是关于getCurrentPosition()命令的东西。唯一的问题是我不希望找到它们时返回的值。他们无论如何我能以某种方式实现这一目标吗?我的代码如下:
var lat2 = 45.843295;
var lon2 = -87.020821; // 2 is location
var lat1 =
var lon1 =
var R = 3963.1676; // radius in mi
var x1 = lat2-lat1;
var dLat = x1.toRad();
var x2 = lon2-lon1;
var dLon = x2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
var TellMe= function(){
alert("You are"+" "+d+" "+"miles away from our school")
};
lon1和lat1应该是用户的位置。
答案 0 :(得分:1)
一旦navigator.getCurrentPosition()
成功返回,您想要的是在回调函数中进行计算。此外,toRad()
函数未定义,因此您需要先定义它。
if (typeof(Number.prototype.toRad) === "undefined") {
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
}
navigator.geolocation.getCurrentPosition(function(position){
calcPosition(position.coords.latitude,position.coords.longitude)
});
function calcPosition(lat1, lon1){
var lat2 = 45.843295;
var lon2 = -87.020821; // 2 is location
var R = 3963.1676; // radius in mi
var x1 = lat2-lat1;
var dLat = x1.toRad();
var x2 = lon2-lon1;
var dLon = x2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
alert("You are"+" "+d+" "+"miles away from our school")
}
Here是一个小提琴。
编辑:Here是对公式的性能优化版本的答案。
答案 1 :(得分:0)
您是否尝试过使用HTML5 Geolocation? : 以下是您可以获取位置的简单Javascript:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showLocation);
} else {
x.innerHTML = "Geolocation is not supported.";
}
}
function showLocation(position) {
var lat1 = position.coords.latitude;
var lon1 = position.coords.longitude;
x.innerHTML = "Latitude: " + lat1 +
"<br>Longitude: " + lon1 ;
}