package gpx import ( "bytes" "encoding/xml" "fmt" "strconv" "time" ) type Point struct { Lat float64 Lon float64 Elevation *float64 Time *time.Time } func Track(creator string, name string, points []Point) ([]byte, error) { if len(points) == 0 { return nil, fmt.Errorf("track has no points") } if creator == "" { creator = "wanderer plugin" } var buf bytes.Buffer buf.WriteString(xml.Header) buf.WriteString(``) buf.WriteString("") buf.WriteString("") _ = xml.EscapeText(&buf, []byte(name)) buf.WriteString("") buf.WriteString("") for _, point := range points { buf.WriteString(``) if point.Elevation != nil { buf.WriteString("") buf.WriteString(strconv.FormatFloat(*point.Elevation, 'f', 2, 64)) buf.WriteString("") } if point.Time != nil { buf.WriteString("") } buf.WriteString("") } buf.WriteString("") buf.WriteString("") buf.WriteString("") return buf.Bytes(), nil }