问题是我正在尝试查询我的数据库以查找属于某个给定点半径范围内的所有点。 一种可能的方法是获取数据库中的所有数据,然后找到这些点与我感兴趣的点之间的距离,但我在该数据库中有36k记录,这意味着36k谷歌地图请求,我理解使用免费的API是不可能的。
我在想的是在我感兴趣的半径范围内得到所有可能的坐标,并检查数据库中的任何点是否与这些坐标相匹配。这甚至可能吗?还是高效的?我想我会得到很多分数,它会转化为一个非常长的for循环,但我想不出任何其他方式。
有什么建议吗?
修改
好的,我会在特定情况下提供更多详细信息,因为我忘了这样做,现在我想到了其他一些问题。
首先,我使用mongodb作为数据库。 其次,我的数据库具有UTM格式的位置(这应该仅适用于21区),而我正在使用Google Map的LatLng坐标处理客户端协调。我正在将UTM坐标转换为LatLng,以便在地图中实际使用它们。
在这种情况下,Haversine不会这样做吗?
答案 0 :(得分:1)
使用Haversine公式 - 如果数据库中有latitude
和longitude
,那么您可以在SQL查询中使用Haversine公式来查找特定距离内的记录。
本文将详细介绍它:http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/
答案 1 :(得分:0)
您的数据库中是否有纬度和经度作为单独的数字字段?您可以搜索数据库中位于正方形区域中的所有点,这些点的边长是您要查找的圆的半径的两倍。然后只需检查该子集中的距离。
select * from points where lat > my_latitude-radius and lat < my_latitude + radius and long > my_longitude-radius and long < my_longitude+radius;