Where Was This Photo Taken? Read the GPS in a Photo's EXIF and Map It
If the photo still has its EXIF, the answer is inside the file: a phone writes the GPS fix into the image at the moment of capture, and any browser can read it back and put a pin on a map. If the photo went through WhatsApp, Instagram or Facebook, that block is gone and no tool can recover it; you will have to place it by hand. Below: what the tags look like, who strips them, how to map a folder of photos for free, and why the same tag is a privacy problem.
Everything said about the tool below was checked on the live page with a test photo; the raw EXIF was read with the library the tool uses. Where a claim comes from a platform's documentation instead, we say so.
How a phone writes the photo GPS location into EXIF
EXIF is the metadata block a camera writes into a JPEG or HEIC next to the pixels: make, model, exposure, the time of capture. When location services are on for the camera app, the phone adds a second block called the GPS IFD, and that block is what every "where was this photo taken" tool reads.
The coordinates are split across paired tags. GPSLatitude holds the latitude as three numbers (degrees, minutes, seconds) and GPSLatitudeRef holds the hemisphere, N or S. GPSLongitude and GPSLongitudeRef do the same for longitude with E or W. GPSAltitude is the altitude, with GPSAltitudeRef saying whether it is above or below sea level. GPSImgDirection is the compass heading the phone was pointing at, in degrees from north, when the shutter fired. GPSImgDirectionRef says whether that heading is true (T) or magnetic (M) north; phones usually write T, and the test photo reads T. The capture time lives outside the GPS block as DateTimeOriginal, written in the camera's own clock with no time zone; newer phones add OffsetTimeOriginal so the zone can be recovered.
The split matters because the raw number forgets which half of the world it is in. Here is what the exifr library prints for a test photo, asking for the decimal coordinates followed by the raw tags: -17.25 -88.75 [ 17, 15, 0 ] S [ 88, 45, 0 ] W 270.
[ 17, 15, 0 ] is 17 degrees, 15 minutes, 0 seconds; 15 minutes is a quarter of a degree, so the magnitude is 17.25, and the S turns it negative: -17.25. The longitude works the same way, 88 degrees 45 minutes west becomes -88.75. The 270 is the GPSImgDirection, due west. A tool that reads GPSLatitude and ignores GPSLatitudeRef will place a photo from Brazil in the northern hemisphere, which is why "the map put my photo in the wrong country" is usually a missing hemisphere, not a bad GPS fix.
A photo with no GPS block is a normal photo. Run the same library over a test JPEG that carries no EXIF at all and the parse resolves to undefined: not an error, not a corrupt file, just nothing to read. The map tool treats that as "no location" and asks you where the photo belongs.
A photo from a dedicated camera usually has no GPS block either: most have no receiver unless paired with the maker's app or a GPS accessory. That is not a stripped photo; it never had one.
Who strips the photo GPS location, and who keeps it
Nothing in this section was measured by us. Which apps keep EXIF is a product decision each platform documents and changes, so read the list as "as of 2026, per the platforms' own help pages and our day-to-day experience", and verify a specific path by sending yourself one photo and reading it back with the tool in the next section.
Removes the GPS block: WhatsApp, which recompresses every image sent as a photo and drops the metadata with it; Instagram and Facebook, which strip location from uploads by design; most phone e-mail clients when you pick a smaller size, because "optimise" means re-encode; a screenshot, which has no GPS to begin with because no camera took it; and the iOS share sheet when its location option is turned off.
Keeps the GPS block: AirDrop between Apple devices; Google Photos when you download the original (an in-app share keeps it too unless its "Hide photo location data" setting is on); a cable or card copy to a computer; cloud sync that stores the original file (iCloud Photos, Google Photos backup, Dropbox camera upload); and WhatsApp when the picture is sent as a document instead of a photo, because a document is not re-encoded.
A few more, by design of those apps, as of 2026: Telegram and Signal strip it when a picture is sent as a photo; Telegram keeps it when it is sent as a file; iMessage keeps it, which is what the share sheet's Location toggle is for; an MMS to a non-Apple phone is recompressed by the carrier and loses it; a Gmail attachment is not touched.
The practical rule: if a photo arrived through a chat app or a social network, assume the location is gone before you spend time looking for it. If it came off the phone by cable, AirDrop or a proper backup, assume it is there.
iPhone HEIC: where was this photo taken when the file ends in .heic
Since iOS 11 (iPhone 7 and later) an iPhone saves photos as HEIC by default, a container built on the HEIF standard that holds the same picture at roughly half the size of a JPEG. The metadata model is the same: the EXIF block, GPS IFD included, is embedded in the container, and GPSLatitude means exactly what it means in a JPEG. The problem is that many desktop tools and most browsers other than Safari cannot open the file at all, so "where was this photo taken" becomes "how do I even see it" before anyone gets to a map.
Two ways out, both per Apple's own documentation rather than tested here. The iPhone can be told to hand over JPEGs when transferring to a computer (Settings, Photos, "Automatic" under Transfer to Mac or PC), or to shoot JPEG in the first place (Settings, Camera, Formats, "Most Compatible"); both keep the GPS tags. Or you keep the .heic files as they are and use a viewer that decodes HEIC itself.
The free tool in the next section does that in the browser: the HEIC is decoded on your machine, only for the photos that need it, and nothing is sent to a server to be converted. That is the tool's documented behaviour and what its accepted-formats label says ("JPG, PNG, WebP and HEIC"); we tested the JPEG path and read the label; no real iPhone .heic was dropped for this post.
See it on a map, step by step: a free EXIF GPS viewer in the browser
Open the free Photo Map and drag your photos onto the page, or click to select them. It accepts JPG, PNG, WebP and HEIC, and it reads every file in the browser; the line at the top of the page says it plainly, "Your photos stay in your browser · Nothing is stored — reloading the page clears everything", and we confirmed both halves. What happens next, in order.
- Every photo with a GPS fix gets a pin the moment it is read. Dropping the test photo above gave one pin, and the gallery header read "1 photo · 1 with location". The legend under it names the two pin colours: "From photo GPS" and "Placed by hand".
- The pin sits at the decimal coordinates, hemisphere applied. For the test photo that is 17.25 south, 88.75 west, open Pacific, so the basemap around it was solid blue.
- A photo that carries
GPSImgDirectionalso gets a direction cone: a wedge drawn behind the camera pin, pointing the way the phone was facing. For the test photo's270the wedge pointed left on the map, due west. A photo with no heading gets a pin and no wedge. - Photos without a GPS block go to a tray above the gallery instead of the map. With the no-EXIF test photo added, the tray read "1 photo without location — click one, then click the map". Click the photo in the tray, the title changes to "Click the map to place 1 photo", click the spot on the map where it belongs, and the pin appears there with a "Placed by hand" badge on the card. The header then read "2 photos · 2 with location".
- A hand-placed pin can be dragged: select its card, press on the pin and move it; we dragged one 80 pixels and it moved 80 pixels. A pin that came from the photo's own GPS cannot: we dragged it the same way and it snapped back to where the camera said it was. A GPS reading is a fact, not a guess you are correcting.
- Every card has an info button. It opens the EXIF dialog for that photo, a plain list of what the file contains: camera make and model, "Date taken", the UTC offset when the phone wrote one, latitude and longitude as decimals, and a "Direction" row that shows the heading in degrees, or a dash when the photo has none. For the test photo the dialog read "Direction 270", "Latitude -17.250000", "Longitude -88.750000".
- The card shows "Taken on" followed by the
DateTimeOriginaldate and time, formatted for the language of the page, "Taken on Mar 15, 2026, 9:30 AM" for the test photo, so a day of shooting sorts itself visually without opening anything. - Nothing is uploaded and there is no account. We reloaded the page after placing two photos and the gallery was empty: zero cards, zero pins. If you need the map to still be there tomorrow, that is the last section of this post.
There is no export button. The tool does not write KML, GeoJSON or a CSV of the pins, and this post will not promise one; it is a viewer. For one photo's coordinates, the EXIF dialog gives them as decimals you can paste anywhere.
Test files you can use
If you want to test the map above with real GPS EXIF instead of your own photos, here is where to get some — tested 11 September 2026 with the tool's own exifr library.
- The old repo is archived — new samples go to its successor.
ianare/exif-sampleswas archived on 22 April 2025, and its own README tells contributors to add new samples toianare/exif-pyinstead, under itstests/resources/folder; both repos still work fine for downloading test files today. - Where the real GPS photos live.
jpg/gps/inexif-samplesholds about ten photos with a genuine GPS fix, sourced from gaia-gis.it. User-contributed images in that repo carry no repository-wide licence file; its README releases them under CC BY-SA 4.0, free to test with but not to republish without credit — see the licence terms.exif-py's BSD-3-Clause licence covers its code, not any test images inside it. - A worked example.
DSCN0010.jpgreads43.46744833333334, 11.885126666663888, cameraNIKON COOLPIX P6000, taken2008:10:22 16:28:39. It carries noGPSImgDirectionand noGPSAltitudetag, which is exactly why dropping it on the map above draws no direction cone;DSCN0021.jpgandDSCN0042.jpgin the same folder behave the same way. - A filename that lies.
jpg/tests/45-gps_ifd.jpgclaims a GPS IFD in its own name;exifrfinds no GPS data in it at all. - A HEIC file that is not what its folder promises.
heic_hdlr_box.jpgsits inexif-py's HEIC test folder with a.jpgextension, but is actually HEIF-format data;exifrreads no EXIF from it whatsoever, so a mismatched extension is its own trap.
Privacy: the photo GPS location is a leak on social media
Turn the first section around. The same GPSLatitude that lets a surveyor prove a photo was taken at the right utility pole lets a stranger read where you live from a picture of your kitchen. A GPS fix is typically good to a few metres outdoors, so a photo taken in a garden is a photo of a specific garden with a specific street address, and DateTimeOriginal says when you were there. A series of photos from the same phone over a week is a pattern of life: home, work, the school run, the gym.
The large platforms strip the block precisely because of this. That protection ends where their upload form ends. A photo sent as a document on WhatsApp, attached at full size to an e-mail, dropped into a shared folder, posted on a forum that keeps originals, listed on a marketplace or handed to a printing service still carries everything.
How to remove it before sharing, spec-sourced from the platforms' own documentation rather than tested here: on an iPhone, tap "Options" at the top of the share sheet and turn Location off for that share, or turn off Location Services for the Camera app so the tag is never written; on Android, open the photo in Google Photos, open its details and choose to remove the location; on a Mac, Photos exports a copy without it (File, Export, untick "Location Information"); on Windows, Explorer's Properties, Details tab has "Remove Properties and Personal Information"; on any desktop with a terminal, the standard tool is ExifTool, and the documented invocation exiftool -gps:all= photo.jpg deletes every GPS tag while leaving the rest of the EXIF in place, and leaves a photo.jpg_original backup beside the file, the copy a first-time user then shares by mistake. We did not run that command for this post and quote it as documented.
A quick way to check any photo you are about to send is to drop it on the map above. If it lands somewhere, it carries a location. If it goes to the "no location" tray, it carries no GPS tag. The rest of the EXIF, date and device included, is still in the file.
For teams: a photo map of every site visit
For a field team the leak is the feature. An inspector who photographs a cracked culvert wants that photo to carry where it was taken, when, and which way the camera faced, because six months later someone else has to find the same culvert with a different phone. A folder of two hundred site photos with their GPS intact is a map of the visit; the same folder after a trip through a chat group is two hundred pictures of concrete.
The free tool answers "where was this taken" for one person, once, in one browser tab. The moment the map has to outlive the tab, that is what Geodocs is built for. Photos go into an album for a site visit inside a team workspace, each photo becomes a pin on the team's map with its date and device kept, and the album sits next to the forms, the layers and the reports for the same site. Access is by invitation to the workspace. There is no public link to an album, by design; a map of every asset your team inspected should not be one forwarded URL away from anyone.
Two things the tool does not do. It does not save: the pins live in your browser until you reload; if you built a map you want to keep, the workspace above is the path, not a download. And it does not export the pins to KML or Shapefile for Google Earth or a GIS. For the field data that arrives as KML, KMZ or Shapefile, the KML and KMZ guide covers opening and converting them, and the Shapefile how-to shows how to open a Shapefile online without installing anything.