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