コード例 #1
0
        public AisMessage CreateMessage(BitArray payload)
        {
            var type = payload.DecodeByte(0, 5);

            if (type != c_type1 && type != c_type2 && type != c_type3)
            {
                throw new Exception(string.Format("Incorrect type, expected 1,2,3 but present:{0}", type));
            }

            var               timeStamp        = DateTime.UtcNow.ToFileTimeUtc();
            byte              repeatIndicator  = payload.DecodeByte(6, 7);
            uint              mmsi             = payload.DecodeUInt32(8, 37);
            NavigationStatus  navStatus        = (NavigationStatus)payload.DecodeByte(38, 41);
            int               rot              = payload.DecodeInt32(42, 49);
            float             sog              = (float)payload.DecodeUInt32(50, 59) / 10;
            bool              posAccuracy      = payload.DecodeBool(60);
            float             longtitude       = (float)payload.DecodeFloat(61, 88) / 600000;
            float             latitude         = (float)payload.DecodeFloat(89, 115) / 600000;
            float             cog              = (float)payload.DecodeUInt32(116, 127) / 10;
            ushort            heading          = payload.DecodeUShort(128, 136);
            byte              utcSeconds       = payload.DecodeByte(137, 142);
            ManeuverIndicator manuevrIndicator = (ManeuverIndicator)payload.DecodeByte(143, 144);
            byte              spare            = payload.DecodeByte(145, 147);
            bool              raim             = payload.DecodeBool(148);
            uint              radioStatus      = payload.DecodeUInt32(149, 167);

            return(new ClassAPositionReportMessage(
                       type,
                       timeStamp,
                       repeatIndicator,
                       mmsi,
                       navStatus,
                       rot,
                       sog,
                       posAccuracy,
                       longtitude,
                       latitude,
                       cog,
                       heading,
                       utcSeconds,
                       manuevrIndicator,
                       spare,
                       raim,
                       radioStatus));
        }
コード例 #2
0
 public ClassAPositionReportMessage(byte type, long timeStamp, byte repeatIndicator, uint mmsi, NavigationStatus navigationStatus, int rateOfTurn, float speedOverGround, bool positionAcuracy, float longtitude, float latitude, float courseOverGround, ushort trueHeading, byte utcSeconds, ManeuverIndicator maneuverIndicator, byte spare, bool raimFlag, uint radioStatus) : base(type, timeStamp)
 {
     RepeatIndicator   = repeatIndicator;
     Mmsi              = mmsi;
     NavigationStatus  = navigationStatus;
     RateOfTurn        = rateOfTurn;
     SpeedOverGround   = speedOverGround;
     PositionAcuracy   = positionAcuracy;
     Longtitude        = longtitude;
     Latitude          = latitude;
     CourseOverGround  = courseOverGround;
     TrueHeading       = trueHeading;
     UtcSeconds        = utcSeconds;
     ManeuverIndicator = maneuverIndicator;
     Spare             = spare;
     RaimFlag          = raimFlag;
     RadioStatus       = radioStatus;
 }