如何更改Haversine公式以计算固定点和​​用户位置之间的距离

时间:2016-05-23 12:55:04

标签: javascript

我正在尝试创建一个找到用户位置的应用,然后提醒他们距离固定位置的距离。我是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应该是用户的位置。

2 个答案:

答案 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 ;
}