Skip to content

GPX Bird Photography: Match a Multi-Day Trip's Photos to a Phone Track

The Jade GT Location tab showing a loaded GPX track and a preview of photos matched to points along the track. The Jade GT Location tab showing a loaded GPX track and a preview of photos matched to points along the track.
A GPX track loaded on the Location tab, with each frame matched to the nearest fix by timestamp.

The short answer

Most bird bodies do not write GPS, so the field-standard fix is a phone GPX track matched to your photos by capture time. The two things that decide whether the coordinates land right are clock drift between the phone and the camera, and the match tolerance you pick when a 200-frame burst at one perch all shares a single nearby fix. Sync the clocks, set the offset once, and write the result to EXIF GPSLatitude and GPSLongitude on every frame.

You spent four days at the refuge. Three blinds, two feeder stations, one long walk along the levee at dawn looking for the rail that everyone said was there and that you finally got, backlit, on the last morning. The cards are full. The phone in your pocket logged a GPX track the whole time. And the EXIF on every single one of those frames says the same thing it always says on a wildlife body: no location.

This is the canonical case for GPX-to-photo matching, and birding stresses it harder than almost any other genre. A landscape shooter makes a frame every few minutes. A wildlife shooter makes two hundred frames of one bird at one perch in ninety seconds, then walks four hundred yards and does it again. The match has to survive both the dense bursts and the long gaps, and it has to do it for thousands of frames across multiple days without you babysitting each one.

A note before the walkthrough: I shoot architecture and street, not wildlife, so the field-craft below is drawn from how the wildlife pros I talk to describe their trips, plus the published references at the bottom of this post. The metadata mechanics, the clock math, and the matching logic are the part I can speak to directly, because that is what Jade GT does. The bird-behavior context is theirs; the timestamp arithmetic is mine.

GPX bird photography geotagging means exactly one thing: writing a latitude and longitude into each photo's EXIF block from a coordinate the camera never recorded. The phone is just the source of that coordinate. Nothing uploads. The whole job is matching a time in the photo to a time in the track, then writing the result back to the file on your disk.

How does GPX-to-photo matching actually work?

A GPX file is a list of points, and each point carries a timestamp and a coordinate. GPX is a lightweight XML format for the interchange of waypoints, routes, and tracks, and the part that matters for matching is the track: an ordered list of <trkpt> elements, each stamped with a UTC time and a latitude and longitude on the WGS84 datum. Your phone drops one of these every few seconds while you walk.

Your camera, meanwhile, stamps every frame with a capture time in EXIF DateTimeOriginal. The match is a join on time: for each photo, find the track point whose timestamp is closest to the photo's capture time, and copy that point's coordinate into the photo.

That is the whole idea, and ExifTool's geotag documentation is the authoritative reference for it, down to the exact tags involved. ExifTool calls the photo's reference time Geotime and notes that the GPS position is calculated "by interpolating between fixes in the GPS track log." Two words in that sentence carry the entire workflow: interpolating, and fixes. Hold onto both. They come back when we talk tolerance.

GPSBabel's GPX documentation is worth a bookmark for the same reason: if your tracker app exports a slightly non-standard GPX variant, GPSBabel converts it to clean GPX 1.1 that any matcher will read. It is the plumbing nobody talks about until a track refuses to load.

Recording the track: phone apps and field protocols

You do not need a dedicated GPS puck. The free path is a phone logging app you start when you start shooting and stop when you stop. Gaia GPS exports a recorded track as GPX with a few taps, and it is one of the more common apps birders already carry for navigation. On Android, GPS Logger does the same job; on iOS, myTracks and Geotag Photos Pro 2 are the usual picks.

Jade GT ships its own logger so you do not have to trust a third-party app with the only copy of your day. Open jade-gt.com/app.html?mode=logger on your phone, hit Start, and put it in your pocket. It records a GPX track locally with a UTC clock for camera sync, and hands the file to the desktop app over a QR-code bridge. No account, no upload.

How you record maps cleanly onto how birders already log sessions. eBird's protocol guide splits effort into Stationary and Traveling: Stationary is a single fixed spot, the blind or the feeder where you did not move more than about 100 feet; Traveling is everything past that, the levee walk where you covered real distance. The same split governs your track. A morning in a blind produces a tight cluster of near-identical fixes; the walk produces a line. Your matcher has to handle both shapes in one file.

One track per trip, not one per session

Record continuously, or at least keep every session's GPX from the trip. The matcher needs a fix near every photo's timestamp. A gap in the track is a gap in your coordinates, and the frames that fall in the gap inherit the nearest fix on either side, which may be the wrong blind entirely.

Why clock drift is the thing that ruins a match

