Esempio n. 1
0
        public double GetBearing(GeoMapPoint point)
        {
            var dLon = (point.Longitude - Longitude).ToRad();

            var y = Math.Sin(dLon) * Math.Cos(point.Latitude.ToRad());
            var x = Math.Cos(Latitude.ToRad()) * Math.Sin(point.Latitude.ToRad()) -
                    Math.Sin(Latitude.ToRad()) * Math.Cos(point.Latitude.ToRad()) * Math.Cos(dLon);

            return(Math.Atan2(y, x).ToBearing());
        }
Esempio n. 2
0
        public double GetDistanceInKm(GeoMapPoint point)
        {
            var dLat = (point.Latitude - Latitude).ToRad();
            var dLon = (point.Longitude - Longitude).ToRad();

            var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
                    Math.Cos(Latitude.ToRad()) * Math.Cos(point.Latitude.ToRad()) *
                    Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
            var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

            return(EarthRadius * c);
        }
Esempio n. 3
0
        public string GetCardinalPoint(GeoMapPoint point)
        {
            var bearing = GetBearing(point);

            if (bearing >= 0 && bearing < 22.5)
            {
                return("N");
            }
            if (bearing >= 22.5 && bearing < 67.5)
            {
                return("NE");
            }
            if (bearing >= 67.5 && bearing < 112.5)
            {
                return("E");
            }
            if (bearing >= 112.5 && bearing < 157.5)
            {
                return("SE");
            }
            if (bearing >= 157.5 && bearing < 202.5)
            {
                return("S");
            }
            if (bearing >= 202.5 && bearing < 247.5)
            {
                return("SW");
            }
            if (bearing >= 247.5 && bearing < 292.5)
            {
                return("W");
            }
            if (bearing >= 292.5 && bearing < 337.5)
            {
                return("NW");
            }
            if (bearing >= 337.5 && bearing < 360.1)
            {
                return("N");
            }
            return(string.Empty);
        }
Esempio n. 4
0
 /// <summary>
 /// Gets the distance in miles between two GeoMapPoint
 /// </summary>
 /// <param name="point">GeoMapPoint to calculate the distance</param>
 /// <returns>Distance between both map points</returns>
 public double GetDistanceInMiles(GeoMapPoint point) => GetDistanceInKm(point) * 0.62;