开源/现有的C#类用于编写GPX文件?(C#)

12

我正在寻找一个C#库或类,帮助我从我的航点集合(纬度/经度等)中编写GPX文件

我已经找到了一些阅读器,但并不多用于编写。

如果它能在Compact Framework/WinMobile 6.5上工作,那就更好了——但这并不是硬性要求。我可以在桌面上进行后处理,移动设备不必构建这些文件。

有人知道这方面的一些方法或简单的写文件方式吗?


2
最快的方法是使用来自http://www.topografix.com/GPX/1/1/gpx.xsd的xsd,简单地生成类,然后进行序列化。我个人不太喜欢那些生成的类,并编写了一堆(简单的)包装类来实现我需要的功能(因此它不完整)。如果您需要更多关于任何路径的输入,请随时询问 :) - Eddy
谢谢。我会看一下,但我真的不需要那些笨重的类 - 这只是为了一组航点,我可能会用简单的东西来包装它... - Tim
以下是一段简单的Java代码,易于移植:http://code.google.com/p/osmtracker-android/source/browse/trunk/src/me/guillaumin/android/osmtracker/gpx/GPXFileWriter.java?r=45 - Blau
4个回答

7
你看过开放GPS-LBS(OGL)了吗?
类文档中:
此GPX类提供将GPS数据(航点、路线和轨迹)转换为与GPX格式文件兼容的功能。
关于Windows Mobile的说明,该库支持:
“...在PC(Windows)或PocketPC(CE)上运行的应用程序。”

0

最简单(指最低保真度,而不是最节省时间的)的方法是在文本编辑器中打开任何gpx文件,并将您的坐标粘贴到正确的位置,或按照以下方式编写新文件。GPX是一种XML文件类型,因此如果您了解一些HTML,就很容易掌握。

我可以打开的最基本格式(使用Android上的GPX Viewer)是

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx>
  <!--Waypoint 1-->
  <wpt lat="50.888090" lon="4.698118">
  </wpt>
  <!--Waypoint 2-->
  <wpt lat="50.788090" lon="4.798118">
  </wpt>
  <!--etc-->
  <wpt lat="50.988090" lon="4.618118">
  </wpt>
</gpx>

根据需要添加或删除航路点。

轨迹和路线也可以进行类似的操作,您还可以添加更多信息,如高度和时间,但是您需要在谷歌上查找GPX文档。


0

使用纯C#生成的一种相当简单的方法:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {        

        List<int> heartRateList = new List<int>() { 80, 81, 82 };
        List<DateTime> timeList = new List<DateTime>() { DateTime.Now.AddSeconds(1), DateTime.Now.AddSeconds(2), DateTime.Now.AddSeconds(3) };
        string trkpt = "";

        for(int c = 0; c < heartRateList.Count; c++)
        {
            trkpt += "<trkpt>"
                + "<time>" + timeList[c].ToString("s") + "Z</time>"
                + "<extensions>"
                + "<gpxtpx:TrackPointExtension>"
                + "<gpxtpx:hr>" + heartRateList[c] + "</gpxtpx:hr>"
                + "</gpxtpx:TrackPointExtension>"
                + "</extensions>"
                + "</trkpt>";
        }
        
        string gpx = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
            + "<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:gpxtpx=\"http://www.garmin.com/xmlschemas/TrackPointExtension/v1\" xmlns:gpxx=\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\" xmlns:ns1=\"http://www.cluetrust.com/XML/GPXDATA/1/0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" creator=\"Zamfit\" version=\"1.3\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd\">"
            + "<metadata><time>2022-01-01T00:00:00Z</time></metadata>"
            + "<trk>"
            + "<name>Activity Name</name>"
            + "<trkseg>"
            + trkpt
            + "</trkseg>"
            + "</trk>"
            + "</gpx>";       
     
        Console.WriteLine(gpx);

    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接