Here is the failure that ruins more wildlife geotags than any other: the camera clock and the phone clock disagree, so every photo lands somewhere down the trail from where you actually stood.

GPS time is UTC, always, broadcast from the satellites. Your phone's track is stamped in UTC. Your camera, though, is stamped in whatever you last set it to, and most cameras drift a few seconds a month, never get a daylight-saving update, and sit one timezone off from wherever you traveled. If the camera is thirty seconds fast, every frame matches a track point thirty seconds early, which on a moving walk can be a hundred feet of error and the wrong side of a pond.

ExifTool models this exactly with two tags. Geosync is the offset between camera time and GPS time, and the documentation notes it is needed "only when the image timestamps are not properly synchronized with GPS time." You measure the offset once and apply it to the whole shoot. Better still, if your camera drifts measurably across a multi-day trip, you can set more than one Geosync point and ExifTool will do "piecewise linear interpolation/extrapolation between synchronization points," correcting a clock that runs slow day over day.

There are two clean ways to find your offset:

  1. Photograph the phone's clock. Before the first bird, open the phone's UTC display (the Jade GT logger shows one for this reason) and take a frame of it. The difference between the time in the photo and the time of the photo is your Geosync offset.
  2. Set both clocks to UTC at the trailhead. Match the camera to the phone's UTC time before the first frame and the offset is zero. This is the same discipline that the GPX-matching workflow in Lightroom relies on, where a wrong base time silently shifts every tagged photo.

Sync before the first frame, not after

You cannot fix a clock you did not measure. If you forgot, all is not lost: find one frame where you know the true location (the parking lot sign, a marked overlook) and back-calculate the offset from where that frame landed versus where it should have. But measuring up front is thirty seconds of work that saves an hour of detective math.

Match tolerance: interpolate or snap to the nearest fix?

Now the wildlife-specific part. When you fire two hundred frames at one perched bird in ninety seconds, your camera produces two hundred timestamps inside a window where the phone logged maybe two or three fixes. What coordinate should each of those frames get?

Two strategies, and the brief difference between them matters more in birding than anywhere else:

Strategy What it does Best for
Nearest point Snaps each photo to the single closest fix in time Stationary bursts: a blind, a feeder, a perch. Every frame is in the same place anyway.
Interpolate Estimates a position between two fixes, weighted by time Traveling frames: birds-in-flight while you pan and walk, fly-bys along a path.

For the 200-frame perch burst, you want nearest point. The bird is not moving and neither are you; all two hundred frames genuinely belong at one coordinate, and snapping them to the closest fix puts them there cleanly. Interpolation would invent tiny meaningless position differences between frames shot from the same tripod.

For the levee walk where you are tracking a harrier in flight, you want interpolation, which is the behavior ExifTool describes when it calculates Geotime by interpolating between fixes. A frame shot halfway between two track points gets a position halfway between them, which is closer to where you actually stood than snapping to a fix that is fifteen seconds stale.

The practical rule the pros I talk to use: set a maximum time tolerance (often 60 to 120 seconds) so a photo never inherits a fix from an unrelated part of the trip, then let nearest-point handle the dense bursts and interpolation handle the moving frames. A frame whose closest fix is ten minutes away is not in that location; it is a gap, and it should be flagged, not silently tagged.

Why density is the birding-specific trap

A landscape catalog might have one photo per GPS fix. A birding catalog routinely has 50 to 200 photos per fix. That ratio is why naive matchers choke: they were tuned for sparse frames and they either tag every burst frame identically without telling you, or they interpolate noise between fixes that were never meant to be split. Knowing which mode you are in per folder is the whole skill.

Writing GPS back to RAW and JPEG

Once the match resolves, the coordinate has to land in the file's metadata, and the field IDs matter because they are what every catalog tool reads. The geotag is written into the EXIF GPS block, principally GPSLatitude, GPSLongitude, GPSLatitudeRef, and GPSLongitudeRef (the Ref fields are the N/S and E/W hemisphere flags that a surprising number of broken exports forget). Altitude, where your track recorded it, goes to GPSAltitude and GPSAltitudeRef.

JPEG is the easy case: the GPS block is written directly into the EXIF segment of the file. RAW is where workflows diverge. Some tools write GPS into the RAW container's EXIF; others write an XMP sidecar carrying exif:GPSLatitude and exif:GPSLongitude in the XMP namespace, leaving the original RAW byte-for-byte untouched. Both are valid, and Lightroom, Capture One, and Bridge all read both. The sidecar approach is the safer default for a RAW archive you want to keep pristine.

