如何从传入的串行数据中自动将项添加到列表中?

时间:2018-01-09 15:56:44

标签: c# gmap.net

我试图使用c#和GMap.net跟踪对象的实时位置。在GMap.net内部,为了跟踪路线,我必须使用List<PointLatLng>,然后使用Pen统一它们。

问题在于我不知道对象在开始时的位置,所以我没有要添加的点,第一个是第一部分。

是否可以只在列表中添加一个点并实时更新?

或者,可以将第一个点保存到变量中,然后使用每次从串行端口接收数据时将前一个变量的名称递增1来添加其他点,然后刷新列出新点?

`

List<PointLatLng> points = new List<PointLatLng>();
var coordinates = new List<PointLatLng> { new PointLatLng(GPS_Latitude, GPS_Longitude) };
coordinates.Add(new PointLatLng(GPS_Latitude, GPS_Longitude));
GMapOverlay trace = new GMapOverlay("Real Time Position");
GMapRoute carroute = new GMapRoute(coordinates, "Traiectory");
gMapControl1.Overlays.Add(trace);
trace.Routes.Add(carroute);
//Pen redPen = new Pen(Color.Red, 3);
carroute.Stroke = new Pen(Color.Red, 3);

`

通过这种方式,我只有第一点而不是其他点。通过串口接收1hz频率的数据。我的意思是:即使我收到超过1个数据,列表也只计算一个项目而不是更多。

1 个答案:

答案 0 :(得分:0)

可以使用这些解决方案。

您可以拥有一个积分列表,然后只要您想要在列表中添加一个点,就可以致电.Add()(如果您使用List,则无法使用// Create list and (optionally) add the first point to it var points = new List<Point> { new Point(x, y) }; // Add a new point to the list whenever you want points.Add(new Point(newX, newY)); // Get the most recent point by getting the item at the last index var newestPoint = points[points.Count - 1]; // Note: this will fail if the list is empty 。只保存一个点 - 如果是这样的话,请参见下一个例子)。这样你就拥有了所有要点的历史。您可以通过访问列表中最后一个索引处的项目来获取最新点:

var myPoint = new Point(x, y);

// Update coordinates independently whenever you want
myPoint.X = newX; 
myPoint.Y = newY;

// Or just assign a new Point
myPoint = new Point(newX, newY);

您还可以使用单个点变量,然后通过单独更改值来更新它的坐标:或者为其指定一个新的点:

 $("#your_id").removeAttr("value");