Package com.gestorrh.api.service
Class GeofencingService
java.lang.Object
com.gestorrh.api.service.GeofencingService
Servicio especializado en cálculos matemáticos para la gestión de geovallado (Geofencing).
Proporciona la lógica necesaria para determinar con precisión si una posición geográfica (latitud y longitud) reportada por un dispositivo móvil se encuentra dentro de un radio de acción permitido respecto a una ubicación de referencia preconfigurada (sede de la empresa).
Este servicio es puramente computacional y no realiza operaciones de persistencia o acceso a red.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate doublecalcularDistancia(double lat1, double lon1, double lat2, double lon2) Calcula la distancia lineal entre dos puntos sobre la superficie terrestre utilizando la fórmula del Haversine.booleanesFichajeValido(Double latEmpleado, Double lonEmpleado, Double latSede, Double lonSede, Integer radioValidez) Determina si un intento de fichaje es válido basándose en la ubicación GPS del empleado.
-
Field Details
-
RADIO_TIERRA_METROS
private static final int RADIO_TIERRA_METROS- See Also:
-
-
Constructor Details
-
GeofencingService
public GeofencingService()
-
-
Method Details
-
esFichajeValido
public boolean esFichajeValido(Double latEmpleado, Double lonEmpleado, Double latSede, Double lonSede, Integer radioValidez) Determina si un intento de fichaje es válido basándose en la ubicación GPS del empleado. Compara las coordenadas recibidas con las coordenadas de la sede de la empresa.- Parameters:
latEmpleado- Latitud reportada por el dispositivo del empleado.lonEmpleado- Longitud reportada por el dispositivo del empleado.latSede- Latitud configurada de la sede de la empresa.lonSede- Longitud configurada de la sede de la empresa.radioValidez- Radio máximo permitido en metros desde el punto de la sede.- Returns:
- boolean Verdadero si la distancia es menor o igual al radio de validez; falso en caso contrario o si falta algún dato.
-
calcularDistancia
private double calcularDistancia(double lat1, double lon1, double lat2, double lon2) Calcula la distancia lineal entre dos puntos sobre la superficie terrestre utilizando la fórmula del Haversine.Esta fórmula tiene en cuenta la naturaleza esférica de la Tierra (aproximada por el
RADIO_TIERRA_METROS) para obtener una distancia de arco de gran círculo de alta precisión, expresada en metros. El cálculo es robusto frente a distancias pequeñas, lo cual es ideal para validaciones de geovallado.Pasos del cálculo:
- Conversión de coordenadas (grados decimales) a radianes.
- Cálculo de las diferencias de latitud y longitud.
- Aplicación de la función seno cuadrado y coseno para obtener el coeficiente
a. - Obtención del ángulo central
cmedianteatan2. - Multiplicación por el radio terrestre para el resultado final.
- Parameters:
lat1- Latitud del punto de origen (punto A).lon1- Longitud del punto de origen (punto A).lat2- Latitud del punto de destino (punto B).lon2- Longitud del punto de destino (punto B).- Returns:
- double Distancia absoluta resultante expresada en metros.
-