目录
一、sql示例(由近到远)
二 、参数讲解
三、查询效果 - 距离(公里 / 千米)
四、查询效果 - 距离(米)
五、距离四舍五入保留后2位小数(java)
一、sql示例(由近到远)
SELECT s.*,(6378.137 * acos (
cos(radians( 传递的纬度值 )) *
cos(radians( s.字段经度 )) *
cos(radians( s.字段纬度 ) - radians( 传递的经度值 )) +
sin(radians( 传递的纬度值 )) *
sin(radians( s.字段经度 )))) AS distance
FROM
表名 s
ORDER BY
distance ASC
LIMIT 0,10;
二 、参数讲解
参数 / 函数 | 说明 |
---|---|
6378.137 | 地球赤道半径(单位为千米) |
acos | 标量数值函数,返回给定余弦的弧余弦(以弧度为单位) |
cos | 标量数值函数,返回角度的余弦值(以弧度为单位) |
sin | 标量数值函数,返回角度的正弦值(以弧度为单位) |
radians | 将度数转换为弧度的数值函数 |
三、查询效果 - 距离(公里 / 千米)
SELECT s.area_name,s.cyd_name,s.cyd_add,s.zb_n,s.zb_s,(6378.137 * acos (
cos(radians( 38.02212 )) *
cos(radians( s.zb_s )) *
cos(radians( s.zb_n ) - radians( 114.45780 )) +
sin(radians( 38.02212 )) *
sin(radians( s.zb_s )))) AS distance
FROM
cyd_info s
ORDER BY
distance
LIMIT 0,10;
四、查询效果 - 距离(米)
只需要将距离distance(公里、千米)转换一下就行(*1000)
SELECT s.area_name,s.cyd_name,s.cyd_add,s.zb_n,s.zb_s,(6378.137 * acos (
cos(radians( 38.02212 )) *
cos(radians( s.zb_s )) *
cos(radians( s.zb_n ) - radians( 114.45780 )) +
sin(radians( 38.02212 )) *
sin(radians( s.zb_s )))) * 1000 AS distance
FROM
cyd_info s
ORDER BY
distance
LIMIT 0,10;
五、距离四舍五入保留后2位小数(java)
Double format = Double.parseDouble(String.format("%.1f", distance));