MySQL 查找给定 GPS 坐标查询指定距离内数据

| 选择喜欢的代码风格  

经纬度示意图:



经纬度示意图

MySQL GPS 查询周围距离数据示例:


下面是 MySQL 根据当前 GPS 的经纬度,查询周围 N 公里内建筑物具体示例,其中:

  • $lat 是纬度,$lng 是经度;
  • `gps` 是表中记录的 GPS 信息,在我的表里,格式是 23.13525,113.286297,所以用 SUBSTRING_INDEX 转换一下取出对应的值(如果你的不是,则不需要);
  • $radius 是期望的距离,5000 = 5 公里
  • 最后一个 6371 是按公里搜索,如果需要英里,则为 3959

SELECT `id`, `building_name`, 
(
    6371 * ACOS (
    COS ( RADIANS(".$lat.") )
    * COS( RADIANS( SUBSTRING_INDEX(`gps`, ',', 1) ) )
    * COS( RADIANS( SUBSTRING_INDEX(`gps`, ',', -1) ) - RADIANS(".$lng.") )
    + SIN ( RADIANS(".$lat.") )
    * SIN( RADIANS( SUBSTRING_INDEX(`gps`, ',', 1) ) )
    )
) AS distance  
FROM `table`
HAVING distance <= ".$radius." ORDER BY distance 
LIMIT 500

MySQL 只计算 2 个 GPS 两点之间的距离:


ST_Distance(g1, g2 [, unit])

返回 g1 和 g2 之间的距离,以几何参数的空间参考系统 (SRS) 的长度单位测量,如果指定,则以可选单位参数的单位测量。

此函数通过返回两个几何参数的组件的所有组合之间的最短距离来处理几何集合。

 

MySQL GPS 查询距离扩展阅读:




发表评论