Пример #1
0
        public async Task <Dictionary <string, PersonalMinimumVerificationResult> > CheckPersonalMinimums()
        {
            Dictionary <string, PersonalMinimumVerificationResult> results = new Dictionary <string, PersonalMinimumVerificationResult>();

            results.Add("Visibility", PersonalMinimumVerificationResult.Unknown);
            results.Add("Ceiling", PersonalMinimumVerificationResult.Unknown);
            results.Add("Runway", PersonalMinimumVerificationResult.Unknown);
            results.Add("Crosswind", PersonalMinimumVerificationResult.Unknown);


            var minimums = await PersonalMinimums.LoadAsync();

            var passRunway = this.Airport.Runways.Where(rwy => rwy.Length.IsOver(minimums.RunwayLength) == PersonalMinimumVerificationResult.Pass &&
                                                        rwy.Width.IsOver(minimums.RunwayWidth) == PersonalMinimumVerificationResult.Pass &&
                                                        !rwy.Closed);
            var warningRunway = this.Airport.Runways.Where(rwy => rwy.Length.IsOver(minimums.RunwayLength) != PersonalMinimumVerificationResult.Fail &&
                                                           rwy.Width.IsOver(minimums.RunwayWidth) != PersonalMinimumVerificationResult.Fail &&
                                                           !rwy.Closed);

            if (passRunway.Any())
            {
                results["Runway"] = PersonalMinimumVerificationResult.Pass;
            }
            else if (warningRunway.Any())
            {
                results["Runway"] = PersonalMinimumVerificationResult.Warning;
            }
            else
            {
                results["Runway"] = PersonalMinimumVerificationResult.Fail;
            }

            if (this.HasMetar)
            {
                results["Visibility"] = this.Metar.Visibility.IsOver(minimums.Visibility);

                if (this.Metar.Clouds.Any(cl => cl.IsCeiling))
                {
                    var ceiling = this.Metar.Clouds.Where(cl => cl.IsCeiling)
                                  .OrderBy(cl => cl.Altitude)
                                  .First();

                    results["Ceiling"] = ceiling.Altitude.IsOver(minimums.Ceiling);
                }
                else
                {
                    results["Ceiling"] = PersonalMinimumVerificationResult.Pass;
                }

                foreach (var rwy in passRunway)
                {
                    var windComponents = CrossWindComponents.CreateFromMetarData(this.Metar.Wind.Direction, this.Metar.Wind.Speed, rwy.End1.Heading);
                    results["Crosswind"] = minimums.Crosswind.IsOver(windComponents.Crosswind);

                    if (results["Crosswind"] == PersonalMinimumVerificationResult.Pass)
                    {
                        break;
                    }
                }
            }

            return(results);
        }
Пример #2
0
 public async Task LoadAsync()
 {
     this.DataSources = new ObservableCollection <DataSourceViewModel>(App.DataSourceManager.DataSources.Select(s => new DataSourceViewModel(App.DataSourceManager, s.Key)));
     this.Minimums    = await PersonalMinimums.LoadAsync();
 }