Javascript 距离您的位置计算器的距离存在错误
我需要一个工具来测量一个固定点和我的位置之间的距离。我使用代码计算距离,并创建了从浏览器获取坐标的零件。 Get distance()返回NaN。怎么了Javascript 距离您的位置计算器的距离存在错误,javascript,html,coordinates,distance,nan,Javascript,Html,Coordinates,Distance,Nan,我需要一个工具来测量一个固定点和我的位置之间的距离。我使用代码计算距离,并创建了从浏览器获取坐标的零件。 Get distance()返回NaN。怎么了 变量选项={ EnableHighAccurance:正确, 超时:5000, 最大值:0 }; navigator.geolocation.getCurrentPosition(成功、错误、选项); 功能成功(pos){ var lat1=位置坐标纬度; var lon1=位置坐标经度; var lat2=50;//样本目标纬度 var
变量选项={
EnableHighAccurance:正确,
超时:5000,
最大值:0
};
navigator.geolocation.getCurrentPosition(成功、错误、选项);
功能成功(pos){
var lat1=位置坐标纬度;
var lon1=位置坐标经度;
var lat2=50;//样本目标纬度
var lon2=20;//样本目标经度
}
函数错误(err){
document.getElementById('demo').textContent=“错误。”;
}
//哈弗森公式
函数getDistance(lat1、lon1、lat2、lon2){
var R=6371;//地球半径,单位为km
var dLat=deg2rad(lat2-lat1);//下面是deg2rad
var-dLon=deg2rad(lon2-lon1);
变量a=
数学单(dLat/2)*数学单(dLat/2)+
数学cos(deg2rad(lat1))*数学cos(deg2rad(lat2))*
数学单(dLon/2)*数学单(dLon/2);
var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
var d=R*c;//以公里为单位的距离
返回d;
}
功能deg2rad(度){
返回度*(数学PI/180)
}
最终功能(getDistance、success、lat1、lon1、lat2、lon2、pos){
document.getElementById('demo').textContent=“距离:”+getDistance(lat1、lon1、lat2、lon2、success);
}
最终(距离);
存在多个问题:
- 是异步的。在调用
时,final
尚未执行success
- 您的
函数声明局部变量。它们不能在它之外使用success
- 使用单个参数调用
,而不提供final
,lat1
lat2
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
navigator.geolocation.getCurrentPosition(success, error, options);
function success(pos) {
var lat1 = pos.coords.latitude;
var lon1 = pos.coords.longitude;
var lat2 = 50; //Sample target latitude
var lon2 = 20; //Sample target longitude
final(getDistance, lat1, lon1, lat2, lon2); // <-- call it from here
}
function error(err) {
document.getElementById("demo").textContent = "Error.";
}
//haversine formula
function getDistance(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2 - lat1); // deg2rad below
var dLon = deg2rad(lon2 - lon1);
var a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(deg2rad(lat1)) *
Math.cos(deg2rad(lat2)) *
Math.sin(dLon / 2) *
Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI / 180);
}
function final(getDistance, lat1, lon1, lat2, lon2) {
document.getElementById("demo").textContent = "Distance: " + getDistance(lat1, lon1, lat2, lon2);
}
var选项={
EnableHighAccurance:正确,
超时:5000,
最大值:0
};
navigator.geolocation.getCurrentPosition(成功、错误、选项);
功能成功(pos){
var lat1=位置坐标纬度;
var lon1=位置坐标经度;
var lat2=50;//样本目标纬度
var lon2=20;//样本目标经度
final(getDistance,lat1,lon1,lat2,lon2);//您只使用单个参数调用final(getDistance);
,因此所有其余参数都未定义(success
,lat1
,lat2
,…)。并且您的success
函数什么也不做。它声明无法从外部访问的变量,并且对这些变量不做任何操作,不返回任何内容。如果我在其中放置其他参数,则会发生错误:未捕获引用错误:lat1未定义,因为它也未定义。您从未声明lat1
变量B在success
函数之外可以访问的le。还请注意。因此,在success
函数有机会执行之前,您的final
函数被调用。我认为您应该在阅读其他任何内容之前阅读此…: