Takeout JSON

¿Fotos de Google Takeout sin ubicación? Recupera el GPS

Adónde va la ubicación en una exportación de Google Takeout, qué significan geoData y geoDataExif, por qué muchas dicen 0.0 y cómo devolver el GPS real.

En Google Fotos podías buscar "Lisboa" y te salía el viaje correcto. Tras el Takeout, las mismas fotos no tienen ubicación. Tu nueva app de fotos muestra un mapa vacío. Alguien te dijo que el GPS está en los archivos .json, abriste uno y encontraste 0.0.

Esto es lo que pasó y lo que realmente puedes recuperar.

Dos campos de ubicación y qué significan

Cada JSON de Takeout tiene dos bloques de ubicación:

"geoData": {
  "latitude": 38.7223,
  "longitude": -9.1393,
  "altitude": 12.0,
  "latitudeSpan": 0.0,
  "longitudeSpan": 0.0
},
"geoDataExif": {
  "latitude": 38.7223,
  "longitude": -9.1393,
  "altitude": 12.0
}

geoDataExif es la posición que tenía el EXIF de la foto cuando la subiste. Si la cámara de tu teléfono grabó el GPS, está aquí. geoData es la ubicación que usaba Google Fotos, que empieza siendo la misma pero incluye además los lugares que pusiste o corregiste a mano en la app.

Cuando ambos bloques dicen 0.0 en latitud y longitud, la foto no tiene ubicación. No es un lugar real; es la forma que tiene Google de escribir "desconocido". Muchas fotos están en ese estado, más de las que la gente espera.

Por qué tantas fotos no tienen GPS

Los teléfonos solo graban coordenadas cuando la cámara tiene permiso de ubicación. Mucha gente lo desactiva. Las capturas de pantalla, las imágenes de WhatsApp, las fotos descargadas y los escaneos nunca tuvieron GPS. Las cámaras antiguas no tenían receptor.

Google Fotos te lo ocultaba. Estimaba ubicaciones a partir de tu historial de ubicaciones y de los lugares que reconocía en la imagen, y mostraba esas estimaciones en la app. Esas ubicaciones estimadas no están en el JSON. Solo están las posiciones explícitas: del EXIF, o de un lugar que pusiste a mano.

En una parte real de Takeout con 991 fotos, el 12 por ciento de los JSON tenía coordenadas reales y el 81 por ciento tenía el marcador 0.0. Tu biblioteca variará, pero si tu búsqueda en Google Fotos funcionaba para fotos que nunca geoetiquetaste, esa búsqueda dependía de estimaciones que no te han devuelto.

Por qué el GPS falta en los propios archivos

En las fotos que sí tenían GPS en el EXIF, Takeout suele devolver el archivo con ese EXIF intacto. Así que muchas fotos de cámara siguen llevando sus coordenadas; la app a la que te mudaste simplemente no las ha indexado aún, o estaba mirando otro campo.

Las excepciones son las fotos cuyo EXIF se eliminó antes de subirlas, y las fotos en las que pusiste la ubicación en Google Fotos. Para esas, el JSON es la única copia. Si borras los JSON sin fusionar, esa ubicación desaparece.

Comprueba qué tienes de verdad

Con exiftool:

exiftool -r -if 'not $GPSLatitude' -ext jpg -ext heic -filename .

lista las imágenes sin GPS en el archivo. Compáralo con los JSON que tienen un geoData distinto de cero, que puedes buscar con:

grep -L '"latitude": 0.0' *.json

La intersección es lo que puedes recuperar.

Recuperar las coordenadas a mano

exiftool puede copiar geoData del JSON a las etiquetas GPS del EXIF:

exiftool -r -tagsfromfile "%d/%F.supplemental-metadata.json" \
  -if '$GeoDataLatitude ne 0 or $GeoDataLongitude ne 0' \
  "-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" \
  "-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" \
  "-GPSAltitude<GeoDataAltitude" \
  -ext jpg -ext jpeg -ext heic -overwrite_original .

La línea -if importa. Sin ella escribes 0.0, 0.0 en cientos de fotos, y cada vista de mapa de tu nueva app muestra un grupo en el océano Atlántico frente a África occidental. Las etiquetas Ref toman el signo de la coordenada, por eso se ajustan desde el mismo valor.

Repite con "%d/%F.json" para exportaciones antiguas. Los archivos con nombres de JSON recortados y los duplicados (1) necesitan un tratamiento aparte, explicado en la guía de exiftool.

Recuperarlas con la aplicación

Takeout JSON Metadata Fixer hace el mismo trabajo sin línea de comandos, en macOS, Windows y Linux.

Lee primero geoData, luego geoDataExif, luego cualquier GPS que ya haya en el archivo, y escribe las coordenadas en el EXIF de la foto. Trata 0.0, 0.0 como desconocido y deja esas fotos sin ubicación en lugar de ponerlas en el océano. Las fechas se escriben al mismo tiempo, porque los dos problemas casi siempre vienen juntos.

Si quieres el lugar en el nombre del archivo o en la carpeta, la aplicación puede convertir las coordenadas en el nombre de una ciudad y darte 2019-07-14-1105_Lisboa.jpg, o una carpeta 2019/Lisboa. Esa consulta usa OpenStreetMap, así que necesita conexión a internet y envía a ese servicio las coordenadas redondeadas, y nada más. Desactívala y la aplicación funciona por completo sin conexión. Las fotos sin ubicación simplemente reciben un nombre sin lugar.

Las primeras 1000 fotos son gratis. Después, una compra única de 19,99 USD desbloquea fotos ilimitadas.

Para las fotos que nunca tuvieron ubicación

Nada en la exportación puede recuperar una posición que nunca se grabó. Pero puedes añadirla tú. Fotos de Apple, digiKam e Immich permiten soltar una foto en un mapa. Para un lote, exiftool puede poner las mismas coordenadas en toda una carpeta, y la aplicación permite fijar un lugar a mano para toda una carpeta, escrito como nombre de ciudad o como coordenadas. Mira poner fecha y lugar a fotos escaneadas.

Preguntas frecuentes

Google Fotos mostraba una ubicación para esta foto. ¿Por qué el JSON dice cero?

Porque esa ubicación se estimó a partir de tu historial de ubicaciones o del contenido de la imagen, y las estimaciones no se exportan. Solo las coordenadas del archivo o de una edición manual.

¿Uso geoData o geoDataExif?

geoData incluye tus correcciones manuales y por lo demás es igual a geoDataExif. Usa geoData, y recurre a geoDataExif si es cero.

¿Immich o Fotos de Apple leerán el GPS tras la fusión?

Sí. Ambos leen las etiquetas GPS estándar del EXIF, que es donde la fusión las escribe. Immich las muestra en su vista de mapa cuando reindexa el archivo.

¿Puedo quitar el GPS por privacidad?

Sí. exiftool -gps:all= -overwrite_original . lo elimina de una carpeta. Hazlo después de organizar si aún quieres nombres de carpeta por lugar.