Roveri GPX extensions
Namespace URI: https://roveri.app/gpx/v1. Roveri writes standard GPX 1.1 and adds the elements below inside <extensions>, as GPX 1.1's extensionsType permits (xsd:any namespace="##other"). Any other reader ignores them; Roveri reads them back to show the whole ride.
Per point — inside <trkpt><extensions>
| Element | Type | Meaning | Omitted when |
|---|---|---|---|
roveri:speed | m/s, one decimal | Speed reported by the GPS at this point | unknown, or the rider hid speed |
roveri:course | degrees, integer | Heading | unknown |
roveri:road | u / h / m | Road type as the route map colours it: urban, highway, mixed | unknown |
roveri:lane | integer −2…2 | Lane offset where the ride covers the same road twice | 0 |
Per track — inside <trk><extensions>
<roveri:ride> carries the ride as attributes: version (1), timeZone (IANA), startedAt/endedAt (UTC ISO-8601), distanceM, durationS, elevationGainM, avgSpeedMps, maxSpeedMps, roadType, timeOfDay, felt, sunriseUTC, sunsetUTC, startCity, startRegion, endCity, endRegion, urbanS, highwayS, twistyS, mixedS, dayS, nightS, rainS, dryS, wetDistanceM, minTempC, maxTempC, maxWindKph. Every attribute except version is optional.
<roveri:weather> holds up to eight <roveri:sample> elements: time, tempC, precipMmHr, windKph, windDeg, gustKph, cloudPct, visibilityM, code, raining. Samples carry no coordinates.
Example
<trkpt lat="43.3188" lon="11.3308">
<ele>322</ele>
<time>2026-05-12T07:00:00Z</time>
<extensions>
<roveri:speed>30.1</roveri:speed>
<roveri:course>180</roveri:course>
<roveri:road>u</roveri:road>
</extensions>
</trkpt> Versioning
A reader compares roveri:ride/@version with the version it supports. A newer file still parses as standard GPX; Roveri shows the ride and suggests an update.