Skip to main content

Image EXIF map

Extract GPS locations from EXIF data, plot them on a map, and export to CSV, GeoJSON, or KML.

Free & unlimited

Upload JPEG photos to extract GPS coordinates from their EXIF metadata.

Smartphones and GPS-enabled cameras typically include location data.

All EXIF parsing happens in your browser — photos are never uploaded to our servers.

If location was switched on, every photo carries the coordinates of where the shutter fired, and a folder of photos is therefore a map of a trip nobody ever drew. This page reads the GPS block straight out of each JPEG with a small purpose-written parser — it walks the APP1 segment and the TIFF directories itself rather than loading a metadata library — pulls latitude, longitude, altitude, capture date, camera make and model, and plots everything on a MapLibre map. There is also a sortable table and a thumbnail grid for the same data, a date range and total trip distance, and export to CSV, GeoJSON or KML.

Key facts about Photo GPS map

Key facts about Photo GPS map
ParserA hand-written JPEG EXIF reader: it finds the 0xFFE1 APP1 marker, checks the Exif header, reads the TIFF byte order and walks IFD0, the EXIF sub-IFD and the GPS IFD
Tags readGPS latitude and its N/S reference, longitude and its E/W reference, altitude, DateTimeOriginal with DateTimeDigitized and DateTime as fallbacks, camera make and camera model
Coordinate conversionDegrees, minutes and seconds rationals become signed decimal degrees, and are also displayed in DMS with a hemisphere letter
FormatsJPEG. The file picker also offers TIFF, but the parser requires the JPEG start-of-image marker, so a TIFF returns no location
Three viewsMap with markers and popups, a sortable table, and a thumbnail grid — the same photos, three ways of reading them
Sorting and filteringSort by file name, capture date or latitude, ascending or descending, with a text filter across the list
Trip distanceThe sum of great-circle distances between consecutive located photos in list order, using the haversine formula on a 6,371 km earth radius
SummaryPhotos loaded, how many have GPS, how many do not, the capture date range and the list of distinct camera models
Map engineMapLibre GL JS, loaded on demand, with OpenStreetMap raster tiles
Outbound linksEach photo links to its position in Google Maps, OpenStreetMap or Apple Maps, selectable
ExportsCSV (filename, latitude, longitude, date, camera, altitude), GeoJSON points, or KML placemarks — always only the photos that have coordinates

What happens to your file

Your photos are read locally and parsed in this tab; no image is uploaded, and the CSV, GeoJSON and KML exports are generated in page memory and saved by your browser. The map view is the exception worth stating plainly: its background tiles come from tile.openstreetmap.org, so that tile server sees your IP address and which map squares are being displayed, which implies roughly where your photos were taken. The photos and their exact coordinates are never sent in those requests. Use the table or grid view, which need no tiles, if you would rather not reveal even the area.

About this tool

  1. 1

    Select or drop your photos

    Add a whole folder of JPEGs at once. Each is parsed immediately and sorted into the located and not-located groups.

  2. 2

    Read the summary

    How many photos have GPS, how many do not, the range of capture dates and which camera models appear. The photos with no GPS are listed too, so nothing silently disappears.

  3. 3

    Switch to the view that answers your question

    Map for where, table for exact coordinates and dates, grid when you need to recognise the photo by its thumbnail.

  4. 4

    Sort and filter

    Sort by name, date or latitude, and filter by text. Sorting by date before reading the trip distance makes that number mean something.

  5. 5

    Open a location elsewhere

    Pick your preferred map provider and follow the link on any photo to see the spot in Google Maps, OpenStreetMap or Apple Maps.

  6. 6

    Export the positions

    CSV for a spreadsheet, GeoJSON for a mapping tool, KML for Google Earth. Only located photos are exported.

