휴대폰으로 gps 태그를 포함하여 사진을 저장할 수 있다. 보통 사진을 너무 많이 찍는데 기억할만한 장소를 표시하고 싶다. 역시 구글링을 해보니 perl로 제작한 좋은 페이지를 찾았다.
사진에 저장된 gps 태그를 보면 삼성 카메라 경우 각도+분+초로 되어있다. 이를 소수점으로 변환해야 한다. 공식은 (초/60 + 분)/60+각도다.
하나 문제가 있는데 사진을 저장할 때 숫자로 저장하지 않아 뒤쪽 소수점을 다 날렸다. 사진 경로를 찾아 파일에 저장된 정확한 gps 위치를 기록해야 한다.
가지고 있는 데이터베이스를 날릴 수 없어, id와 경로를 보고 위도, 경도를 업데이트 하기로 했다. 일단 위 식에 맞는 스크립트를 만들었다.
#!/bin/bash
#$1은 파일 경로. 데이터베이스에서 추출.
#file 유무 확인
if [ ! -f $1 ];then
echo "file is not there";
exit
fi
GpsLat=$(exiv2 -pa $1 2> /dev/null | grep -ae "Exif\.GPSInfo\.GPSLatitude.*Rational" | sed 's/ \{1,\}/ /g' | cut -d' ' -f4-)
GpsLong=$(exiv2 -pa $1 2> /dev/null | grep -ae "Exif\.GPSInfo\.GPSLongitude.*Rational" | sed 's/ \{1,\}/ /g'| cut -d' ' -f4-)
#echo $GpsLat;
#echo $GpsLong;
#GpsLat마지막 숫자
GpsLatSec=$(echo $GpsLat | cut -d' ' -f3 | tr -d "\"")
GpsLatMin=$(echo $GpsLat | cut -d' ' -f2 | tr -d "\'")
GpsLongSec=$(echo $GpsLong | cut -d' ' -f3 | tr -d "\"")
GpsLongMin=$(echo $GpsLong | cut -d' ' -f2 | tr -d "\'")
#echo $GpsLatSec
#echo $GpsLatMin
GpsLatFloat=$(bc <<< "scale=4;($GpsLatSec/60+$GpsLatMin)/60")
GpsLongFloat=$(bc <<< "scale=4;($GpsLongSec/60+$GpsLongMin)/60")
#echo $GpsLatFloat
#echo $GpsLongFloat
#$Gps 인티저
GpsLatInt=$(echo $GpsLat | cut -d' ' -f1 | tr -d "d-g");
GpsLongInt=$(echo $GpsLong | cut -d' ' -f1 | tr -d "d-g");
#echo $GpsLatInt
#echo $GpsLongInt
#전체 숫자.
GpsLatFull=$(bc <<< "scale=4;$GpsLatFloat+$GpsLatInt");
GpsLongFull=$(bc <<< "scale=4;$GpsLongFloat+$GpsLongInt");
echo $GpsLatFull;
echo $GpsLongFull;
이제 데이터베이스를 내용을 파일로 출력하여 경로를 위 스크립트 인자로 넣어주면 된다.