0

我希望将 HTML5 地理定位功能集成到网站中。我遇到的问题是在所选列表中获取最近的城市/城镇。该站点仅在一定数量的城镇和引用中受支持/营销,因此其想法是浏览器找到他们的位置并选择他们最近的城镇或城市。听起来很简单,但它是我可以理解的“找到最近的”。

我找到了一个线程,它帮助我完成了从浏览器获取 long/lat 并将其转换为城镇/城市名称的过程,但这无助于找到最近列出的名称:Reverse Geocoding With Google Map API And PHP使用纬度,经度坐标获取最近的位置

是否有任何 API(最好在 Google 中)可以找到最近的列出位置?我看了看,找不到任何一种。

4

3 回答 3

4

您可以使用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);
}
于 2013-01-01T18:51:11.877 回答
0

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

看看这个问题的公认答案。

使用 php mysql 按半径搜索经纬度数据库

于 2013-01-01T17:12:48.453 回答
0

最简单的方法是使用半正弦公式球面几何库的 computeDistanceBetween 方法计算从用户位置到所有城市的“乌鸦飞翔”距离,然后选择最小的那个。

如果您的位置少于 100 个,则可以使用距离矩阵来确定最短的行驶距离,然后选择结果最短的城镇。

于 2013-01-01T15:52:30.250 回答