a4c2efe4f3
Replace noisy phone-GPS <ele> in every committed track.gpx with swisstopo swissALTI3D heights at each exact lat/lon (coordinates unchanged; phone altitude was off by up to ~430m). - scripts/fix-altitudes.ts: batched swisstopo profile.json lookup, WGS84->LV95, disk-cached, keeps original ele for any out-of-CH point. - .githooks/pre-commit: auto-corrects any added/modified track.gpx on commit and re-stages it; wired via package.json prepare -> core.hooksPath.
42 lines
1.4 KiB
Bash
Executable File
42 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Pre-commit: normalise hike track altitudes.
|
|
#
|
|
# Any added/modified src/content/hikes/<slug>/track.gpx is run through
|
|
# scripts/fix-altitudes.ts (swisstopo swissALTI3D heights at each exact point)
|
|
# and re-staged, so committed tracks always carry corrected elevation instead of
|
|
# raw phone-GPS noise. Commits that don't touch a track.gpx are a fast no-op.
|
|
#
|
|
# Network failures degrade gracefully: fix-altitudes keeps a point's original
|
|
# elevation when it can't resolve it, exits 0, and the commit proceeds.
|
|
#
|
|
# Caveat: a touched track.gpx is re-staged in full, so partial (`git add -p`)
|
|
# staging of a track.gpx won't survive. These files are generated, so that's fine.
|
|
set -euo pipefail
|
|
|
|
# Staged Added/Copied/Modified track.gpx paths, NUL-delimited so non-ASCII slug
|
|
# dirs (e.g. "…pfäffikersee") come through as raw bytes, unquoted.
|
|
files=()
|
|
while IFS= read -r -d '' f; do
|
|
case "$f" in
|
|
src/content/hikes/*/track.gpx) files+=("$f") ;;
|
|
esac
|
|
done < <(git diff --cached --name-only -z --diff-filter=ACM -- src/content/hikes)
|
|
|
|
if [ ${#files[@]} -eq 0 ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Map each path to its <slug> (the directory under src/content/hikes/).
|
|
slugs=()
|
|
for f in "${files[@]}"; do
|
|
s=${f#src/content/hikes/}
|
|
slugs+=("${s%/track.gpx}")
|
|
done
|
|
|
|
echo "[pre-commit] fix-altitudes: ${slugs[*]}"
|
|
pnpm exec vite-node scripts/fix-altitudes.ts "${slugs[@]}"
|
|
|
|
# Re-stage so the corrected elevations are what actually gets committed.
|
|
git add -- "${files[@]}"
|