我试图使用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个数据,列表也只计算一个项目而不是更多。
答案 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");