コード例 #1
0
        /// <summary>
        ///     Calculates geo-spatial distance between two locations.
        /// </summary>
        /// <param name="lat1">
        ///     The initial location latitude degrees.
        /// </param>
        /// <param name="lon1">
        ///     The initial location longitude degrees.
        /// </param>
        /// <param name="lat2">
        ///     The target location latitude degrees.
        /// </param>
        /// <param name="lon2">
        ///     The target location longitude degrees.
        /// </param>
        /// <param name="unit">
        ///     The desired distance measurement unit.
        /// </param>
        public static double GetDistance(
            double lat1,
            double lon1,
            double lat2,
            double lon2,
            GeoSpatialDistanceUnit unit = GeoSpatialDistanceUnit.NauticalMile)
        {
            double theta = lon1 - lon2;
            double dist  =
                Math.Sin(DegreesToRadians(lat1)) * Math.Sin(DegreesToRadians(lat2))
                + Math.Cos(DegreesToRadians(lat1)) * Math.Cos(DegreesToRadians(lat2)) * Math.Cos(DegreesToRadians(theta));

            dist = Math.Acos(dist);
            dist = RadiansToDegrees(dist);

            dist =
                dist *
                Constants.MinutesInDegree *
                Constants.StatuteMilesInNauticalMile;

            if (unit == GeoSpatialDistanceUnit.Kilometer)
            {
                dist = dist * Constants.KilometersInMile;
            }
            else if (unit == GeoSpatialDistanceUnit.NauticalMile)
            {
                dist = dist * Constants.NauticalMilesInMile;
            }

            return(dist);
        }
コード例 #2
0
 /// <summary>
 ///     Calculates geo-spatial distance between two locations.
 /// </summary>
 /// <param name="p1">The first point.</param>
 /// <param name="p2">The second point.</param>
 /// <param name="unit">
 ///     The desired distance measurement unit.
 /// </param>
 public static double GetDistance(
     GeoSpatialPoint p1,
     GeoSpatialPoint p2,
     GeoSpatialDistanceUnit unit = GeoSpatialDistanceUnit.NauticalMile)
 {
     return(GetDistance(
                p1.Latitude,
                p1.Longitude,
                p2.Latitude,
                p2.Longitude,
                unit));
 }