es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el número de usuarios cuya latitud y longitud se encuentra dentro de un radio de 15 millas del usuario conectado.

Permítanme explicar mi caso:

En primer lugar, el usuario iniciará sesión.
Ahora en la base de datos, estoy guardando la latitud y longitud para ese usuario que ha iniciado sesión.

Ahora quiero obtener el recuento de todos los demás usuarios cuya latitud y longitud estén dentro de 15 millas de ese usuario que ha iniciado sesión.

He intentado con algunas funciones predeterminadas de .net, pero no funcionaron.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Propuesta de solución

    Para el caso dado, podemos utilizar la fórmula Haversine para calcular la distancia entre el usuario que ha iniciado sesión y todos los demás usuarios en función de su latitud y longitud. Si la distancia calculada es menor o igual a 15 millas, podemos considerar a ese usuario como dentro de las 15 millas del usuario que ha iniciado sesión.

    Aquí hay un código de muestra en C # que se puede utilizar para lograr esto:

    // Suponiendo que la latitud y longitud del usuario actual se almacenan en las variables currentUserLatitude y currentUserLongitude respectivamente
    
    // Primero, necesitamos buscar la latitud y longitud de todos los usuarios en la base de datos
    var allUsers = dbContext.Users.ToList(); // suponiendo que estamos usando Entity Framework
    
    // Luego, podemos utilizar LINQ para filtrar los usuarios que se encuentran dentro de las 15 millas del usuario actual
    var usersWithin15Miles = allUsers
        .Where(user => CalculateDistance(currentUserLatitude, currentUserLongitude, user.Latitude, user.Longitude) <= 15)
        .ToList();
    
    // Finalmente, podemos obtener el recuento de usuarios que están dentro de las 15 millas
    var countUsersWithin15Miles = usersWithin15Miles.Count;
    
    // El siguiente método implementa la fórmula Haversine para calcular la distancia entre dos puntos en la superficie de la Tierra en función de su latitud y longitud
    public static double CalculateDistance(double lat1, double lon1, double lat2, double lon2)
    {
        var R = 6371; // radio de la Tierra en kilómetros
        var dLat = ToRadians(lat2-lat1);
        var dLon = ToRadians(lon2-lon1);
        var a = Math.Sin(dLat/2) * Math.Sin(dLat/2) + Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) * Math.Sin(dLon/2) * Math.Sin(dLon/2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a));
        var distance = R * c;
        return distance * 0.621371; // convertir a millas
    }
    
    public static double ToRadians(double deg)
    {
        return deg * (Math.PI/180);
    }
    

    Esta solución utiliza LINQ para filtrar a los usuarios dentro de la distancia dada y utiliza el método CalculateDistance para calcular la distancia entre dos puntos en la superficie de la Tierra en función de su latitud y longitud utilizando la fórmula Haversine. La salida es un recuento de usuarios dentro de 15 millas del usuario que ha iniciado sesión.

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta.

Comments are closed.