【问题标题】:Mysql within distance querymysql内距离查询
【发布时间】:2011-09-28 07:27:43
【问题描述】:

选项

$lat = '25.7742658';
$lng = '-80.1936589';
$miles = 30;

查询

SELECT *, 
   ( 3959 * acos( cos( radians($lat) ) 
   * cos( radians( lat ) ) 
   * cos( radians( lng ) - radians($lng) ) 
   + sin( radians($lat) ) 
   * sin( radians( lat ) ) ) ) AS distance 
FROM locations 
HAVING distance < $miles 
ORDER BY distance 
LIMIT 0, 20

我有一个包含 4 列的数据库表:

  • 唯一标识
  • 城市名称
  • 纬度(lat)
  • 经度 (lng)

我正在使用顶部的查询来返回距离指定坐标在指定英里数内的位置。它似乎有效,但我不确定它有多准确。我很想知道查询是否良好,或者您是否有更好的解决方案。

【问题讨论】:

    标签: php mysql sql geospatial spatial


    【解决方案1】:

    这看起来像是正确的大圆距离查询。

    您对 wrt 准确性有什么顾虑?

    【讨论】:

    • 感谢您的确认!我只是担心有更好的解决方案。我阅读了一些关于 MYSQL 空间扩展的信息,但不确定是否应该实现它。
    • 如果这是你正在做的事情,那么扩展是矫枉过正的。你应该很高兴:)
    • 您使用的公式是球面余弦定律。从en.wikipedia.org/wiki/Spherical_law_of_cosines 查看。大圆距离的另一个公式是Haversine 公式。从en.wikipedia.org/wiki/Haversine_formula 中查看。这两个公式都假设一个球形地球。余弦定律计算速度更快。你在正确的轨道上。
    • 否则你应该考虑的是你想要处理几英里的距离,球体的公式很好,对于更长的距离,你会是一个更复杂的公式,但是使用这个权利的距离。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多