private void _receiver_OnPositionEvent(Atlas2Data data) { VTSAtlas2Target target = new VTSAtlas2Target(data.TrackId); target.MMSI = data.MMSI; target.Update(data.Lon, data.Lat, data.SOG, data.COG, DateTime.Now); target.Name = data.Name; target.ReceiverTime = data.Time; lock (_tracksData) { _tracksData.UpdateDynamicEvent(target); } }
protected override void onRecv(byte[] pb, int len) { VTSInfo[] infos = _parser.Parse(pb, 0, len); foreach (VTSInfo info in infos) { Atlas2Data data = new Atlas2Data(); data.Time = info.RecvTime; data.TrackId = info.SystemTrackId; data.Status = info.Status; data.Name = info.Name; data.ShortName = info.ShortName; data.CallSign = info.CallSign; data.ShipType = info.ShipType; data.Length = info.Length; data.Width = info.Width; data.Shape = new GeoPointShape(info.Longitude, info.Latitude); data.COG = info.Course; data.SOG = info.Speed; data.Heading = (int)info.Heading; data.TimeLastUpdate = info.TimeLastUpdate; data.ObjType = (Atlas2Data.ObjTypes)info.ObjType; data.TargetType = info.TargetType; data.PilotStatus = info.PilotStatus; data.Rating = info.Rating; data.LabelColorIndex = info.LabelColorIndex; data.Category = info.Category; int.TryParse(info.TransponderId, out data.MMSI); data.TransponderState = info.TransponderState; data.DBTrackId = info.DBTrackId; data.Draught = info.Draught; data.InfoTxt = info.InfoTxt; data.ETA = info.ETA; data.ETAEndPoint = info.ETAEndPoint; data.RateOfTurn = info.RateOfTurn; data.AISNavStatus = info.AISNavStatus; data.AISRateOfTurn = info.AISRateOfTurn; data.AISSOG = info.AISSOG; data.AISLatitude = info.AISLatitude; data.AISLongitude = info.AISLongitude; data.AISCOG = info.AISCOG; data.AISTrueHeading = info.AISTrueHeading; data.AISETA = info.AISETA; data.AISDraught = info.AISDraught; data.AISTimeOfLastUpdate = info.AISTimeOfLastUpdate; data.DataTime = info.DataTime; data.Id = data.GetID(); if (!_dic.ContainsKey(data.TrackId)) { _dic.Add(data.TrackId, data); } else if (data.SOG > 1 || _dic[data.TrackId].Time.AddSeconds(Atlas2TimeoutUtil.TotalSeconds) <= data.Time) { _dic[data.TrackId] = data; } else { return; } if (OnReceivedData != null) { OnReceivedData(data); } } }