MySQL经纬度距离查询

本文介绍了一种在MySQL中实现的空间查询方法,通过使用st_distance()函数计算地理坐标点之间的距离,筛选出特定范围内符合条件的数据。具体操作包括创建point类型字段,运用子查询构造虚拟point值,并设置距离阈值进行过滤。
摘要由CSDN通过智能技术生成

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

一个实例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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值