Пример #1
0
 public double BearingTo(Position target)
 {
     double lat1 = this.Latitude.FracDegrees.DtoR();
     double long1 = this.Longitude.FracDegrees.DtoR();
     double lat2 = target.Latitude.FracDegrees.DtoR();
     double long2 = target.Longitude.FracDegrees.DtoR();
     double bearing = Math.Atan2(Math.Sin(long2 - long1) * Math.Cos(lat2), (Math.Cos(lat1) * Math.Sin(lat2)) - (Math.Sin(lat1) * Math.Cos(lat2) * Math.Cos(long2 - long1)));
     bearing = bearing.RtoD();
     bearing = (bearing + 360.0) % 360;
     return bearing;
 }
Пример #2
0
        private static double ArcInRadians(Position pos1, Position pos2)
        {
            double latArc = (pos1.Latitude.FracDegrees - pos2.Latitude.FracDegrees).DtoR();
            double longArc = (pos1.Longitude.FracDegrees - pos2.Longitude.FracDegrees).DtoR();

            double latH = Math.Sin(latArc * 0.5);
            latH *= latH;

            double longH = Math.Sin(longArc * 0.5);
            longH *= longH;

            double tmp = Math.Cos(pos1.Latitude.FracDegrees.DtoR()) * Math.Cos(pos2.Latitude.FracDegrees.DtoR());

            return 2.0 * Math.Asin(Math.Sqrt(latH + tmp * longH));
        }
Пример #3
0
 public static double DistanceInMeters(Position pos1, Position pos2)
 {
     return MEAN_EARTH_RADIUS_IN_METERS * ArcInRadians(pos1, pos2);
 }
Пример #4
0
 public double DistanceInMetersTo(Position target)
 {
     return GreatCircleArc.DistanceInMeters(this, target);
 }