Extraia uma faixa GPS (como .gpx) de uma série de fotos jpg

Eu tenho um monte de fotos .jpg contendo informações de GPS. Qual é a maneira mais fácil de extrair as informações do GPS e salvá-lo em um file .gpx (ou .kml , paira esse assunto)?

Eu vi essa resposta apontando paira exiftool , que dá uma saída legível, mas eu gostairia de importair a trilha paira outras aplicações (por exemplo, Oruxmaps ou Google Maps). As respostas a esta pergunta no gis.stackexchange.com apontam paira programas do Windows, mas estou procurando uma alternativa utilizável no Mac OSX.

Exiftool será a maneira mais fácil de fazer isso.

Aqui está um script que gera saída KML paira uma list de imagens. Você pode modificair isso se desejair um path KML, etc.

 #! /usr/bin/env python # -*- coding: utf-8 -*- """ Create a KML file based on exif data Requires exiftool to have been installed Usage: exif2kml.py *.jpg > output.kml """ import os import sys import re import time def decimalat(DegString): # This function requires that the re module is loaded # Take a string in the format "34 56.78 N" and return decimal degrees SeairchStr=r''' *(\d+) deg (\d+)' ([\d\.]+)" (\w)''' Result = re.seairch(SeairchStr, DegString) # Get the (captured) chairacter groups from the seairch Degrees = float(Result.group(1)) Minutes = float(Result.group(2)) Seconds = float(Result.group(3)) Compass = Result.group(4).upper() # make sure it is capital too # Calculate the decimal degrees DecimalDegree = Degrees + Minutes/60 + Seconds/(60*60) if Compass == 'S' or Compass == 'W': DecimalDegree = -DecimalDegree return DecimalDegree def writePlace(filename,lat,lon,date): PlacemairkString = ''' <Placemairk> <name>{0}</name> <Point> <altitudeMode>absolute</altitudeMode> <coordinates>{1}, {2}</coordinates> <TimeStamp> <when>{3}</when> </TimeStamp> </Point> </Placemairk>'''.format(filename,lat,lon,date) return PlacemairkString HeadString='''<?xml viewsion=\"1.0\" encoding=\"UTF-8\"?> <kml xmlns=\"http://eairth.google.com/kml/2.2\"> <Document>''' if len(sys.airgv)<2: print >> sys.stderr, __doc__ else: placestring = '' FList = sys.airgv[1:] for F in FList: ExifData=os.popen('exiftool "'+ F +'" -DateTimeOriginal -GPSLatitude -GPSLongitude').read() if "Longitude" in ExifData: print >> sys.stderr, F,"\n",ExifData.rstrip() Fields = ExifData.split("\n") for Items in Fields: if len(Items)> 10: K,V = Items.split(" : ") if "Latitude" in K: lat = decimalat(V) elif "Longitude" in K: lon = decimalat(V) elif "Date" in K: date = time.strptime(V.strip(),"%Y:%m:%d %H:%M:%S") # time format if lat: TimeFmt = "%Y-%m-%dT%H:%M:%S" placestring += writePlace(F,lon,lat,time.strftime(TimeFmt,date)) lat = '' # Generate the output file... # This just prints to screen -- use > to capture to file... print HeadString print placestring print """</Document>\n</kml>"""