Javascript 如何检查一个点是否靠近数组中的任何其他点

Javascript 如何检查一个点是否靠近数组中的任何其他点,javascript,google-maps,Javascript,Google Maps,我在这里找到了一个答案,根据某个半径确定两个点是否彼此靠近: 这不是我想要的确切答案,但是,因为我想重写此函数: function arePointsNear(checkPoint, centerPoint, km) { var ky = 40000 / 360; var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky; var dx = Math.abs(centerPoint.lng - checkPoint.lng)

我在这里找到了一个答案,根据某个半径确定两个点是否彼此靠近:

这不是我想要的确切答案,但是,因为我想重写此函数:

function arePointsNear(checkPoint, centerPoint, km) {
  var ky = 40000 / 360;
  var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
  var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
  var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
  return Math.sqrt(dx * dx + dy * dy) <= km;
}
函数arePointsNear(检查点、中心点、公里){
var ky=40000/360;
var kx=数学cos(数学PI*centerPoint.lat/180.0)*ky;
var dx=数学绝对值(centerPoint.lng-checkPoint.lng)*kx;
var dy=数学.abs(centerPoint.lat-checkPoint.lat)*ky;

return Math.sqrt(dx*dx+dy*dy)我认为解决方案很简单:只需将
return false
语句从for循环中取出。这样,只有当数组中没有足够接近的点时,才会返回
false
。(现在,如果第一个点不够接近,则返回false)

函数arePointsNear(检查点、中心点数组、km){
var ky=40000/360;
对于(变量i=0;i

函数arePointsNear(检查点、中心点、公里){
var ky=40000/360;
var kx=数学cos(数学PI*centerPoint.lat/180.0)*ky;
var dx=数学绝对值(centerPoint.lng-checkPoint.lng)*kx;
var dy=数学.abs(centerPoint.lat-checkPoint.lat)*ky;

返回Math.sqrt(dx*dx+dy*dy)不幸的是,它没有。我添加了一个JS小提琴的链接来帮助解释这里发生了什么。我建议,只使用谷歌的球面距离api,而不是滚动你自己的距离。我在你的小提琴上玩,你实现的距离函数是错误的。标记者说他们在2000公里之外,当他们被坐在彼此的上面。什么是“期望的结果?你为什么期望这个结果?如果我用几何体库中的
computeDistanceBetween
替换你的函数,它会像我期望的那样工作。
function arePointsNear(checkPoint, centerPointArray, km) {
    var ky = 40000 / 360;
    for (var i = 0; i < centerPointArray.length; i++) {
        var kx = Math.cos(Math.PI * centerPointArray[i].lat / 180.0) * ky;
        var dx = Math.abs(centerPointArray[i].lng - checkPoint.lng) * kx;
        var dy = Math.abs(centerPointArray[i].lat - checkPoint.lat) * ky;
        if (Math.sqrt(dx * dx + dy * dy) <= km) {
            return true;
        } else {
            return false;
        }
    }
}

var centerPointArray = [
 { lat: -42.734358, lng: 147.439506, info: "T" },
 { lat: -42.735258, lng: 147.438000, info: "V" },
 { lat: -43.999792, lng: 170.463352, info: "W" }
]
function arePointsNear(checkPoint, centerPointArray, km) {
    var ky = 40000 / 360;
    for (var i = 0; i < centerPointArray.length; i++) {
        var kx = Math.cos(Math.PI * centerPointArray[i].lat / 180.0) * ky;
        var dx = Math.abs(centerPointArray[i].lng - checkPoint.lng) * kx;
        var dy = Math.abs(centerPointArray[i].lat - checkPoint.lat) * ky;
        if (Math.sqrt(dx * dx + dy * dy) <= km)
            return true;
    }
    return false;
}