将新数据传递给变量给我错误

时间:2018-12-30 15:13:23

标签: javascript

我正在尝试建立一个简单的地理围栏。如果我添加经纬度和不带''的long,效果很好。因此,如果添加更新的变量,它似乎无法正确加载。很难解释,但是如果我像这样运行它的话

var distance;

var job_p_lat = 52.407580;
var job_p_lng = -1.486180;

var my_lat = 52.414493799999995;
var my_lng = -1.5574936;

distance = calculateDistance(my_lat, my_lng, job_p_lat, job_p_lng)
$("#distance").text(distance);

if (distance < .05) {
  $("#message").text("Yes, were inside .05 KM!!! :) A+")
} else if (distance > .05) {
  $("#message").text("No, not inside .05 KM :(")
}

但是,如果我像这样更改数据,似乎无法正确加载它?

var job_p_lat = '52.407580';
var job_p_lng = '-1.486180';

var my_lat = '52.414493799999995';
var my_lng = '-1.5574936';

距离计算器代码为:

function calculateDistance(lat1, lon1, lat2, lon2) {
  var R = 5550; // km
  var dLat = (lat2 - lat1).toRad();
  var dLon = (lon2 - lon1).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;
  return d;
}

Number.prototype.toRad = function() {
  return this * Math.PI / 180;
}

错误:

  

未捕获到的TypeError:lat1.toRad在inituccess(scriptnew3.1.js:175)上的calculateDistance(scriptnew3.1.js:442)上不是函数

真的似乎无法解决问题所在吗?

2 个答案:

答案 0 :(得分:0)

如果在字符串周围加上引号,它将被解释为字符串。如果要使用它作为int,则必须将其转换为int。

lat.parseInt()或lat.parseFloat()可以工作。

答案 1 :(得分:0)

是的,可能与:

function calculateDistance(lat1, lon1, lat2, lon2) {
  var R = 3958.7558657440545; // Radius of the earth in km
  var dLat = (lat2 - lat1) * Math.PI / 180;  // deg2rad below
  var dLon = (lon2 - lon1) * Math.PI / 180;
  var a = 
     0.5 - Math.cos(dLat)/2 + 
     Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * 
     (1 - Math.cos(dLon))/2;

  return R * 2 * Math.asin(Math.sqrt(a));
}