高德 GCJ02 经纬度计算距离 java

567 阅读1分钟
/**
 * 计算两个坐标的距离
 *
 * @param lat1
 * @param lng1
 * @param lat2
 * @param lng2
 * @return 单位米
 */
public static double GetDistance(double lat1, double lng1, double lat2, double lng2) {
    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 * 1000;
    s = new BigDecimal(s).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
    return s;
}

private static double rad(double d) {
    return d * Math.PI / 180.0;
}

public static double calculateLineDistance(double latitude1, double longitude1, double latitude2, double longitude2) {
    try {
        double var2 = longitude1;
        double var4 = latitude1;
        double var6 = longitude2;
        double var8 = latitude2;
        var2 *= 0.01745329251994329D;
        var4 *= 0.01745329251994329D;
        var6 *= 0.01745329251994329D;
        var8 *= 0.01745329251994329D;
        double var10 = Math.sin(var2);
        double var12 = Math.sin(var4);
        double var14 = Math.cos(var2);
        double var16 = Math.cos(var4);
        double var18 = Math.sin(var6);
        double var20 = Math.sin(var8);
        double var22 = Math.cos(var6);
        double var24 = Math.cos(var8);
        double[] var28 = new double[3];
        double[] var29 = new double[3];
        var28[0] = var16 * var14;
        var28[1] = var16 * var10;
        var28[2] = var12;
        var29[0] = var24 * var22;
        var29[1] = var24 * var18;
        var29[2] = var20;
        return (Math.asin(Math.sqrt((var28[0] - var29[0]) * (var28[0] - var29[0]) + (var28[1] - var29[1]) * (var28[1] - var29[1]) + (var28[2] - var29[2]) * (var28[2] - var29[2])) / 2.0D) * 1.27420015798544E7D);
    } catch (Throwable var26) {
        var26.printStackTrace();
        return 0.0;
    }

}