gps 태그 앨범 제작(2/4)

몇 번 해보니 gps 좌표가 여러 형식이다. 삼성 카메라로 3개 형식을 얻을 수 있다.

Exif.GPSInfo.GPSLatitude                     Rational    3  37deg 34' 0.982"
Exif.GPSInfo.GPSLatitude                     Rational    3  37deg 34' 23"
Exif.GPSInfo.GPSLatitude                     Rational    3  35.4328992deg

모두 해당하는 경우를 하나 파일로 만들려 했으나, 틀을 깨어 3개 파일로 만들었다. 1번 파일이 2번 파일을 실행하고, 결과를 확인한다. 만족하지 못하면 3번 파일을 실행한다. 정규 표현식 검증은 여기에서 했다.

#!/bin/bash

#1번 스크립트
#echo "hello"
echo "$1로 파일 path를 입력"
#업데이트할 파일 숫자 확인
#echo $1
iMaxNum=$(wc -l $1 | cut -d' '  -f1)
#echo $iMaxNum

cat $1 |\
while read tmpFILE;
do
	tmpID=$(echo $tmpFILE | cut -d' ' -f1)
	tmpPATH=$(echo $tmpFILE | cut -d' ' -f2)
	#echo $tmpID, $tmpPATH;
	gpsCoord=$(/home/now0930/script/사진에서정보추출/gpsTextToFloat.sh $tmpPATH)
	#echo $gpsCoord;
	#echo $tmpPATH
	#echo "첫번째 실행"

	if [ -z "$gpsCoord" ]
	then
		gpsCoord=$(/home/now0930/script/사진에서정보추출/gpsTextToFloatMore.sh $tmpPATH)
		#echo "두번째 실행"
		#echo $gpsCoord;

	fi


	#echo "여기확인"
	#echo $tmpID, $gpsCoord;

	gpsCoordLat=$(echo $gpsCoord | cut -d',' -f1)
	gpsCoordLong=$(echo $gpsCoord | cut -d',' -f2)

	#float 형식인지 확인하여 mysql update

	#echo $tmpID
	#echo $tmpID, $gpsCoordLat, $gpsCoordLong;


	

	if ! [ -z "$gpsCoordLat" ]
	then
		#데이터 베이스 업데이트
		mysql << EOF

		use myHome;
		select id, 경로 from picture where id = $tmpID;
		update picture set gpsLatFloat=$gpsCoordLat, gpsLongFloat=$gpsCoordLong where id=$tmpID;
EOF

	#echo $gpsCoordLat, $gpsCoordLong

	fi
done
#!/bin/bash
#2번 스크립트.
#file 유무 확인
if [ ! -f $1 ];then
	echo "file is not there";
	exit
fi


#Trap으로 metadata를 가지고 있는지 확인.
#trap "exiv2 -pa  $1" EXIT
#echo $1
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;
#printf "\n"

#GpsLat마지막 숫자
GpsLatSec=$(echo $GpsLat | cut -d' ' -f3 | tr -d "\"")
GpsLatMin=$(echo $GpsLat | cut -d' ' -f2 | tr -d "\'")

#초가 없는 경우 0을 입력.
if [ -z "$GpsLatSec" ]
	then
		GpsLatSec=0;
fi
#echo $GpsLatSec;
#echo $GpsLatMin;


GpsLongSec=$(echo $GpsLong | cut -d' ' -f3 | tr -d "\"")
GpsLongMin=$(echo $GpsLong | cut -d' ' -f2 | tr -d "\'")


if [ -z "$GpsLongSec" ]
	then
		GpsLongSec=0;
fi

#echo $GpsLatSec;
#echo $GpsLatMin;

#echo $GpsLongSec;
#echo $GpsLongMin;

#GPS자표가 숫자인지 확인
re='^[0-9]{1,3}$'
#가끔 소수점도 있음..
re='^[0-9]{1,3}(\.[0-9]{1,5}$|$)'

#if [ -z "$GpsLat" ]
#then
#	echo "0,0"
#	exit;
#fi
#echo $GpsLatSec, $GpsLongSec

if ! [[ $GpsLatSec =~ $re ]]
then
	exit 1;
fi

if ! [[ $GpsLatMin =~ $re ]]
then
	exit 1;
fi

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,$GpsLongFull;
#!/bin/bash


#Trap으로 metadata를 가지고 있는지 확인.
#trap "exiv2 -pa  $1" EXIT

#echo $GpsLat
#echo $GpsLong
#echo "구분자"
#여기 확인..
#GPS 형식 확인
#xxx.xxxxdeg 형식일 경우 처리.
renumberdeg='^[0-9]{1,}\.[0-9]{1,}deg'
if [[ $GpsLat =~ $renumberdeg ]]
then
	#echo "여기 매치"
	GpsLatFull=$(echo $GpsLat| cut -d'd' -f1)
	#echo $GpsLatFull
fi

if [[ $GpsLong =~ $renumberdeg ]]
then
	GpsLongFull=$(echo $GpsLong | cut -d'd' -f1)
	#echo $GpsLongFull
fi
echo $GpsLatFull,$GpsLongFull;

이렇게 하면 gps 태그 달린 사진을 8개 남기고 입력할 수 있다. 나머지 8개는 포기한다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.