根据经纬度计算两点之间的距离

/**
 * 计算两点之间距离
 *
 * @param start
 * @param end
 * @return 千米
 */
public static double getDistance(LatLng start, LatLng end) {
    double lat1 = (Math.PI / 180) * Double.parseDouble(start.getLat());
    double lat2 = (Math.PI / 180) * Double.parseDouble(end.getLat());
    double lon1 = (Math.PI / 180) * Double.parseDouble(start.getLng());
    double lon2 = (Math.PI / 180) * Double.parseDouble(end.getLng());

    //地球半径  
    double R = 6378.137;

    double a = doubleDecimal((lat1 - lat2) * 1000);//经度的差值

    double b = doubleDecimal((lon1 - lon2) * 1000);//纬度的差值

    double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2), 2) + Math.cos(lat1) * Math.cos(lat2) *       Math.pow(Math.sin(b/2),2)));

    double s1 = s * R;
    double s2 = doubleDecimal(s1 / 1000); // 千米
    return s2;
}

/**
 * 保留两位小数
 */
public static double doubleDecimal(double f) {
    BigDecimal bg = new BigDecimal(f);
    return bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值