예제 #1
0
    void RecalculateWaypoints()
    {
        foreach (Flight f in flightData.flights.Values)
        {
            foreach (var fd in f.datapoints)
            {
                fd.Waypoint = null;
            }

            FlightPlan p;
            if (flightPlan.plans.TryGetValue(f.flightId, out p))
            {
                foreach (var wp in p.Waypoints)
                {
                    float           distance = float.MaxValue;
                    FlightDataPoint closest  = null;
                    foreach (var fd in f.datapoints)
                    {
                        float toWaypointDistance = (fd.FlatPosition - wp.FlatPosition).magnitude;
                        if (toWaypointDistance < distance)
                        {
                            distance = toWaypointDistance;
                            closest  = fd;
                        }
                    }
                    if (distance < distanceTreshold && closest != null)
                    {
                        closest.Waypoint = wp;
                    }
                }
            }
        }
    }
예제 #2
0
    public void Load(string[] paths)
    {
        foreach (var path in paths)
        {
            var pathMod = path;
            if (path.StartsWith("file:"))
            {
                pathMod = pathMod.Substring(7);
            }
            using (StreamReader reader = File.OpenText(pathMod))
            {
                //skip header
                reader.ReadLine();
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (string.IsNullOrEmpty(line))
                    {
                        continue;
                    }
                    try
                    {
                        string[][]      grid = CsvParser2.Parse(line);
                        FlightDataPoint row  = new FlightDataPoint();
                        row.Time = TimeSpan.Parse(grid[0][0]);

                        Coord coord = Coord.ParseCoord(grid[0][1], grid[0][2], grid[0][3]);
                        row.FlightID  = coord.name;
                        row.Latitude  = coord.Latitude;
                        row.Longitude = coord.Longitude;

                        row.Altitude     = float.Parse(grid[0][4]);
                        row.AircraftType = grid[0][5];
                        if (grid[0].Length >= 10)
                        {
                            row.CAS  = grid[0][6];
                            row.TAS  = grid[0][7];
                            row.GS   = grid[0][8];
                            row.MACH = grid[0][9];
                        }

                        Flight flight;
                        if (!flights.TryGetValue(row.FlightID, out flight))
                        {
                            flight          = new Flight();
                            flight.flightId = row.FlightID;
                            flights.Add(row.FlightID, flight);
                            flight.start = row.Time;
                        }
                        flight.end = row.Time;

                        flight.datapoints.Add(row);
                    }
                    catch
                    {
                        Debug.Log("Parsing line of csv failed");
                        continue;
                    }
                }
            }
        }

        foreach (Flight flight in flights.Values)
        {
            if (flight.start < min)
            {
                min = flight.start;
            }
            if (flight.end > max)
            {
                max = flight.end;
            }
        }
    }