package com.ruoyi.common.utils;
import com.github.pagehelper.util.StringUtil;
import com.ruoyi.common.core.controller.BaseController;
/**
* 获取地址类
*
* @author ruoyi
*/
public class LocationUtils {
/**
* 赤道半径
*/
private static double EARTH_RADIUS = 6378.137;
private static BaseController log;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* Description : 通过经纬度获取距离(单位:公里) Group :
*
* @param originLon 出发点经度
* @param originLat 出发点纬度
* @param destinationLon 目的地经度
* @param destinationLat 目的地纬度
* @return double
*/
public static double getDistance(String originLon, String originLat, String destinationLon, String destinationLat) {
if (StringUtil.isEmpty(originLon)) {
log.error("出发点 经度不可以为空!");
return 0;
}
if (StringUtil.isEmpty(originLat)) {
log.error("出发点 纬度不可以为空!");
return 0;
}
if (StringUtil.isEmpty(destinationLon)) {
log.error("目的地 经度不可以为空!");
return 0;
}
if (StringUtil.isEmpty(destinationLat)) {
log.error("目的地 纬度不可以为空!");
return 0;
}
double radLat1 = rad(Double.parseDouble(originLat));
double radLat2 = rad(Double.parseDouble(destinationLat));
double a = radLat1 - radLat2;
double b = rad(Double.parseDouble(originLon)) - rad(Double.parseDouble(destinationLon));
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 * 100d) / 100d;
s = s * 1000 / 1000;
return s;
}
public static void main(String[] args) {
double distance = getDistance("115.45634", "37.74538", "115.12878", "37.637437");
System.out.println(distance);
}
}
通过经纬度计算两地距离
最新推荐文章于 2024-08-06 10:22:43 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)