读取gpx文件

回到首页  往前  往后

该范例程序会演示如何读取gpx格式文件中的track和route对象。

注意1:太乐地图.NET控件 名称统一命名为:MapControl

注意2:该范例程序会调用gpx文件读取接口:MapControl.Manager.DeserializeGPX,支持读取对象包括:track、route读取后的输出类型为:gpxType

范例运行后界面如下图所示:

读取gpx文件

源码

      /// <summary>

      /// 读取gpx文件

      /// </summary>

      /// <param name="sender"></param>

      /// <param name="e"></param>

      private void button3_Click(object sender, EventArgs e)

       {

          try

           {

              using (FileDialog dlg = new OpenFileDialog())

               {

                   dlg.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;

                   dlg.CheckPathExists = true;

                   dlg.CheckFileExists = false;

                   dlg.AddExtension = true;

                   dlg.DefaultExt = "gpx";

                   dlg.ValidateNames = true;

                   dlg.Title = "选择GPX文件";

                   dlg.Filter = "GPX文件 (*.gpx)|*.gpx|所有文件 (*.*)|*.*";

                   dlg.FilterIndex = 1;

                   dlg.RestoreDirectory = true;

 

                  if (dlg.ShowDialog() == DialogResult.OK)

                   {

                      var gpx = File.ReadAllText(dlg.FileName);

 

                      var r = MapControl.Manager.DeserializeGPX(gpx);

                      if (r != null)

                       {

                          var points = new List<PointLatLng>();

                          // 绘制gpx文件中的track

                          if (null != r.trk && r.trk.Length > 0)

                           {

                              foreach (var trk in r.trk)

                               {

                                  foreach (var seg in trk.trkseg)

                                   {

                                      foreach (var p in seg.trkpt)

                                       {

                                           points.Add(new PointLatLng((double)p.lat, (double)p.lon));

                                       }

                                   }

 

                                  var name = String.IsNullOrEmpty(trk.name) ? String.Empty : trk.name;

                                  var rt = new AZMapRoute(points, name);

                                   {

                                       rt.Stroke = new Pen(Color.FromArgb(144, Color.Red))

                                       {

                                           Width = 5,

                                           DashStyle = DashStyle.DashDot

                                       };

                                   }

                                   _graphicLayer.Routes.Add(rt);

                               }

                           }

                          // 绘制gpx文件中的route

                          if (null != r.rte && r.rte.Length > 0)

                           {

                              foreach (var rte in r.rte)

                               {

                                  foreach (var pt in rte.rtept)

                                   {

                                       points.Add(new PointLatLng((double)pt.lat, (double)pt.lon));

                                   }

 

                                  var name = String.IsNullOrEmpty(rte.name) ? String.Empty : rte.name;

                                  var rt = new AZMapRoute(points, name);

                                   {

                                       rt.Stroke = new Pen(Color.FromArgb(144, Color.Red))

                                       {

                                           Width = 5,

                                           DashStyle = DashStyle.DashDot

                                       };

                                   }

                                   _graphicLayer.Routes.Add(rt);

                               }

                           }

                           MapControl.ZoomAndCenterRoutes(null);

                       }

                   }

               }

 

           }

          catch (Exception ex)

           {

              MessageBox.Show(ex.Message);

           }

       }