查询MySQL中的经度和纬度

Gen*_*nik 24 mysql geolocation geospatial geo

在询问特定的代码示例之前,我只想询问是否可以进行类似这样的伪代码的查询:

从表格中选择项目,其中lat/lon = - 在某个纬度/经度点的x英里 -

那可行吗?或者我是否必须跳过一些箍?任何可以推荐的好方法都会很棒!

dar*_*zig 55

你应该搜索Haversine公式,但一个好的开始可能是:

引用第一个网址:

这是SQL语句,它将找到距离37,-122坐标25英里半径范围内最近的20个位置.它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于25的行,按距离对整个查询进行排序,并将其限制为20个结果.要以公里而不是里程搜索,请将3959替换为6371.

SELECT
    id,
    ( 3959
      * acos( cos( radians(37) )
              * cos(  radians( lat )   )
              * cos(  radians( lng ) - radians(-122) )
            + sin( radians(37) )
              * sin( radians( lat ) )
            )
    )
    AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说没有返回任何计算的距离,整个时间只是"NULL". (2认同)

The*_*ve0 7

我强烈建议使用SpatiaLite或PostGIS进行此类操作.它们内置了您尝试手动编写的功能.他们也对MySQL中不存在的空间数据有适当的支持.

不完全是MySQL的解决方案,但如果你想在将来继续做空间请求,这是一个更好的解决方案.