从已知位置查找最近的列出(数组?)城市


Finding nearest listed (array?) city from known location

我希望将HTML5地理定位功能集成到网站中。我遇到的问题是在选择列表中获得最近的城市/城镇。该网站只在一定数量的城镇和城市中支持/销售,所以这个想法是浏览器找到他们的位置并选择离他们最近的城镇或城市。听起来很简单,但这是"找到最近的",我可以得到我的头。

我发现了一个线程,帮助我通过从浏览器获得长/lat的过程,并把它变成他们的城镇/城市名称,但这并没有帮助找到最近的列表之一:反向地理编码与谷歌地图API和PHP获得最近的位置使用lat,长坐标

是否有任何api(最好在谷歌),将找到最近的上市位置?

您可以使用Haversine公式找到最近的城市。以下函数用于计算定位坐标与数组

之间的距离
function deg2rad(degrees){
radians = degrees * (Math.PI/180);
return radians;
}
function Haversine(lat1,lon1,lat2,lon2) {
  deltaLat = lat2 - lat1 ;
  deltaLon = lon2 - lon1 ;
  earthRadius = 3959; // in miles 6371 in meters.
  alpha    = deltaLat/2;
  beta     = deltaLon/2;
  a        = Math.sin(deg2rad(alpha)) * Math.sin(deg2rad(alpha)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(deg2rad(beta)) * Math.sin(deg2rad(beta)) ;
  c        = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  distance =  earthRadius * c;
  return distance.toFixed(2);
}

最简单的方法是使用haversine公式或球面几何库的computeDistanceBetween方法计算从用户位置到所有城市的"as The crow flies"距离,并选择最小的。

如果您有少于100个地点,您可以使用距离矩阵确定最短的驾驶距离,然后选择具有最短结果的城镇。

我认为最简单的解决方案是将每个城镇或城市的最新坐标存储在数据库中,然后围绕用户位置进行基于半径的搜索,并产生最接近的结果。

看一下对这个问题的公认答案。

mysql