9 votos

Extraer un track GPS (como .gpx) de una serie de fotos jpg

Tengo un montón de .jpg fotos con información de GPS. ¿Cuál es la forma más fácil de extraer la información del GPS y guardarla en un .gpx (o .kml Por otra parte, ¿se puede decir que la gente no se ha dado cuenta de lo que es la vida en la calle?)

He visto esta respuesta señalando exiftool que da una salida legible, pero me gustaría importar la pista en otras aplicaciones (por ejemplo, Oruxmaps o Google Maps). Respuestas a esta pregunta en gis.stackexchange.com apuntan a programas de Windows, pero estoy buscando una alternativa utilizable en Mac OSX.

0 votos

¿Estaría bien ejecutar una herramienta de Windows en un wrapper para OS X o estás buscando únicamente una herramienta nativa?

0 votos

@GeorgeGarside Claro, una herramienta de Windows en un wrapper serviría. Si es más fácil que hacer a mano un script que utilice exiftool y produzca una salida xml..

10voto

Pankaj Badhe Puntos 6

El propio exiftool ahora también puede generar archivos GPX . Puede descargar el gpx.fmt de la plantilla del Sitio web de exiftool y, a continuación, ejecute

exiftool -p ./gpx.fmt *JPG > output.gpx

Algunas opciones útiles:

  1. -if hace exiftool sólo procesa archivos con etiqueta gps,
  2. -fileOrder permite el procesamiento en un orden forzado,
  3. -d permite formatear la cadena de tiempo de datos.

Por ejemplo:

exiftool -if '$gpsdatetime' -fileOrder gpsdatetime -p ./gpx.fmt -d %Y-%m-%dT%H:%M:%SZ *JPG > output.gpx

1 votos

En realidad utilice exiftool de vez en cuando, y no sabía que tenía esta capacidad: ¡asombroso! Personalmente, creo que el verdadero valor de esto es proporcionar puntos de datos que pueden ser integrado con un trackfile GPX existente. He estado buscando un sustituto para el abusivo AllTrails y esta parece una forma razonable de hacerlo.

1 votos

Si estás extrayendo datos de un iPhone, debes utilizar este GPX. gist.github.com/reedriley/6051055

3voto

beroe Puntos 1605

Exiftool va a ser la forma más fácil de hacerlo.

Aquí hay un script que genera una salida KML para una lista de imágenes. Puedes modificar esto si quieres una ruta 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
    SearchStr=r''' *(\d+) deg (\d+)' ([\d\.]+)" (\w)'''
    Result = re.search(SearchStr, DegString)

    # Get the (captured) character groups from the search
    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):
    PlacemarkString = '''
    <Placemark>
     <name>{0}</name>
     <Point>
      <altitudeMode>absolute</altitudeMode>
      <coordinates>{1}, {2}</coordinates>
      <TimeStamp>
        <when>{3}</when>
      </TimeStamp>
     </Point>
    </Placemark>'''.format(filename,lat,lon,date)
    return PlacemarkString 

HeadString='''<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<kml xmlns=\"http://earth.google.com/kml/2.2\">
<Document>'''

if len(sys.argv)<2:
    print >> sys.stderr, __doc__

else:
    placestring = ''
    FList = sys.argv[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>"""

0 votos

¡Muchas gracias por este script! Me pregunto por qué aparentemente ningún desarrollador de aplicaciones se lanzó a ese nicho todavía, para desarrollar un bonito iSomething GUI para extraer pistas de los álbumes de fotos, etc. :)

0 votos

Sí, este tipo de "unir datos x con formato y" acaba siendo bastante útil. He podido fusionar trozos de otros scripts existentes para hacer esto. No he comprobado el campo de la fecha de las marcas de posición, por lo que es posible que desee volver a comprobar, si eso es importante para usted. Si quieres hacer un recorrido, probablemente podrías incluso añadir la capacidad de que las imágenes se muestren como miniaturas a lo largo de una ruta, etc.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X