구글 테이크아웃 사진에 위치 정보가 없나요? GPS 복구 방법
구글 테이크아웃 내보내기에서 위치 정보가 어디로 가는지, geoData와 geoDataExif의 뜻, 많은 사진이 0.0인 이유, 실제 GPS를 다시 써 넣는 방법을 설명합니다.
구글 포토에서는 "제주"라고 검색하면 그 여행 사진이 나왔습니다. 테이크아웃 뒤에는 같은 사진에 위치가 전혀 없습니다. 새 사진 앱의 지도는 비어 있습니다. 누군가 GPS는 .json 파일에 있다고 해서 열어 봤더니 0.0이 있었습니다.
무슨 일이 있었는지, 그리고 현실적으로 무엇을 되찾을 수 있는지 설명합니다.
위치 항목 두 개의 뜻
테이크아웃 사이드카마다 위치 블록이 두 개 있습니다.
"geoData": {
"latitude": 33.4996,
"longitude": 126.5312,
"altitude": 12.0,
"latitudeSpan": 0.0,
"longitudeSpan": 0.0
},
"geoDataExif": {
"latitude": 33.4996,
"longitude": 126.5312,
"altitude": 12.0
}
geoDataExif는 업로드할 때 사진 자체의 EXIF에 있던 위치입니다. 휴대폰 카메라가 GPS를 기록했다면 여기 있습니다. geoData는 구글 포토가 사용한 위치이며, 처음에는 같은 값이지만 앱에서 손으로 지정하거나 고친 장소도 포함합니다.
두 블록 모두 위도와 경도가 0.0이면 그 사진에는 위치가 없는 것입니다. 실제 장소가 아니라 구글이 "모름"을 적는 방식입니다. 생각보다 많은 사진이 이 상태입니다.
왜 이렇게 많은 사진에 GPS가 없나
휴대폰은 카메라에 위치 접근 권한이 켜져 있을 때만 좌표를 기록합니다. 많은 사람이 끄고 씁니다. 스크린샷, 카카오톡 사진, 인터넷에서 받은 이미지, 스캔에는 GPS가 있었던 적이 없습니다. 오래된 카메라에는 수신기 자체가 없었습니다.
구글 포토는 이것을 감춰 왔습니다. 위치 기록과 사진 속에서 알아본 랜드마크로 위치를 추측해서 앱에 보여 줬습니다. 그 추정 위치는 사이드카에 없습니다. EXIF에 있었거나 손으로 지정한 명시적 위치만 있습니다.
실제 991장짜리 테이크아웃 조각에서는 사이드카의 12퍼센트에 실제 좌표가 있었고 81퍼센트는 0.0 자리표시였습니다. 라이브러리마다 다르지만, 한 번도 위치를 태그하지 않은 사진이 구글 포토 검색에 잡혔다면 그 검색은 돌려받지 못한 추정에 의존한 것입니다.
파일 자체에 GPS가 없는 이유
EXIF에 GPS가 있던 사진은 대개 테이크아웃이 그 EXIF를 온전히 돌려줍니다. 그래서 많은 카메라 사진은 여전히 좌표를 갖고 있고, 옮겨 간 앱이 아직 색인하지 않았거나 다른 항목을 보고 있을 뿐입니다.
예외는 업로드 전에 EXIF가 지워진 사진과, 구글 포토에서 위치를 지정한 사진입니다. 이런 사진은 사이드카가 유일한 사본입니다. 합치지 않고 사이드카를 지우면 그 위치는 사라집니다.
실제로 무엇이 있는지 확인하기
exiftool로 이렇게 합니다.
exiftool -r -if 'not $GPSLatitude' -ext jpg -ext heic -filename .
파일 안에 GPS가 없는 이미지를 나열합니다. 이것을 geoData가 0이 아닌 사이드카와 비교하면 됩니다.
grep -L '"latitude": 0.0' *.json
겹치는 부분이 복구할 수 있는 것입니다.
좌표를 직접 복구하기
exiftool은 사이드카의 geoData를 EXIF GPS 태그에 복사할 수 있습니다.
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 .
-if 줄이 중요합니다. 없으면 사진 수백 장에 0.0, 0.0을 쓰게 되고, 새 앱의 지도마다 서아프리카 앞바다 대서양에 사진이 뭉쳐 나타납니다. Ref 태그는 좌표의 부호를 받기 때문에 같은 값으로 설정합니다.
옛 내보내기는 "%d/%F.json"으로 한 번 더 돌립니다. 잘린 사이드카 이름과 (1) 중복은 exiftool 안내에서 다루는 별도 처리가 필요합니다.
앱으로 복구하기
Takeout JSON Metadata Fixer는 명령줄 없이 같은 일을 합니다. 윈도우, 맥, 리눅스용입니다.
geoData를 먼저 읽고, 그다음 geoDataExif, 그다음 파일에 이미 있는 GPS를 읽어 좌표를 사진의 EXIF에 씁니다. 0.0, 0.0은 모름으로 취급해서 그 사진을 바다에 놓는 대신 위치 없이 둡니다. 두 문제는 거의 항상 함께 오기 때문에 날짜도 같은 실행에서 씁니다.
장소를 파일 이름이나 폴더에 넣고 싶다면 앱이 좌표를 도시 이름으로 바꿔 2019-07-14-1105_Jeju.jpg나 2019/Jeju 폴더를 만들어 줍니다. 이 조회는 OpenStreetMap을 쓰기 때문에 인터넷 연결이 필요하고, 반올림한 좌표만 그 서비스로 보냅니다. 다른 것은 보내지 않습니다. 끄면 앱은 완전히 오프라인으로 동작합니다. 위치가 없는 사진은 그냥 장소 없는 이름을 받습니다.
처음 1000장은 무료입니다. 이후에는 19.99달러 한 번으로 무제한입니다.
위치가 애초에 없던 사진
기록된 적 없는 위치는 내보내기의 어떤 것으로도 복구할 수 없습니다. 대신 직접 넣을 수는 있습니다. 애플 사진, digiKam, Immich는 사진을 지도에 놓을 수 있습니다. 여러 장이라면 exiftool이 폴더 전체에 같은 좌표를 설정할 수 있습니다. 앱에서는 폴더 단위로 도시 이름이나 좌표를 입력해 그 안의 모든 사진에 같은 장소를 쓸 수 있습니다. 스캔 사진에 날짜와 장소 넣기에서 다룹니다.
확인
합친 뒤 지도 보기가 있는 앱에서 여행 사진 몇 장을 찾아보십시오. 실제 위치에 있으면 됩니다. 아프리카 서쪽 바다에 사진 무리가 보이면 0 좌표가 쓰인 것이니 그 파일들의 GPS를 지우고 다시 하십시오.
자주 묻는 질문
구글 포토는 이 사진의 위치를 보여 줬는데 왜 사이드카는 0인가요?
그 위치가 위치 기록이나 이미지 내용에서 추정된 것이고, 추정은 내보내지지 않기 때문입니다. 파일에서 온 좌표나 손으로 고친 좌표만 나옵니다.
geoData와 geoDataExif 중 어느 것을 써야 하나요?
geoData는 손으로 한 수정을 포함하고 그 외에는 geoDataExif와 같습니다. geoData를 쓰고, 0이면 geoDataExif로 넘어가십시오.
합친 뒤 Immich나 애플 사진이 GPS를 읽나요?
읽습니다. 둘 다 표준 EXIF GPS 태그를 읽고, 합치기가 쓰는 자리가 바로 거기입니다. Immich는 파일을 다시 색인한 뒤 지도에 표시합니다.
개인정보 때문에 GPS를 지우고 싶습니다.
됩니다. exiftool -gps:all= -overwrite_original .이 폴더에서 지웁니다. 장소별 폴더 이름을 원한다면 정리한 뒤에 하십시오.