Specs & compatibility
Accepted typesimage/jpeg primarily; the picker also lists TIFF, which the parser cannot read
Photos at onceNo fixed cap; all are held in memory with object-URL thumbnails
Coordinate outputDecimal degrees and degrees-minutes-seconds, plus altitude in metres where present
Distance modelHaversine great-circle, straight lines between consecutive photos — not a road or trail distance
Date handlingEXIF dates use colons in the date part; they are normalised to a readable form for display and export
ExportsCSV, GeoJSON, KML
Map requirementWebGL for the map view; the table and grid views work without it
NetworkOnly for basemap tiles in map view
Cost / accountFree, unlimited photos, no signup
  • Sort by date before reading the trip distance: the figure is the sum of straight-line hops between consecutive photos in the current list order, so an unsorted list gives a meaningless number.
  • Photos with no GPS are usually screenshots, images received through a messaging app, or shots taken with location services switched off for the camera.
  • The distance is great-circle, not driven — it is a lower bound on how far you actually travelled.
  • Altitude comes from the same GPS fix as the position and is noticeably less accurate than the horizontal coordinates.
  • Use the table view on a slow connection: it needs no map tiles at all and shows the same coordinates.
  • Export GeoJSON and open it in the GeoJSON viewer on this site when you want to restyle or combine the points with other data.
  • If every photo lands in the wrong country, check the hemisphere references — a west longitude written without its W reference plots in the eastern hemisphere.
  • EXIF GPS extraction from JPEG
  • Map, table and grid views
  • Decimal and DMS coordinates
  • Capture date, camera make and model
  • Date range and distinct camera list
  • Total trip distance
  • Google, OpenStreetMap and Apple Maps links
  • CSV, GeoJSON and KML export
  • Mapping a holiday or a hike from the photos you already took.
  • Working out where an old photo was taken when you no longer remember.
  • Checking which photos in a folder still carry location before you publish them.
  • Building a GeoJSON or KML of site visits from field photographs.
  • Documenting an inspection or a survey with positions taken straight from the images.
  • Sorting a mixed folder into located and unlocated photos before archiving.
No. Each JPEG is read locally and its EXIF GPS block is parsed by code running in this tab; thumbnails are object URLs pointing at the local file, and the CSV, GeoJSON and KML exports are built in page memory. The only network traffic is the map basemap: OpenStreetMap tile servers see your IP and which tiles you request, which hints at the area. Your images and their coordinates are never transmitted. The table and grid views avoid tiles entirely.
Either the camera never recorded one or something removed it. Phones only write GPS when location access is granted to the camera app and a fix was available — indoors or in airplane mode there is often none. Screenshots never have it. Most social networks and messaging apps strip the whole EXIF block on upload, so any photo that reached you through one of them arrives without coordinates. Such photos are still listed here, just in the no-location group.
It is the sum of great-circle distances between consecutive located photos in the current list order, using the haversine formula with an earth radius of 6,371 km. Two consequences matter: sort by capture date first, or the order — and therefore the total — is arbitrary; and the result measures straight-line hops, not roads or trails, so it will be lower than the distance you actually covered, sometimes considerably so in mountains or cities.
Not directly. The parser looks for the JPEG start-of-image marker and then the APP1 EXIF segment, so HEIC files and camera raw formats are not read. If your iPhone is set to High Efficiency, either switch the camera to Most Compatible so it writes JPEG, or convert the HEIC files to JPEG first — the conversion normally carries the GPS tags across, and the converted files work here.
Only the photos that have coordinates. The CSV has one row per photo with filename, latitude, longitude, capture date, camera model and altitude. The GeoJSON is a point feature collection with the same fields as properties, ready for any mapping tool. The KML is a placemark per photo for Google Earth. All three are generated in the browser and saved straight to your downloads folder.
They are exactly what the camera wrote, converted from the EXIF degrees-minutes-seconds rationals to decimal degrees without rounding loss, so the tool adds no error of its own. The accuracy of the fix itself varies: a clear outdoor GPS lock is good to a few metres, while a phone falling back on Wi-Fi or cell positioning in a city can be out by tens or hundreds of metres. Altitude is always the least reliable of the three values.
View all

Part of File viewers that open the file in your browser

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy