【问题标题】:Finding the points around a given radius of a specified point (haversine formula q)查找指定点的给定半径周围的点(haversine formula q)
【发布时间】:2011-03-25 09:33:36
【问题描述】:

我有一个小问题,

我只是在我的项目中测试使用半正弦公式 在项目中,我指定了一个点,我想找到我提供的点的给定半径内的所有点。经过大量谷歌搜索后,我尝试了这个 hasrsine 公式查询。

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, longitude, latitude, driver_status)的顺序指定数据

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

所以对于结果集,但是我什么也没得到,没有返回行

但是,当我删除 having 子句时,我得到以下结果集 (service_id, distance)

5, 4655.154600
4, 4658.309966

我真的被这个问题困住了,因此无法继续前进,我们将不胜感激。

查询等是从以下链接获得的 http://code.google.com/apis/maps/articles/phpsqlsearch.html

另外有没有人知道解决同样问题的其他方法,我看到了mysql空间相关的东西,但选择了这个,因为它更容易使用

问候, 米琳达

【问题讨论】:

    标签: mysql geometry geospatial distance


    【解决方案1】:

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

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

    问候, 马丁

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2016-07-21
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2010-12-03
      • 2023-03-26
      • 2011-04-25
      相关资源
      最近更新 更多