Example #1
0
        public void AirPressure_GeometricAltitudeToPressureAltitude_Returns_Correct_Values()
        {
            var testValues = new List <ConvertParameters>()
            {
                new ConvertParameters(null, null, 29.00F),
                new ConvertParameters(500, 1100, 29.32F),
                new ConvertParameters(1000, 1000, 29.92F),
                new ConvertParameters(500, 270, 30.15F),
            };

            foreach (var useStaticVersion in new bool[] { true, false })
            {
                foreach (var testValue in testValues)
                {
                    int?actual;
                    if (useStaticVersion)
                    {
                        actual = AirPressure.GeometricAltitudeToPressureAltitude(testValue.InputAltitude, testValue.PressureInHg);
                    }
                    else
                    {
                        var airPressure = new AirPressure()
                        {
                            PressureInHg = testValue.PressureInHg
                        };
                        actual = airPressure.GeometricAltitudeToPressureAltitude(testValue.InputAltitude);
                    }
                    Assert.AreEqual(testValue.ExpectedAltitude, actual, "Altitude: {0}, Pressure: {1}", testValue.InputAltitude, testValue.PressureInHg);
                }
            }
        }
Example #2
0
        public void AirPressure_Constructor_Initialises_To_Known_State_And_Properties_Work()
        {
            var airPressure = new AirPressure();

            TestUtilities.TestProperty(airPressure, r => r.AgeSeconds, (short)0, (short)1);
            TestUtilities.TestProperty(airPressure, r => r.Latitude, 0F, 1.1F);
            TestUtilities.TestProperty(airPressure, r => r.Longitude, 0F, 1.2F);
            TestUtilities.TestProperty(airPressure, r => r.PressureInHg, 0F, 1.3F);
        }
Example #3
0
        public void AirPressure_ObservationTimeUtc_Returns_Correct_Time()
        {
            var airPressure = new AirPressure()
            {
                AgeSeconds = 10
            };
            var fetchTime = DateTime.UtcNow;
            var expected  = fetchTime.AddSeconds(10);

            Assert.AreEqual(expected, airPressure.ObservationTimeUtc(fetchTime));
        }
Example #4
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="latitude"></param>
        /// <param name="longitude"></param>
        /// <returns></returns>
        public AirPressure FindClosest(double latitude, double longitude)
        {
            AirPressure result = null;

            var kdTree = _AirPressures;

            if (kdTree != null)
            {
                var nearestPoints = kdTree.GetNearestNeighbours(new float[] { (float)latitude, (float)longitude }, 1);
                var nearestPoint  = nearestPoints.FirstOrDefault();
                result = nearestPoint == null ? null : nearestPoint.Value;
            }

            return(result);
        }
Example #5
0
 public void AirPressure_InHgToMillibars_Returns_Correct_Values()
 {
     Assert.AreEqual((float?)null, AirPressure.InHgToMillibars(null));
     Assert.AreEqual(1000F, AirPressure.InHgToMillibars(29.5301F));
 }
Example #6
0
 public void AirPressure_MillibarsToInHg_Returns_Correct_Values()
 {
     Assert.AreEqual((float?)null, AirPressure.MillibarsToInHg(null));
     Assert.AreEqual(29.5301F, AirPressure.MillibarsToInHg(1000F));
 }
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="aircraftListJson"></param>
        /// <returns></returns>
        public IEnumerable <BaseStationMessageEventArgs> ConvertIntoBaseStationMessageEventArgs(AircraftListJson aircraftListJson)
        {
            var result = new List <BaseStationMessageEventArgs>();

            foreach (var json in aircraftListJson.Aircraft)
            {
                var message = new BaseStationMessage()
                {
                    MessageType      = BaseStationMessageType.Transmission,
                    TransmissionType = BaseStationTransmissionType.AirToAir,        // This needs to be something other than "None" or "AllCallReply" if we want to have these messages work with the message compressor
                    StatusCode       = BaseStationStatusCode.None,
                };

                if (json.Callsign != null)
                {
                    message.Callsign = json.Callsign;
                }
                if (json.Emergency != null)
                {
                    message.Emergency = json.Emergency;
                }
                if (json.GroundSpeed != null)
                {
                    message.GroundSpeed = json.GroundSpeed;
                }
                if (json.Icao24 != null)
                {
                    message.Icao24 = json.Icao24;
                }
                if (json.OnGround != null)
                {
                    message.OnGround = json.OnGround;
                }
                if (json.SignalLevel != null)
                {
                    message.SignalLevel = json.SignalLevel;
                }
                if (json.Track != null)
                {
                    message.Track = json.Track;
                }
                if (json.VerticalRate != null)
                {
                    message.VerticalRate = json.VerticalRate;
                }

                if (json.Latitude != null || json.Longitude != null)
                {
                    if (json.Latitude != null)
                    {
                        message.Latitude = json.Latitude;
                    }
                    if (json.Longitude != null)
                    {
                        message.Longitude = json.Longitude;
                    }
                    if (json.PositionIsMlat != null)
                    {
                        message.IsMlat = json.PositionIsMlat.Value;
                    }
                }

                if (json.Squawk != null)
                {
                    int squawk;
                    if (int.TryParse(json.Squawk, out squawk))
                    {
                        message.Squawk = squawk;
                    }
                }

                if (json.AltitudeType != null)
                {
                    AddSupplementaryValue(message, r => r.AltitudeIsGeometric = json.AltitudeType == 1);
                }
                if (json.CallsignIsSuspect != null)
                {
                    AddSupplementaryValue(message, r => r.CallsignIsSuspect = json.CallsignIsSuspect);
                }
                if (json.SpeedType != null)
                {
                    AddSupplementaryValue(message, r => r.SpeedType = (SpeedType)json.SpeedType);
                }
                if (json.TargetAltitude != null)
                {
                    AddSupplementaryValue(message, r => r.TargetAltitude = json.TargetAltitude);
                }
                if (json.TargetTrack != null)
                {
                    AddSupplementaryValue(message, r => r.TargetHeading = json.TargetTrack);
                }
                if (json.TrackIsHeading != null)
                {
                    AddSupplementaryValue(message, r => r.TrackIsHeading = json.TrackIsHeading);
                }
                if (json.TransponderType != null)
                {
                    AddSupplementaryValue(message, r => r.TransponderType = (TransponderType)json.TransponderType);
                }
                if (json.VerticalRateType != null)
                {
                    AddSupplementaryValue(message, r => r.VerticalRateIsGeometric = json.VerticalRateType == 1);
                }
                if (json.AirPressureInHg != null)
                {
                    AddSupplementaryValue(message, r => r.PressureSettingMb = AirPressure.InHgToMillibars(json.AirPressureInHg));
                }

                if (json.Altitude != null)
                {
                    // When pressure altitude calculations were introduced the sending side was modified to
                    // send Altitude, GeometricAltitude and AltitudeType as a set. However, before that was
                    // introduced they'd only be sent if they changed.
                    if (json.GeometricAltitude == null || json.AltitudeType == null)
                    {
                        message.Altitude = json.Altitude;
                    }
                    else
                    {
                        switch (json.AltitudeType)
                        {
                        case (int)AltitudeType.Barometric:
                            message.Altitude = json.Altitude;
                            break;

                        case (int)AltitudeType.Geometric:
                            message.Altitude = json.GeometricAltitude;
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                    }
                }

                var eventArgs = new BaseStationMessageEventArgs(message, isOutOfBand: false, isSatcomFeed: json.IsSatcomFeed);
                result.Add(eventArgs);
            }

            return(result);
        }