PHP / MySQL - 从实际 gps 坐标查找半径 500 米内的所有项目

And*_*rit 2 php mysql

我正在根据 GPS 坐标对同一位置的价格进行一些比较。所以例如我有一个带坐标的项目:

lat: 45.815005 
lng: 15.978501
Run Code Online (Sandbox Code Playgroud)

我想在我的 MySQL 数据库中搜索在那个地方周围 500 米的每个项目。(它不需要是圆形的,只需 500 米,双向X500 米Y)。Latlng存储为单独的列类型float(10,6)在我的数据库中

我知道计算精确的 lng 和 lat 并不容易,但如果我错过了每个站点几米,我就没事。

这是一个非常复杂的问题,但我会感谢任何能开启我开始的建议。

Jac*_*001 6

考虑到半正弦公式,计算两个坐标之间的距离实际上并不困难。

SELECT 
  -- stuff here
  , ( 6371000 * acos( cos( radians(45.815005) ) * cos( radians( stuff.lat ) ) * cos( radians( stuff.lng ) - radians(15.978501) ) + sin( radians(45.815005) ) * sin(radians(stuff.lat)) ) ) AS distance 
FROM 
  stuff
HAVING 
  distance < 500
Run Code Online (Sandbox Code Playgroud)

参考答案

对原始答案的必要更改:

  1. 原始答案中提供的常数提供了英里或公里的值。我已经改变了这里的常数来使用仪表。

  2. 常量已更改为使用您的坐标。您可能希望进一步调整查询以生成这些参数而不是常量。

  3. having表达变化不大,以反映您的约500米的欲望。同样,这可能是您想要参数化的内容。