介绍
这篇文章给大家介绍如何在c# wpf中使用GMap.NET类库回放地图轨迹,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
,通过自定义控件UserControlMapRoute实现了轨迹显示功能。需要将此控件加入到GMapMarker。
GMapMarker _routeMaker =, new GMapMarker(点); ,UserControlMapRoute routeCtrl =, new UserControlMapRoute (), {, Marker =, _routeMaker,, MapCtrl =, MainMap }; ,routeCtrl.Init ();=,,_routeMaker.Shape  routeCtrl; ,//将图层添加到地图 ,this.MainMap.Markers.Add (_routeMaker);
UserControlMapRoute有两个功能:显示轨迹起始点,显示轨迹。将轨迹显示功能放在类MapRoutePath中实现。该类实现的功能就是根据gps坐标显示轨迹。该类包含的变量有:
class MapRoutePath ,{ ,public GMapControl MapCtrl {,得到;private 设置,,},//地图控件 ,public Panel ParentPanel {,得到;private 设置,,},//父面板,将PathRouteLine加入面板。 ,public Path PathRouteLine {,得到;private 设置,,},//显示轨迹 ,List_listGpsPoint =, new List (); ,List _listCtrlPt =, new List (); ,public List ListGpsPoint =祝辞,_listGpsPoint;,//包含的gps坐标 ,public List ListPathPoint =祝辞,_listCtrlPt;,//转换成立控件坐标 }
实现轨迹功能是变量PathRouteLine,该变量的父控件是ParentPanel(就是控件UserControlMapRoute中的根栅控件).MapCtrl控件主要作用就是提供了将gps坐标转换成控件坐标的函数。
实现将gps做标注转换成控件坐标的方法:
private void ToLocalPoint () ,{//_listGpsPoint才能存储所gps坐标,_listCtrlPt存储转换后控件坐标 _listCtrlPt.Clear才能(); foreach 才能;(PointLatLng pt  _listGpsPoint拷贝) {才能 Point 才能;ptGrid =, ToCtrlPoint (pt); _listCtrlPt.Add才能(ptGrid); ,,} ,} ,Point ToCtrlPoint (PointLatLng gpsPoint) ,{//转才能换成GMap.NET控件坐标 GPoint 才能;ptOfMapCtrl =, MapCtrl.FromLatLngToLocal (gpsPoint);//GMap.NET才能控件坐标要转换成,控件相对于直接父面板的坐标 Point 才能;ptToMapCtrl2 =, new 点(ptOfMapCtrl.Y ptOfMapCtrl.X也); Point 才能;ptOfScreen =, MapCtrl.PointToScreen (ptToMapCtrl2); Point 才能;ptOfParentPanel =, ParentPanel.PointFromScreen (ptOfScreen); return 才能;ptOfParentPanel; 以前,}>坐标转换过程就是:GPS坐标——》,GMap。网控件坐标——》屏幕坐标——》,控件相对于直接父面板的坐标。获取了控件坐标,就根据这些坐标画直线就行了。
private static void CreatPath (Path 路径,List, listPt) ,{ if 才能;(listPt.Count & lt;=, 1) {才能 时间=path.Data 才能;零; 返回才能; ,,} PathFigure 才能;PathFigure =, new PathFigure (); 时间=pathFigure.StartPoint 才能;listPt[0];,//起始点 for 才能;(int 小姐:=,1;,小姐:& lt;, listPt.Count;,我+ +) {才能//加才能入线段 LineSegment 才能;line =, new LineSegment (), {, Point =, listPt[我],}; pathFigure.Segments.Add才能(线); ,,} PathGeometry 才能;geometry =, new PathGeometry (); geometry.Figures.Add才能(pathFigure); 时间=path.Data 才能;几何; 以前,}> 2实现轨迹回放。
要实现两个功能:通过不同的线颜色来指示当前行动轨迹;提示当前所在的位置,用时等信息的提示框。
轨迹移动假如显示轨迹的线颜色为红色,通过绿色来显示当前经过的位置。再增加一个变量_pathMoveRouteLine(类型也为路径),就可以了._pathMoveRouteLine的颜色为绿色,所显示的路径要和PathRouteLine路径完全相同._pathMoveRouteLine路径长度要实时计算出来,随着时间推移,路径不断变长。需要增加一个定时器,不停的计算当前所在的位置。在定时器中,调用函数ShowRouteMove ();
private void ShowRouteMove () ,{//线才能路总长度 double 才能;totalDistance =, GetDistance (); if 才能;(totalDistance ==, 0) 返回才能;//才能更加时间,计算当前走过的长度 TimeSpan 才能;span =, DateTime.Now 作用;_startMoveTime; double 才能;curDistance =, _moveSpeed *, span.TotalHours; if 才能;(curDistance 祝辞,mysound。) {才能 StopMove才能(); 时间=curDistance 才能;mysound。; ,,} Path 才能;Path =, CreateMovePath ();//根才能据已走过的距离,获取需要显示的点 List<才能;Point>, listCtrlPoint =, GetListByDistance (curDistance); CreatPath才能(路径,listCtrlPoint); ShowMoveTip才能(listCtrlPoint.Last (),, curDistance); 以前,}如何在c# wpf中使用GMap.NET类库回放地图轨迹