This repository was archived by the owner on Dec 2, 2025. It is now read-only.
File tree Expand file tree Collapse file tree
main/kotlin/be/yellowduck/gpx
test/kotlin/be/yellowduck/gpx Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -82,7 +82,7 @@ class GPX {
8282 gpx.tracks.add(track)
8383 }
8484
85- } catch (e : SAXParseException ) {
85+ } catch (_ : SAXParseException ) {
8686 throw GPXDocumentException ()
8787 }
8888
@@ -91,8 +91,8 @@ class GPX {
9191 }
9292
9393 private fun parseName (doc : org.w3c.dom.Document ): String {
94- return doc.getElementsByTagName(" metadata" ).items().firstOrNull()?.let { metadata ->
95- metadata.childNodes.itemsByName(" name" ).firstOrNull()?.textContent
94+ return doc.getElementsByTagName(" metadata" ).items().firstOrNull()?.let { metadata ->
95+ metadata.childNodes.itemsByName(" name" ).firstOrNull()?.textContent
9696 } ? : " "
9797 }
9898
@@ -140,9 +140,9 @@ class GPX {
140140 }
141141
142142 private fun parseTrackPoint (node : Node ): TrackPoint {
143-
144- val formatter = DateTimeFormatter .ofPattern( " yyyy-MM-dd'T'HH:mm:ss'Z' " )
145- val parsedDate = node.firstChildByName( " time " )?.textContent?. let { LocalDateTime .parse( it, formatter) }
143+ val parsedDate = node.firstChildByName( " time " )?.textContent?. let {
144+ LocalDateTime .parse(it, DateTimeFormatter . ISO_DATE_TIME )
145+ }
146146
147147 return TrackPoint (
148148 lat = node.doubleAttribute(" lat" ),
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package be.yellowduck.gpx
33import com.sun.xml.txw2.output.IndentingXMLStreamWriter
44import java.io.ByteArrayOutputStream
55import java.io.OutputStream
6+ import java.time.temporal.ChronoUnit
67import javax.xml.stream.XMLOutputFactory
78
89class GPXWriter : IWriter {
@@ -53,6 +54,14 @@ class GPXWriter : IWriter {
5354 element(" trkpt" ) {
5455 attribute(" lat" , point.lat.toString())
5556 attribute(" lon" , point.lon.toString())
57+
58+ if (point.ele != 0.0 ) {
59+ element(" ele" , point.ele.toString())
60+ }
61+
62+ point.time?.let { time ->
63+ element(" time" , time.truncatedTo(ChronoUnit .SECONDS ).toString())
64+ }
5665 }
5766 }
5867 }
Original file line number Diff line number Diff line change @@ -54,6 +54,15 @@ class TCXWriter : IWriter {
5454 element(" LatitudeDegrees" , point.lat.toString())
5555 element(" LongitudeDegrees" , point.lon.toString())
5656 }
57+
58+ if (point.ele != 0.0 ) {
59+ element(" AltitudeMeters" , point.ele.toString())
60+ }
61+
62+ point.time?.let { time ->
63+ element(" Time" , point.time.toString())
64+ }
65+
5766 val distance: Double = previousPoint?.distanceTo(point)?.meters ? : 0.0
5867 element(" DistanceMeters" , distance.toString())
5968 previousPoint = point
Original file line number Diff line number Diff line change @@ -53,4 +53,30 @@ class TrackPointTests {
5353
5454 }
5555
56+ @Test
57+ fun trackPointSerialize () {
58+ val point = TrackPoint ()
59+ point.lat = 48.1969
60+ point.lon = 16.34528
61+ point.ele = 2.6
62+ point.time = now
63+
64+ val gpx = GPX .parse(
65+ GPXFile (
66+ tracks = mutableListOf (
67+ Track (
68+ segments = mutableListOf (
69+ Segment (
70+ points = mutableListOf (point)
71+ )
72+ )
73+ )
74+ )
75+ ).toString().toByteArray().inputStream()
76+ )
77+
78+ assertThat(gpx.tracks.firstOrNull()?.segments?.firstOrNull()?.points?.first()).isEqualTo(point)
79+ }
80+
81+
5682}
You can’t perform that action at this time.
0 commit comments