MySQL经纬度距离查询

在实际需求中,会有按某一坐标点查询其指定范围内的符合条件的数据,数据库中记录了数据的经纬度,在给出某一点位之后,需要我们动态计算其与其它信息的距离,然后筛选。

一个实例SQL如下:

注意:其中point字段类型为 point(mysql 5.6.1 增加了对空间数据支持功能,新增了st_*相关函数,可计算两个地理坐标点的距离)

参数:经度112.5590670000000000

           纬度37.8021270000000000

(其它信息: AreaCode = '140213' distance<100000 结合实际情况进行追加)

SELECT *
  FROM (SELECT name,
               Code,
               Address,
               Longitude,
               latitude,
               CONVERT(st_distance(point(112.5590670000000000,
                                         37.8021270000000000),
                                   point) * 111195,
                       DECIMAL(10, 2)) as distance
          FROM (SELECT Name,
                       Address,
                       Longitude,
                       Latitude,
                       point(Longitude, Latitude) point
                  FROM lift
                 WHERE AreaCode = '140213'
                   AND Longitude != '0.0000000000000000') t) tb
 WHERE tb.distance < 1000000
 ORDER BY distance;

先是通过一个子SQL虚拟出point值,然后进行st_distance()函数计算距离
可参照https://blog.csdn.net/liyantianmin/article/details/83042726

你可能感兴趣的:(数据库)