Programación

C#

Cálculo de distancia entre coordenadas

Última actualización: 29-10-2017 11:57
public class MathFx
    {
        /// <summary>
        /// Devuelve en radianas el valor recibido
        /// </summary>
        /// <param name=value">Valor a pasar a radianes</param>"
        /// <returns>Radianes</returns>
        public static double toRad(double value) { return value * Math.PI / 180; }

        /// <summary>
        /// Devuelve distancia en metros entre dos coordenadas
        /// </summary>
        /// <param name=lat1">Latitud de la primera coordenada</param>"
        /// <param name=lng1">Longitud de la primera coordenada</param>"
        /// <param name=lat2">Latitud de la segunda coordenada</param>"
        /// <param name=lng2">Longitud de la segunda coordenada</param>"
        /// <returns>Distancia en metros</returns>
        public static double distanceBetween(double lat1, double lng1, double lat2, double lng2)
        {
            double a;
            double b;
            double r = 6371 * 1000; // Radio de la tierra para obtener metros
            double dLat = toRad(lat2 - lat1);
            double dLng = toRad(lng2 - lng1);
            a = Math.Pow(Math.Sin(dLat / 2), 2)
                + (
                    Math.Pow(Math.Cos(toRad(lat2)), 2)
                        * Math.Pow(Math.Sin(dLng / 2), 2)
                    );
            b = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

            return r * b;
        }

    }