Extract track from iPhone mapillary app

Hi as I’ve written in this bug I did record photos with my gopro 3 and the iphone mapillary app.

Unfortunately there is a bug and nothing was transferred to the phone.

Is there any way to extract the GPS trace from mapillary? I could then upload the photos manually.

In the current version, GPS data etc is written in binary, so not much you can do unfortunately.

I’m working on v2 of the action camera support right now though. This will save all data into readable json files. In the future I will add GPX support as well.

This all goes in conjunction with the upcoming desktop app, so that you don´t have to sync with your phone but can connect your action cameras to the computer instead. WiFi speed on the Hero3 is really really horrible.

Thanks @Anders I will then get rid of the photos and wait for the desktop app. :disappointed:

Yeah sorry about that :confused:

I’m using v4.1.18 of iOS app and there doesn’t appear to be a way to extract the GPX files from the phone. When I download the sequence folders to my laptop using iTunes, there is an additional Meta file but it doesn’t contain any useful info.

I know I can add EXIF to the photos on the app but that’s not what I’m asking. I simply want a separate GPX file to upload to say, WikiLoc or use in Lightroom to associate photos taken with my DLSR or GoPro.

Any ideas? I know the Android app gives you a GPX file, but it has other serious bugs, like it keeps on crashing during upload of pics and you can’t adjust exposure while capturing images.

@Anders any news on this Mapillary desktop app?

Or can you convert the binary blob into a GPX file for me? I have recorded many photos with my GoPro 3 and they don’t seem to transfer to to the iPhone 5 at all.

@seb @laye


Look at this.

It’s a bit convoluted, compared to getting the app to give us a GPX file, but I select “write exif data to files” in the app, then copy the photos onto my pc.
I delete the thumbnail images, and then (because i’m lazy) copy exiftool.exe and gpx.fmt (gps format file).

Through a command prompt in that directory, just type
exiftool -p gpx.fmt *.jpg > trace.gpx
then trace.gpx is created in the same folder as the photos with all the lat/long.

Sadly the elevation data doesn’t get written into the exif data. but it is available in a json format in the description of each file!

Anyway, I hope this helps a little bit.

Thanks for that tip, do I understand you correct, that there is a option to save GPS/GPX information into the photos within the Mapillary app? I could not find such option in the android version of the app. Have not checked the iPhone app.

Yes, top left icon on the Uploads page of the iOS app gives you the option to Add EXIF tags. I’m unsure for the android app.

OK, I will give that a try. I assume this applies to new photos taken only. Or do you know if it will apply the GPS/GPX/EXIF information to my +10000 photos on my GoPro in retrospective?

Honestly, not sure! My fingers are crossed that it will do it retrospectively for you.

On the Android app, there is a separate GPX file that is included in the folder where the images are. Also, I think the Android app automaticaly adds location to the images as they’re taken, so there’s no need to carry out that extra step (of assigning EXIF) on Android.

Thanks @Gness I was able to extract the GPX file from a set of photos from my last trip. On that day, somehow, my GPS tracker app did not track the last 1/3 of the journey so I needed to use the images to extract the GPS track and it worked well.

I tweaked the gpx.fmt file to format the output json to my liking.

You’re right about the elevation data though. Do you know if there’s an option in Exiftool to read off the altitude value from the description of the image file?

1 Like

I’m sure there’d be a way to parse the strings in the descriptions field of the exif and extract the altitude data from there (as opposed to the gpsaltitude field), but I’ve not had the time to tackle it.

Please make some time… :smiley:

Sorry for the late reply. I need to fix my notifications.

Right now: you can create a GPX file from the JSON files using a script (user friendly? no)
Soon: the iOS app will create and use a GPX file (user friendly? yes)


Hi @Anders can you also make iOS app to add lat/lon to the images as they’re being captured, like it does on Android, so we can get rid of the annoying ‘Add EXIF’ step prior to downloading to the laptop. Thanks.

We used to do that before. The drawbacks were that adding EXIF is slow so capture rate was held back. By doing this later we can add one more capture per second (2 -> 3 fps), for instance. It also decreased stability by doing this in real-time.

Having said that, in an upcoming update I have a new much much faster EXIF implementation (about 40x faster) so we might be able to add this back without limiting the capture rate.


That’s great news. Thanks @Anders. If the speed improvement is as good as you say then yeah, it’ll be great to have the EXIF written directly onto the images as they’re captured rather than doing it as a separate step.

Even if you decide not to add this feature back, there’s another thing I want to mention about adding EXIF info. When I was in vacation last month, I couldn’t transfer my images to the laptop for a couple of days as I forgot to get a main adapter from UK to European standard and the hotel didn’t have one to lend me. So after each trip (of capturing a couple of thousand images) I’d run Add Exif. After several trips, the images captured quickly piled up to over 10,000 but each time I ran Add Exif, it would start counting from 1, so it was taking longer and longer, even though 8000 of them have already been tagged with lat/lon info.

I’m not sure how common this is with users, where you just pile up the images captured prior to uploading right away, for whatever reason.

My question is, is the algorithm for adding EXIF simply looks at each image and tag every single picture regardless of where it’s already been geotagged or does it skip the ones that’s already been tagged?

I was expecting the process to do the latter and only tags those that are not. So,as per last example, if you have 10,000 images and 8000 of them having already geotagged, rather than starting 1 of 10000, it would say tagging 1 of 2000 and only tag the ones which need to be tagged.

There is a check if it’s been processed or not before, which adds a little overhead but the whole image is not read in, just the EXIF information, but it still takes some time and it would start from the beginning every time.

The new system is a lot faster so shouldn’t be a big problem unless you have a very old phone and 100000+ images.

An improvement we could do is to store it in a database which photos have been processed, that would make it a lot faster to skip the photos that don’t need processing, but it less fail-proof. I’ll add that to my TODO list of possible improvements.