Jade GT writes GPS directly to the file's EXIF for JPEG and for RAW formats that support it, on your machine, with nothing uploaded. The coordinate you matched from the phone track ends up in the same field the camera would have used if it had a GPS chip, which means it shows up in Lightroom's Map module, the search filter, and the IPTC location block in Bridge with no extra step.

Location names are a separate field from coordinates

The coordinate goes in the EXIF GPS block. The human-readable place ("Bosque del Apache, South Loop") goes in the IPTC location fields: Iptc4xmpCore:LocationShownSublocation, City, ProvinceState, and CountryName. Filling both means your archive is searchable by map and by name. For a multi-day trip, keywording the blind name per folder is often more useful than the raw coordinate when you go looking for that shot in two years.

A note on sharing location data for sensitive species

This is general field-ethics context, not legal advice, but it shapes how you should handle the coordinates you just wrote. Audubon's guide to ethical bird photography is explicit that for sensitive species, especially owls and anything nesting, you should strip GPS metadata before publishing publicly, because precise coordinates on a rare bird can draw crowds that disturb it. NANPA's principles of ethical field practices make the same point as a baseline expectation for nature photographers.

The workflow answer is not to skip geotagging. It is to geotag your archive fully (you want to find that shot later) and then export a stripped copy for anything you post publicly. Write the coordinate to your master file; remove it on the way out the door. Keywording the location by name rather than coordinate (the blind, not the exact <trkpt>) is the field-craft compromise that All About Birds describes around blinds and approach distance, and it travels better than a raw lat/long anyway.

The whole pass, start to finish

Here is the multi-day birding trip collapsed into one matching pass:

  1. Record one continuous GPX track per day with a phone app or the Jade GT Mobile GPS Logger.
  2. Sync the camera clock to UTC at the trailhead, or photograph the phone's UTC clock to capture your Geosync offset.
  3. Drop the folder and the GPX onto the Location tab. Multiple days, multiple tracks, all loaded at once.
  4. Set your time tolerance (60 to 120 seconds) and pick nearest-point for the blind bursts, interpolation for the moving frames.
  5. Preview on ten photos. Confirm the dense bursts all landed at the right blind and the walk frames trace the levee, before you commit to thousands.
  6. Run the pass. GPS lands in EXIF GPSLatitude and GPSLongitude on every frame, JPEG and RAW alike.
  7. Keyword the location by name per folder, and strip coordinates from anything you publish for a sensitive species.

The reason to do this before Lightroom opens is the same reason it matters for any high-volume shoot: every pass over thousands of files costs the same whether you are matching GPS or renaming. Doing the geotag pass once, up front, means your catalog imports already searchable by map.

Nature TTL's wildlife tutorials are a good companion read for the field-craft half of this, the part that produces the burst-heavy folders in the first place. This post is about what happens to those folders after the card comes out.

FAQ

My camera has built-in GPS. Do I still need a GPX track?

If the GPS held a lock for the entire trip, no. In practice, wildlife bodies with GPS drain the battery fast, lose lock under canopy, and pair to a phone over Bluetooth that sleeps in your pocket. Most shooters find half their frames say "no location." The GPX track is the rescue path for the missing half, and the clean path for bodies with no GPS at all.

What happens to a 200-frame burst where the phone only logged two fixes?

With nearest-point matching, all 200 frames snap to the closer of the two fixes, which is correct: you and the bird did not move during the burst. With interpolation, the frames spread across the line between the two fixes, which is wrong for a stationary perch. Pick nearest-point for bursts. This is the single most important setting for birding volume.

Will the geotag survive when I import into Lightroom?

Yes. The coordinate is written to the standard EXIF GPS fields (GPSLatitude, GPSLongitude, and their Ref flags) that Lightroom, Capture One, and Bridge all read by default. It shows up in the Map module, the search filter, and the IPTC location block with no extra step.

Can I geotag a trip from last year that has no track and no GPS?

Partly. With no track, you cannot reconstruct the path, but you can drop a pin per location and apply it to that folder of photos. A blind's worth of frames all share one coordinate anyway, so a pin-drop per blind recovers most of the value. See the companion post on geotagging without a tracker.

Try it on one day's folder

Pick the densest folder from your last trip, the one blind where you shot a thousand frames of one bird, and drop it onto Jade GT with that day's GPX. Set nearest-point, preview ten frames, and watch the whole burst land at the right coordinate. If the match is what your archive needed, the rest of the trip is the same gesture.

Open Jade GT

Sources


Shoot a segment I do not cover here? I write these from the metadata side and lean on the field pros for the rest. If your trip's matching problem does not fit the pass above, reply or email, and the next version comes from the workflows that did not fit.

Reply to Kenny

Questions, corrections, or a workflow story of your own? Send a note. It goes straight to my inbox.