代码
public static double calculateDistance(double lat1, double lon1, double alt1,
double lat2, double lon2, double alt2) {
double distanceOnEarth = calculateSurfaceDistance(lat1, lon1, lat2, lon2);
double heightDifference = Math.abs(alt1/1000 - alt2/1000);
double straightLineDist = Math.sqrt(Math.pow(distanceOnEarth, 2) + Math.pow(heightDifference, 2));
double v = new BigDecimal(straightLineDist).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return v;
}
private static final int EARTH_RADIUS = 6371;
private static double calculateSurfaceDistance(double lat1, double lon1,
double lat2, double lon2) {
double lat1Radians = Math.toRadians(lat1);
double lon1Radians = Math.toRadians(lon1);
double lat2Radians = Math.toRadians(lat2);
double lon2Radians = Math.toRadians(lon2);
double latDiff = lat2Radians - lat1Radians;
double lonDiff = lon2Radians - lon1Radians;
double a = Math.pow(Math.sin(latDiff / 2), 2)
+ Math.cos(lat1Radians) * Math.cos(lat2Radians)
* Math.pow(Math.sin(lonDiff / 2), 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS * c;
}