trails/packages/fit/__fixtures__/multi-day.gpx
Ullrich Schäfer 8ba5554a67
Add @trails-cool/fit package with GPX→FIT Course encoder
Wraps @garmin/fitsdk to emit FIT Course files from GPX, the binary
format Wahoo's POST /v1/routes API requires. Server-side only — the
~1 MB SDK never ships to the planner browser bundle.

Round-trip tests use fit-file-parser as an independent oracle and
assert lat/lon parity within 1e-4 deg and altitude within 0.5 m
across short flat, alpine, multi-day, and single-point fixtures.

Updates design.md decision #1: the original hand-rolled-encoder plan
was justified largely by ESM friction in the Garmin SDK, but as of
v21.202.0 the SDK is pure ESM with zero deps. Wrapping it saves us
~400 LOC of binary plumbing and ongoing maintenance against future
FIT spec updates.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 22:31:37 +02:00

21 lines
1.1 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="trails.cool" xmlns="http://www.topografix.com/GPX/1/1">
<metadata><name>Multi-day tour</name></metadata>
<trk><trkseg>
<trkpt lat="47.0000" lon="10.0000"><ele>500</ele></trkpt>
<trkpt lat="47.0500" lon="10.0500"><ele>650</ele></trkpt>
<trkpt lat="47.1000" lon="10.1000"><ele>800</ele></trkpt>
<trkpt lat="47.1500" lon="10.1500"><ele>720</ele></trkpt>
<trkpt lat="47.2000" lon="10.2000"><ele>600</ele></trkpt>
<trkpt lat="47.2500" lon="10.2500"><ele>550</ele></trkpt>
<trkpt lat="47.3000" lon="10.3000"><ele>700</ele></trkpt>
<trkpt lat="47.3500" lon="10.3500"><ele>900</ele></trkpt>
<trkpt lat="47.4000" lon="10.4000"><ele>1100</ele></trkpt>
<trkpt lat="47.4500" lon="10.4500"><ele>1050</ele></trkpt>
<trkpt lat="47.5000" lon="10.5000"><ele>900</ele></trkpt>
<trkpt lat="47.5500" lon="10.5500"><ele>750</ele></trkpt>
<trkpt lat="47.6000" lon="10.6000"><ele>600</ele></trkpt>
<trkpt lat="47.6500" lon="10.6500"><ele>500</ele></trkpt>
<trkpt lat="47.7000" lon="10.7000"><ele>450</ele></trkpt>
</trkseg></trk>
</gpx>