所以我有以下的javascript,我不知道为什么每当我尝试控制距离函数内的日志内容时我都会一直得到Nan。即使我只记录lat1,我也会得到NaN。但这只发生在getDistance函数内部,其他任何地方都可以正常工作。显然,功能的其余部分也不起作用,因为一切都返回NaN。
(function(){
var lat = 52.387388 ; //example lat
var lon = 4.646219 ; //example lon
function initCoords() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(createLatLong);
} else {
showError("Your browser does not support Geolocation!");
}
}
function createLatLong(position) {
var lat2 = position.coords.latitude;
var long2 = position.coords.longitude;
console.log(lat + "createLatLong");
getDistance();
}
function getDistance(lat, lon, lat2, long2) {
var R = 6371;
var dLat = (lat2-lat) * Math.PI / 180;
var dLon = (long2-lon) * Math.PI / 180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d; }
window.onload = initCoords;
})();
此处a fiddle
答案 0 :(得分:2)
您正在使用隐藏在函数外部声明的变量的参数声明“getDistance()”函数。在调用时传递参数:
getDistance(lat, lon, lat2, long2);
或者除去函数声明中的形式参数。
答案 1 :(得分:0)
由于浮点数的舍入,1-a可能是负值。
请替换行:
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
为:
var tan2 = 1-a;
if (tan2 < 0) {
tan2 = 0;
}
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(tan2));