javascript - 如何检查坐标是否在以公里为单位的半径范围内?

标签 javascript jquery haversine

给定一个带有坐标json:

var centerLat = 51.6000;
var centerLng = 12.8000;

var posts = [
  {
    name: 'PostA',
    latitude: '52.5167',
    longitude: '13.3833',
  },
  {
    name: 'PostB',
    latitude: '52.9667',
    longitude: '13.7167',
  },
  {
    name: 'PostC',
    latitude: '26.7767',
    longitude: '18.4567',
  }
];

我在 this link 上找到了 haversine 公式,如何检查是否从 获得了给定的 latlng 列表使用半正矢,json是否在5公里半径内?

function getDistanceFromLatLonInKm(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)
}

最佳答案

您可以执行此操作来过滤城市,您提供的数据相距太远,以获取结果中的任何内容,我已经移动了 centerLatcenterLng 我有最后记录了最近城市的数组。

function getDistanceFromLatLonInKm(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)
}

var centerLat = 52.5167;
var centerLng = 13.3933;

var posts = [{
    name: 'PostA',
    latitude: '52.5167',
    longitude: '13.3833',
  },
  {
    name: 'PostB',
    latitude: '52.9667',
    longitude: '13.7167',
  },
  {
    name: 'PostC',
    latitude: '26.7767',
    longitude: '18.4567',
  }
];

let closePosts = [];

posts.forEach((post) => {
  if (getDistanceFromLatLonInKm(centerLat, centerLng, post.latitude, post.longitude) < 5) {
    closePosts.push(post);
  }
});

console.log(closePosts)

关于javascript - 如何检查坐标是否在以公里为单位的半径范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953691/

相关文章:

javascript - router-link 无法在 Vuejs 中正确创建链接

javascript - 在 JavaScript 运行之前重绘 CSS(以显示进度指示器)

javascript - 是否可以在本地托管 Google 跟踪代码管理器脚本?

php - 计算起点半径内位置的最佳方法

javascript - 如何将三个文本区域的内容动态显示到一个公共(public)文本区域中?

javascript - 行上的链接和行内 anchor 上的链接

jquery - 置换时向 div 添加过渡

javascript - 如何在面板中进行更多竞争时水平滚动(已经使用 overflow-x : scroll )?

python - 将公里 (km) 转换为十进制

用于计算Haversine距离的MySQL函数