地理位置找到最接近的坐标匹配

Posted

技术标签:

【中文标题】地理位置找到最接近的坐标匹配【英文标题】:Geolocation find closest coordinate match 【发布时间】:2017-11-15 13:43:35 【问题描述】:

我正在尝试创建一个 javascript 函数,该函数可以在坐标数组中找到最接近的坐标匹配。

我的坐标:33.9321, 18.8602 这些坐标会有所不同,但下面列出的 4 个位置将保持不变。

位置 1:33.9143、18.5701 位置 2:26.2041、28.0473 位置 3:25.7479、28.2293 位置 4:29.8587、31.0218

【问题讨论】:

看到这个问题:***.com/questions/21279559/… 我已经看了很长时间了,这绝对是我能找到的最接近的答案。但是,我似乎无法将在该示例中通过用户位置拉出的坐标更改为我想要使用的变量坐标 你看到我为你发布的示例代码了吗@Michiel 是的,谢谢。我没有让它工作,因为我在我们的 CRM 系统(Podio)中使用了 Javascript。例如,该系统不允许使用 console.log,所以我已经向他们记录了支持请求。只是等待他们的回应,希望我可以应用你的代码.. 【参考方案1】:

尝试运行我的代码,看看它是否对您有帮助。 如果浏览器不适合您,我已使用 var home 作为您的起点。 此外,我已将所有位置保存在 var points 中,因此您可以根据需要进行更改。

然后我只是查看每个点,它会在控制台中输出到参考点的距离。在你的情况下,这是第一点

var home = [ '33.9321', '18.8602' ];
var points = [ 
  [ '33.9143', '18.5701' ],
  [ '26.2041', '28.0473' ],
  [ '25.7479', '28.2293' ],
  [ '29.8587', '31.0218' ]
];
// loop over each point and output distance!
for( var i = 0; i < points.length; i++)
  var diff = twoPointsDiff(home[0],home[1],points[i][0],points[i][1]);
  console.log( 'distance from point' + (i+1) + ': ' + diff );

// helper fn to calc distance
function twoPointsDiff(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;

// helper fn to convert deg to radians
function deg2rad(deg) 
  return deg * (Math.PI/180)

【讨论】:

以上是关于地理位置找到最接近的坐标匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有直接连接列的两个数据框之间找到最接近的匹配行?

jQuery找到最接近对象的位置

二分查找法二分排序法,返回最接近的位置和实际位置

地理位置找到最近的地方[关闭]

怎样从地理坐标找到在百度地图上的位置

用于搜索地理坐标的数据库设计