mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离
精算經(jīng)緯度(qx,qy)點(diǎn)附近的停車場(chǎng),根據(jù)表現(xiàn)有的經(jīng)緯度計(jì)算:sql如下
select
test,
round(
6378.138 * 2 * asin(
sqrt(
pow(
sin(
(#{qy} * pi() / 180 - Y * pi() / 180) / 2
) ,
2
) + cos(#{qy} * pi() / 180) * cos(Y * pi() / 180) * pow(
sin(
(#{qx} * pi() / 180 - X * pi() / 180) / 2
) ,
2
)
)
) * 1000
) AS PARK_DISTANCE? //戶和停車場(chǎng)的距離
from tb_bis_merchant_park
計(jì)算兩點(diǎn)經(jīng)緯度的距離:
//地球平均半徑
private static final double EARTH_RADIUS = 6378137;
//把經(jīng)緯度轉(zhuǎn)為度(°)
private static double rad(double d){
return d * Math.PI / 180.0;
}
/**
* 根據(jù)兩點(diǎn)間經(jīng)緯度坐標(biāo)(double值),計(jì)算兩點(diǎn)間距離,單位為米
* @param lng1
* @param lat1
* @param lng2
* @param lat2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2){
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(
Math.sqrt(
Math.pow(Math.sin(a/2),2)
+ Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)
)
);
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
/**
* test
* @param args
*/
public static void main(String[] args){
double distance = getDistance(113.865074,22.55441574,114.065269,22.544298);
System.out.println("Distance is:"+ new BigDecimal(distance).movePointLeft(3).setScale(1, BigDecimal.ROUND_HALF_UP));
}
總結(jié)
以上是生活随笔為你收集整理的mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zipoutputstream压缩文件响
- 下一篇: mysql out返回结果_在MySQL