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
s(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).