Ejemplo n.º 1
0
        private ADSBMessageBase BuildPositionMessage(string message)
        {
            ADSBPositionMessage msg     = new ADSBPositionMessage();
            ADSBMessageBase     baseMsg = msg as ADSBMessageBase;

            BuildBaseMessage(message, ref baseMsg);
            baseMsg        = payloadParserPosition.ParseMessage(baseMsg);
            msg            = baseMsg as ADSBPositionMessage;
            msg.TypeSimple = ADSBMessagetype.Position;



            return(msg);
        }
Ejemplo n.º 2
0
        public ADSBMessageBase ParseMessage(ADSBMessageBase message)
        {
            ADSBPositionMessage tmpMessage = (ADSBPositionMessage)message;

            tmpMessage.Altitude           = ParseAltitude(message.Payload);
            tmpMessage.SurveillanceStatus = ParseSurveillanceStatus(message.Payload);
            tmpMessage.NicSupplement      = ParseNicSupplement(message.Payload);
            tmpMessage.TimeFlag           = ParseTimeFlag(message.Payload);
            tmpMessage.CprFormate         = ParseCprFormate(message.Payload);
            tmpMessage.CprLatitude        = ParseCprLatitude(message.Payload);
            tmpMessage.CprLongitude       = ParseCprLongitude(message.Payload);

            return(tmpMessage);
        }
Ejemplo n.º 3
0
        public static PlanePosition DecodeGlobalADSB(ADSBPositionMessage OldADSBMessage, ADSBPositionMessage NewADSBMessage)
        {
            if (!OldADSBMessage.ICAO.Equals(NewADSBMessage.ICAO))
            {
                throw new ArgumentException("Not the same ICAO! -> CPRCoder static PlanePosition");
            }

            if (OldADSBMessage.CprFormate == NewADSBMessage.CprFormate)
            {
                throw new ArgumentException("Same CPR - Error!");
            }

            TimeSpan OldMesTimespan = TimeSpan.FromTicks(OldADSBMessage.Timestamp.Ticks);
            TimeSpan NewMesTimespan = TimeSpan.FromTicks(NewADSBMessage.Timestamp.Ticks);

            if ((NewMesTimespan.TotalSeconds - OldMesTimespan.TotalSeconds) > 10)
            {
                throw new ArgumentException("Timestamp too old!");
            }

            int i = NewADSBMessage.CprFormate;

            //Latitude
            double CprLat0 = (i == 0) ? NewADSBMessage.CprLatitude : OldADSBMessage.CprLatitude;
            double CprLat1 = (i == 1) ? NewADSBMessage.CprLatitude : OldADSBMessage.CprLatitude;
            double j       = Math.Floor(((59 * CprLat0 - 60 * CprLat1) / Nb17) + 0.5);
            double RLat0   = Dlat0 * (mod(j, 60) + CprLat0 / Nb17);
            double RLat1   = Dlat1 * (mod(j, 59) + CprLat1 / Nb17);

            double latitude = (i == 0) ? RLat0 : RLat1;
            int    nl       = 0;

            if ((nl = NumberOfLongitudeZones.lookup(RLat0)) != NumberOfLongitudeZones.lookup(RLat1))
            {
                // if the longitude zones are not the same, we cannot calculate the longitude
                // so we discard this position object
                throw new ArgumentException("CprCoder.decodeGlobalAirborne(): Messages with matching number of longitude zones expected");
            }

            double CprLon0   = (i == 0) ? NewADSBMessage.CprLongitude : OldADSBMessage.CprLongitude;
            double CprLon1   = (i == 1) ? NewADSBMessage.CprLongitude : OldADSBMessage.CprLongitude;
            double m         = Math.Floor((CprLon0 * (nl - 1) - CprLon1 * nl) / Nb17 + 0.5);
            double lon       = (i == 0) ? CprLon0 : CprLon1;
            double dlon      = 360.0 / Math.Max(nl - i, 1);
            double longitude = dlon * (mod(m, nl - i) + lon / Nb17);

            //System.err.println ( String.format("%-8s LAT LON %-3.8f %-3.8f global pos", newMsg.getIcao(), latitude, longitude) );
            return(new PlanePosition(NewADSBMessage.Timestamp, (double)latitude, (double)longitude, (double)NewADSBMessage.Altitude));
        }
Ejemplo n.º 4
0
        private void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedItem == null)
            {
                return;
            }

            string icao = listBox1.SelectedItem.ToString();

            ADSBPositionMessage positionMessage = viewModel.GetPositionMessage(icao);

            if (positionMessage != null)
            {
                textBoxAltitude.Text = positionMessage.Altitude.ToString();
            }
            else
            {
                textBoxAltitude.Text = "No message available";
            }

            ADSBVelocityMessage velocityMessage = viewModel.GetVelocityMessage(icao);

            if (velocityMessage != null)
            {
                textBoxSpeed.Text = velocityMessage.Speed.ToString();
            }
            else
            {
                textBoxSpeed.Text = "No message available";
            }

            ADSBIdentificationMessage idMessage = viewModel.GetIdentificationMessage(icao);

            if (idMessage != null)
            {
                textBoxAircraftID.Text = idMessage.AircraftID.ToString();
            }
            else
            {
                textBoxAircraftID.Text = "No message available";
            }
        }
Ejemplo n.º 5
0
        public const double Nb17  = 131072.0;   //Number of bits for Encoding

        public static PlanePosition DecodeADSBToPosition(PlanePosition ReferencePosition, ADSBPositionMessage NewMessage)
        {
            double LatitudeReference  = ReferencePosition.Latitude;
            double LongitudeReference = ReferencePosition.Longitude;
            int    LatitudeCpr        = NewMessage.CprLatitude;
            int    LongitudeCpr       = NewMessage.CprLongitude;
            int    Cpr = NewMessage.CprFormate;

            double DLat = (Cpr == 0) ? Dlat0 : Dlat1;
            double j    = Math.Floor(LatitudeReference / DLat) + Math.Floor(0.5 + mod(LatitudeReference, DLat) / DLat - LatitudeCpr / Nb17);
            double RLat = (double)DLat * (j + LatitudeCpr / Nb17);

            double Dlon = 360.0 / (NumberOfLongitudeZones.lookup(RLat) - Cpr);
            double m    = Math.Floor(LongitudeReference / Dlon) + Math.Floor(0.5 + mod(LongitudeReference, Dlon) / Dlon - LongitudeCpr / Nb17);
            double RLon = (double)Dlon * (m + LongitudeCpr / Nb17);

            return(new PlanePosition(NewMessage.Timestamp, (double)RLat, (double)RLon, (double)NewMessage.Altitude));
        }
Ejemplo n.º 6
0
        public ADSBPositionMessage GetPositionMessage(string icao)
        {
            ADSBPositionMessage message = (ADSBPositionMessage)Planes[icao].getADSBMessageContainer().FirstOrDefault(e => e.TypeSimple == ADSBMessagetype.Position);

            return(message);
        }