如何在c# wpf中使用GMap.NET类库回放地图轨迹

  介绍

这篇文章给大家介绍如何在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类库回放地图轨迹