Fotos do Google Takeout sem localização? Recupere o GPS
Para onde vai a localização em uma exportação do Google Takeout, o que geoData e geoDataExif significam, por que muitos dizem 0.0, e como gravar o GPS de volta.
No Google Fotos você digitava "Gramado" e achava a viagem certa. Depois do Takeout, as mesmas fotos não têm localização nenhuma. O seu novo app de fotos mostra um mapa vazio. Alguém disse que o GPS está nos arquivos .json, você abriu um e encontrou 0.0.
Aqui está o que aconteceu e o que dá para recuperar de verdade.
Dois campos de localização, e o que significam
Cada JSON do Takeout tem dois blocos de localização:
"geoData": {
"latitude": -29.3789,
"longitude": -50.8748,
"altitude": 830.0,
"latitudeSpan": 0.0,
"longitudeSpan": 0.0
},
"geoDataExif": {
"latitude": -29.3789,
"longitude": -50.8748,
"altitude": 830.0
}
geoDataExif é a posição que estava no EXIF da própria foto quando você a enviou. Se a câmera do celular gravou GPS, está aqui. geoData é a localização que o Google Fotos usava, que começa com o mesmo valor mas também inclui lugares que você definiu ou corrigiu na mão dentro do app.
Quando os dois blocos dizem 0.0 para latitude e longitude, a foto não tem localização. Isso não é um lugar real; é o jeito do Google escrever "desconhecido". Muitas fotos estão nesse estado, mais do que as pessoas esperam.
Por que tantas fotos não têm GPS
Os celulares só gravam coordenadas quando o acesso à localização está ligado para a câmera. Muita gente desliga. Prints, imagens de WhatsApp, imagens baixadas e digitalizações nunca tiveram GPS. Câmeras antigas não tinham receptor.
O Google Fotos escondia isso de você. Ele estimava localizações a partir do seu histórico de localização e dos pontos de referência que reconhecia na imagem, e mostrava essas estimativas no app. Essas localizações estimadas não estão no JSON. Só as posições explícitas estão: do EXIF, ou de um lugar que você definiu na mão.
Em uma parte real de um Takeout com 991 fotos, 12 por cento dos JSON tinham coordenadas reais e 81 por cento tinham o 0.0 de preenchimento. A sua biblioteca vai variar, mas se a busca no Google Fotos funcionava para fotos que você nunca geolocalizou, ela dependia de estimativas que você não recebeu de volta.
Por que o GPS está faltando nos próprios arquivos
Para fotos que tinham GPS no EXIF, o Takeout normalmente devolve o arquivo com esse EXIF intacto. Então muitas fotos de câmera ainda carregam as coordenadas; o app para onde você migrou só não indexou ainda, ou estava olhando outro campo.
As exceções são fotos cujo EXIF foi apagado antes do envio, e fotos em que você definiu a localização dentro do Google Fotos. Para essas, o JSON é a única cópia. Se você apagar os JSON sem gravar, essa localização some.
Confira o que você tem de fato
Com o exiftool:
exiftool -r -if 'not $GPSLatitude' -ext jpg -ext heic -filename .
lista as imagens sem GPS no arquivo. Compare com os JSON que têm geoData diferente de zero, que você acha com grep:
grep -L '"latitude": 0.0' *.json
A interseção é o que dá para restaurar.
Restaure as coordenadas na mão
O exiftool copia o geoData do JSON para as tags GPS do 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 .
A linha -if importa. Sem ela você grava 0.0, 0.0 em centenas de fotos, e toda exibição de mapa no seu app novo mostra um aglomerado no Oceano Atlântico na costa da África. As tags Ref pegam o sinal da coordenada, e é por isso que são definidas a partir do mesmo valor. Coordenadas brasileiras são negativas nos dois eixos (sul e oeste), então o sinal é essencial.
Repita com "%d/%F.json" para exportações antigas. Arquivos com nomes de JSON cortados e duplicatas (1) precisam de tratamento especial, como explicado no guia do exiftool.
Restaure com o app
O Takeout JSON Metadata Fixer faz o mesmo trabalho sem linha de comando, no macOS, no Windows e no Linux.
Ele lê o geoData primeiro, depois o geoDataExif, depois qualquer GPS que já esteja no arquivo, e grava as coordenadas no EXIF da foto. Ele trata 0.0, 0.0 como desconhecido e deixa essas fotos sem localização em vez de colocá-las no oceano. As datas são gravadas ao mesmo tempo, já que os dois problemas quase sempre vêm juntos.
Se você quer o lugar no nome do arquivo ou na pasta, o app transforma as coordenadas em nome de cidade e produz 2019-07-14-1105_Gramado.jpg, ou uma pasta 2019/Gramado. Essa consulta usa o OpenStreetMap, então precisa de internet e envia as coordenadas arredondadas, e nada mais, para esse serviço. Desligue e o app roda totalmente offline. Fotos sem localização simplesmente recebem um nome sem lugar.
As primeiras 1000 fotos são grátis. Depois disso, uma compra única de US$ 19,99 libera fotos ilimitadas.
Para fotos que nunca tiveram localização
Nada na exportação consegue recuperar uma posição que nunca foi registrada. Mas você pode adicionar uma. O Fotos da Apple, o digiKam e o Immich deixam você soltar uma foto no mapa. Para um lote, o app define um lugar para uma pasta inteira, digitado como nome de cidade ou coordenadas, e o exiftool consegue definir as mesmas coordenadas em uma pasta com um comando. Cobrimos as abordagens em adicionar localização a fotos sem GPS (em inglês).
Perguntas frequentes
O Google Fotos mostrava uma localização para esta foto. Por que o JSON está zerado?
Porque aquela localização foi estimada a partir do seu histórico de localização ou do conteúdo da imagem, e estimativas não são exportadas. Só coordenadas do arquivo ou de uma edição manual são.
Devo usar geoData ou geoDataExif?
O geoData inclui as suas correções manuais e fora isso é igual ao geoDataExif. Use geoData, e recorra ao geoDataExif se ele estiver zerado.
O Immich ou o Fotos da Apple vão ler o GPS depois da gravação?
Sim. Os dois leem as tags GPS padrão do EXIF, que é onde a gravação coloca. O Immich mostra no mapa depois de reindexar o arquivo.
Posso remover o GPS, por privacidade?
Pode. exiftool -gps:all= -overwrite_original . apaga de uma pasta inteira. Faça isso depois de organizar, se ainda quiser nomes de pasta por local.