GPX photo matching guide

How to geotag photos from a GPX track on Mac

A careful local workflow for matching EXIF capture times to timestamped GPX points without guessing outside the recorded route or overwriting original photos.

1. Check that the GPX contains time

A route line alone is not enough. Each usable track point needs an absolute timestamp, normally in UTC. Confirm the recording covers the period when you photographed and preserve the original GPX as evidence.

2. Inventory the photo clock evidence

Read DateTimeOriginal where available and note whether EXIF also contains OffsetTimeOriginal. A local-looking time such as 08:14:37 is ambiguous until you know which timezone the camera was using.

3. Choose the timezone explicitly

Use the IANA zone for the camera clock at the location and date of capture, for example America/Denver. A named zone models historical daylight-saving rules more safely than silently assuming the Mac's current zone.

4. Preview a bounded clock correction

If the camera was fast or slow, add a measured correction before matching. Compare a known photo moment to the track, keep the correction bounded and review how all photos move against the timeline.

5. Interpolate only between brackets

For a capture between two GPX points, interpolate between those two coordinates. Do not use a nearest point before the track begins, after it ends or across a recording gap too wide to support a useful claim.

6. Review wider gaps one photo at a time

A result can be mathematically bracketed but operationally weak. Keep the seconds before and after visible, and require a specific decision for each non-high-confidence photo.

7. Write reversible output

Prefer XMP sidecars when you want image bytes untouched. If you need embedded GPS, create a new compatible copy, re-read its metadata and retain source and artifact hashes in a portable receipt.

The truth boundary

GPX interpolation estimates where the recorder was at a time. It does not prove where the camera was if the recorder and photographer separated, the clock model is wrong or the track has gaps. Keep that limitation with the export.