Implementación de la fórmula Haversine en Java

El algoritmo Haversine sirve para calcular la distancia entre dos puntos de los que conocemos su longitud y latitud. A continuación incluimos un método Java que implementa esta fórmula devolviendo la distancia en metros:

    private static int calculateDistanceByHaversineFormula(double lon1, double lat1,
double lon2, double lat2) {

double earthRadius = 6371; // km

lat1 = Math.toRadians(lat1);
lon1 = Math.toRadians(lon1);
lat2 = Math.toRadians(lat2);
lon2 = Math.toRadians(lon2);

double dlon = (lon2 – lon1);
double dlat = (lat2 – lat1);

double sinlat = Math.sin(dlat / 2);
double sinlon = Math.sin(dlon / 2);

double a = (sinlat * sinlat) + Math.cos(lat1)*Math.cos(lat2)*(sinlon*sinlon);
double c = 2 * Math.asin (Math.min(1.0, Math.sqrt(a)));

double distanceInMeters = earthRadius * c * 1000;

return (int)distanceInMeters;

}

En nuestro caso ha sido utilizado para evaluar la distancia a un establecimiento determinado desde nuestra posición actual (calculada mediante GPS).