我想解析一个 GPX 文件。我想得到以下信息:
文件中的所有点 (trkpt) 及其值:
经度
纬度
海拔
时间
为此,我编写了结构:
type gpx file{
filepointer *os.file
points []xmlPoints
}
type gpx struct {
XMLName xml.Name `xml:"gpx"`
trks trk `xml:"trk"`
}
type trk struct {
XMLName xml.Name `xml:"trk"`
trksegs []trkseg `xml:"trkseg"`
}
type trkseg struct {
XMLName xml.Name `xml:"trkseg"`
points []XMLPoint `xml:"trkpt"`
}
type XMLPoint struct {
XMLName xml.Name `xml:"trkpt"`
longitude float64 `xml:"lon,attr"`
latitude float64 `xml:"lat,attr"`
elevation float64 `xml:"ele"`
time time.Time `xml:"time"`
}
我使用以下方法尝试获取这些值:
func (f *GPXFile) setPoints() {
//Reads the GPXfile to get a slice of all Points and set them to f.points
//read GPXFile
file, _ := os.Open(f.filePointer.Name())
fileByte, _ := ioutil.ReadAll(file)
//get points
var g gpx
//should read points and puts them to &points, result empty
err :=xml.Unmarshal(fileByte, &g)
fmt.Print(err)
//set points
f.points = g.trks.trksegs[1].points
}
我的 GPX 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" ...>
<metadata>
<time>2019-09-14T13:14:17.094Z</time>
</metadata>
<trk>
<name>Cube – Sa., 14. Sep. 2019, 15:14</name>
<trkseg>
</trkseg>
<trkseg>
<trkpt lat="49.3547198000" lon="9.1508659200"><time>2019-09-14T13:14:00.000Z</time><extensions><gpxpx:PowerInWatts>120</gpxpx:PowerInWatts></extensions></trkpt>
<trkpt lat="49.3546998700" lon="9.1509324100"><time>2019-09-14T13:14:10.003Z</time><extensions><gpxtpx:TrackPointExtension><gpxtpx:atemp>22.9</gpxtpx:atemp></gpxtpx:TrackPointExtension><gpxpx:PowerInWatts>120</gpxpx:PowerInWatts></extensions></trkpt>
</trkseg>
</trk>
</gpx>
问题是,从 unmarshal 函数中我得到了一个with ,gpx但是trk它是trkseqnil ... 所以我想知道如何解析. 从那里我可以使用相同的方法来获取点数组。trkseqtrktrkseqtrkseq
鸿蒙传说
相关分类