Esempio n. 1
0
        /// <summary>
        /// Calculates the distance between 2 GPS coordinates using Haversine formula (http://en.wikipedia.org/wiki/Haversine_formula)
        /// This method is overloaded and this version uses string as input for GPS coordinates
        /// Note: This calculated method ignores the change in elevation
        /// </summary>
        /// <param name="lat1S">Latitude of first GPS coordinate as a string</param>
        /// <param name="lon1S">Longitude of first GPS coordinate as a string</param>
        /// <param name="lat2S">Latitude of second GPS coordinate as a string</param>
        /// <param name="lon2S">Longitude of second GPS coordinate as a string</param>
        /// <param name="distanceUnit">Measurement unit km/Miles</param>
        /// <returns>Calculated distance</returns>
        public static Double getCoordDistance(String lat1S, String lon1S, String lat2S, String lon2S, calculatorDistanceUnits distanceUnit)
        {
            Double lat1 = Double.Parse(lat1S, CultureInfo.InvariantCulture);
            Double lon1 = Double.Parse(lon1S, CultureInfo.InvariantCulture);

            Double lat2 = Double.Parse(lat2S, CultureInfo.InvariantCulture);
            Double lon2 = Double.Parse(lon2S, CultureInfo.InvariantCulture);

            return getCoordDistance(lat1, lon1, lat2, lon2, distanceUnit);
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates the distance between 2 GPS coordinates using Haversine formula (http://en.wikipedia.org/wiki/Haversine_formula)
        /// This method is overloaded and this version uses Double as input for GPS coordinates
        /// Note: This calculated method ignores the change in elevation
        /// </summary>
        /// <param name="lat1">Latitude of first GPS coordinate as Double</param>
        /// <param name="lon1">Longitude of first GPS coordinate as Double</param>
        /// <param name="lat2">Latitude of second GPS coordinate as Double</param>
        /// <param name="lon2">Longitude of second GPS coordinate as Double</param>
        /// <param name="distanceUnit">Measurement unit km/Miles</param>
        /// <returns>Calculated distance</returns>
        public static Double getCoordDistance(Double lat1, Double lon1, Double lat2, Double lon2, calculatorDistanceUnits distanceUnit)
        {
            /*
             * dlon = lon2 - lon1
             * dlat = lat2 - lat1
             * a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
             * c = 2 * atan2(sqrt(a), sqrt(1-a))
             * d = R * c
             */

            Double dist = 0;
            Double radius;

            // Set the radius to either km or Miles
            if (calculatorDistanceUnits.Kilometers == distanceUnit)
                radius = earthRadiusInKM;
            else
                radius = earthRadiusInMiles;

            // Step-1: dlon = lon2 - lon1
            Double dlon = toRadian((Double)(lon2 - lon1)); //Decimal.Subtract(lon2, lon1);

            // Step-2: dlat = lat2 - lat1
            Double dlat = toRadian((Double)(lat2 - lat1)); //Decimal.Subtract(lon2, lon1);

            // Step-3: a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
            Double a = Math.Pow(Math.Sin(dlat / 2), 2) + Math.Pow(Math.Sin(dlon / 2), 2) * Math.Cos(toRadian(lat1)) * Math.Cos(toRadian(lat2));

            // Step-4: c = 2 * atan2(sqrt(a), sqrt(1-a))
            Double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

            // Step-5: d = R * C
            dist = radius * c;

            return dist;
        }