Ejemplo n.º 1
0
 private static ICoordinate GetV(ICoordinate p1, ICoordinate p2, double disNm)
 {
     return(EarthGeometry.GetV(
                p1.ToVector3D(),
                p2.ToVector3D(),
                disNm / EarthRadiusNm).ToLatLon());
 }
Ejemplo n.º 2
0
        // In the waypoint part, each line contain a waypoint and a true heading.
        // E.g.
        // ...
        // ... WPT0 ... heading0
        // ... WPT1 ... heading1
        //
        // heading0 is the direct heading from WPT0 to WPT1, at WPT0.

        public static string GetExportText(ExportInput input)
        {
            var route = input.Route;

            if (route.Count < 2)
            {
                throw new ArgumentException();
            }
            var linesPart1 = List(
                route.FirstWaypoint.ID.Substring(0, 4),
                route.LastWaypoint.ID.Substring(0, 4),
                route.FirstWaypoint.ID.Substring(4)
                ).Concat(Repeat("", 7))
                             .Concat(List("-1", "", "", "", "", "0"));

            var linesPart2 = new List <string>();
            var prev       = route.First;
            var current    = prev.Next;

            while (current != route.Last)
            {
                var  airway   = prev.Value.AirwayToNext.Airway;
                bool isDirect = (prev == route.First) || (airway == "DCT");

                var w       = current.Value.Waypoint;
                var heading = EarthGeometry.TrueHeading(prev.Value.Waypoint, w);

                linesPart2.Add(string.Format(
                                   "{0},{1},0, {2} {3},0,0, {4},0,0,1,-1,0.000,0,-1000,-1000,-1,-1,-1,0,0,000.00000,0,0,,-1000,-1,-1,-1000,0,-1000,-1,-1,-1000,0,-1000,-1,-1,-1000,0,-1000,-1,-1,-1000,0,-1000,-1000,0",
                                   isDirect ? "DIRECT,3" : $"{airway},2",
                                   w.ID.FormatWaypointId(),
                                   w.Lat.ToString("0.000000"),
                                   w.Lon.ToString("0.000000"),
                                   heading.ToString("0.00000")));

                prev    = current;
                current = current.Next;
            }

            linesPart2.Add("");

            return(string.Join(",\n", linesPart1.Concat(linesPart2)));
        }
Ejemplo n.º 3
0
        private List <Waypoint> GetCandidates(Waypoint start, Waypoint end)
        {
            var startVector  = start.ToVector3D();
            var endVector    = end.ToVector3D();
            var tangent      = EarthGeometry.GetW(startVector, endVector);
            var maxDisVector = (startVector + Tan(MaxAngleRadian) * tangent)
                               .Normalize();

            var midPoint = (startVector + maxDisVector) * 0.5;

            var pt          = midPoint.ToLatLon();
            var smallRegion = searcher.Find(pt.Lat, pt.Lon, MaxLegDis * 0.5);

            if (smallRegion.Count > 0)
            {
                return(smallRegion);
            }

            return(searcher.Find(start.Lat, start.Lon, MaxLegDis));
        }