parse_garmin_tcx_trackpoint <- function(tcx_nodeset, ns) {
date_time_format <- "%FT%X" #2017-02-02T16:01:09.000Z
TrackpointXPath <- "//d1:Lap/d1:Track"
# parse only below the 'Track' node
tp <- tcx_nodeset %>%
xml2::xml_find_all(TrackpointXPath, ns)
ActivityIdXPath <- "//d1:Id"
TimeXPath <- "d1:Trackpoint/d1:Time"
TrackpointXPath <- "d1:Trackpoint"
LatitudeDegreesXPath <- "d1:Position/d1:LatitudeDegrees"
LongitudeDegreesXPath <- "d1:Position/d1:LongitudeDegrees"
AltitudeMetersXPath <- "d1:AltitudeMeters"
DistanceMetersXPath <- "d1:DistanceMeters"
HeartRateBpmXPath <- "d1:HeartRateBpm/d1:Value"
# use ActivityId as identifier of activity
ActivityId <- tcx_nodeset %>%
xml2::xml_find_first(ActivityIdXPath, ns) %>%
xml2::xml_text()
# assume a Time node for every record, always UTC (?)
Time <- xml2::xml_find_all(tp, TimeXPath, ns) %>%
xml2::xml_text() %>%
strptime(., date_time_format, tz = "GMT") %>%
as.POSIXct()
# assume all other vars missing for some records
LatitudeDegrees <- tp %>%
xml2::xml_find_all(., TrackpointXPath, ns) %>%
xml2::xml_find_first(LatitudeDegreesXPath) %>%
xml2::xml_double()
LongitudeDegrees <- tp %>%
xml2::xml_find_all(TrackpointXPath, ns) %>%
xml2::xml_find_first(LongitudeDegreesXPath, ns) %>%
xml2::xml_double()
AltitudeMeters <- tp %>%
xml2::xml_find_all(TrackpointXPath, ns) %>%
xml2::xml_find_first(AltitudeMetersXPath, ns) %>%
xml2::xml_double()
DistanceMeters <- tp %>%
xml2::xml_find_all(TrackpointXPath, ns) %>%
xml2::xml_find_first(DistanceMetersXPath, ns) %>%
xml2::xml_double()
HeartRateBpm <- tp %>%
xml2::xml_find_all(TrackpointXPath, ns) %>%
xml2::xml_find_first(HeartRateBpmXPath, ns) %>%
xml2::xml_text() %>%
as.integer()
tibble::tibble(ActivityId = ActivityId,
Time = Time, LatitudeDegrees = LatitudeDegrees,
LongitudeDegrees = LongitudeDegrees,
AltitudeMeters = AltitudeMeters,
DistanceMeters = DistanceMeters,
HeartRateBpm = HeartRateBpm)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.