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

我希望将HTML5地理定位function集成到网站中。 我的问题是在选定的列表中获取最近的城市/城镇。 该网站仅在一定数量的城镇和城市中得到支持/营销,因此我们的想法是浏览器找到他们的位置并选择他们最近的城镇或城市。 听起来很简单,但它是’找到最近的’,我可以让我的头脑。

我找到了一个帮助我完成从浏览器获取long / lat并将其转换为Town / City名称的过程的线程,但这无助于找到最近列出的那个: 使用Google Map API进行反向地理编码PHP使用Lat,Long坐标获取最近的位置

是否有任何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); } 

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

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

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

看一下这个问题的答案。

使用php mysql使用lat和long by radius搜索数据库