MySQL距离查询

5

选项

$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)

我正在使用上面的查询语句来返回距离指定坐标一定英里数内的位置。它似乎可以工作,但我不确定它的准确性。我想知道这个查询是否好用,或者你是否有更好的解决方案。

1个回答

3

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

您关注精度方面的问题吗?


谢谢确认!我只是担心有更好的解决方案。我读了一些关于MYSQL空间扩展的内容,不确定是否应该使用它来代替。 - CyberJunkie
如果你只是做这个,那么扩展就过度了。你应该没问题了 :) - Randy
1
你正在使用的公式是球面余弦定理。请从http://en.wikipedia.org/wiki/Spherical_law_of_cosines 查看。另一个计算大圆距离的公式是Haversine公式。请从http://en.wikipedia.org/wiki/Haversine_formula查看。这两个公式都假设地球是一个球体。余弦定理计算速度更快。你走在正确的道路上。 - O.C.
另外你需要考虑的是,如果你想处理几英里以内的距离,球体公式是很好的选择;但对于更长的距离,你需要使用更复杂的公式,但要确保使用正确的距离。 - phipex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接