假设我有一张包含城市列表的表格:
city | latitude | longitude
---------------------------
XX | 34.800 | 48.550
假设我有一个用户的大致位置(纬度/经度),我如何找到最近的城市?也就是说,如何找到纬度和经度最接近用户纬度/经度的城市?
答案 0 :(得分:2)
结帐
Creating a Store Locator with PHP, MySQL & Google Maps
此处提供的计算方法独立于Google地图,您应该可以从那里获得完整的算法。
只需要警惕不同的映射方法和产生的不同坐标。根据坐标使用的映射,您可能需要调整算法的参数。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用geospatial extensions for MySQL或
下面的公式将找到两点之间的海里距离。
3600 * acos(sin(latitude2_rads)) * sin(latitude1_rads)+ cos(latitude2_rads) * cos(latitude1_rads) * cos(longitude1_rads - longitude2_rads))
所以你可以把它连接成一个选择如下(在下面-7是必需的lat,-14是必需的lon)
假设纬度/经度字段为度:
select * FROM NDB as c1
order by acos(sin(radians(-7))
* sin(radians(latitude)) + cos(radians(-7))
* cos(radians(latitude))
* cos(radians(longitude) - radians(-14)))
limit 0,1
对于大型数据集,这可能效率不高,我只是针对一个包含22,706条记录的表运行它,花了0.163秒。
如果性能是一个问题,那么最好预先计算固定数据中所有点的距离,然后使用它而不是在SQL中计算它。