2011-03-25 59 views
0

我有一个小问题点(haversine公式Q),寻找围绕指定的点的给定半径

我只是测试使用haversine公式为我的项目 在项目中,我指定点我想找到我提供的点的给定半径内的所有点。经过多次搜索,我尝试了这个沙丁烷公式查询。

SELECT service_id, (3959 * acos(cos(radians(51.500152)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-0.126236)) + sin(radians(51.500152)) * sin(radians(latitude)))) AS distance 
FROM sys_t_taxi_real_time_servce HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

我得到了伦敦的纬度和经度,然后如图中(的service_id,driver_id,journey_id,经度,纬度,DRIVER_STATUS)

4, 1, , 51.5034, -0.174751, '' 
5, 1, 2, 51.477106, -0.137329, '' 

所以对于结果集的顺序指定的数据但是我什么也没得到,没有行返回

然而,当我删除having子句我得到以下结果集(的service_id,距离)

5, 4655.154600 
4, 4658.309966 

我被困在这个问题上,无法前进,因为它和任何帮助将不胜感激。

查询和这种从下面的链接 http://code.google.com/apis/maps/articles/phpsqlsearch.html

而且没有人知道任何其他方法来解决同样的问题,我看到了MySQL的空间相关的东西获得,而是拿起这个,因为它用起来比较方便

问候, MilindaD

回答

0

我没有使用过您所描述的公式,但也许另一种方法解决您的问题:你提出了一个SQL查询,我想你至少使用MySQL的。您是否尝试使用数据库的空间功能?有一些叫做CONTAINS和WITHIN的函数。因此,您可以简单地从头开始在坐标周围创建一个缓冲区多边形,并在WHERE子句中包含CONTAINS函数。

如果你不限于MySQL,PostgreSQL,SQL Server或Oracle会给你更多。 PostgreSQL是开源的,其他的可以免费用于教育目的(如果我没记错的话)。

Regards, Martin