콘텐츠로 바로가기

now0930 일지

이런저런 생각

  • 홈
  • 비공개
  • 강좌
  • 잔여 작업 조회
  • 위치

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개는 포기한다.

이 글 공유하기:

  • Tweet
발행일 2020-02-07글쓴이 이대원
카테고리 생활코딩 태그 gps, perl, 앨범, 지도

댓글 남기기응답 취소

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

글 내비게이션

이전 글

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

다음 글

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

2025 5월
일 월 화 수 목 금 토
 123
45678910
11121314151617
18192021222324
25262728293031
4월    

최신 글

  • common mode, differential mode 2025-05-11
  • signal conditioner, 신호 처리기 2025-05-10
  • strain gage 2025-05-09
  • 칼만 필터 2025-05-01
  • positioner(I/P) 2025-04-26

카테고리

  • 산업계측제어기술사
  • 삶 자국
    • 책과 영화
    • 투자
  • 생활코딩
    • LEGO
    • ROS
    • tensorflow
  • 전기기사
  • 피아노 악보

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org

페이지

  • 소개
  • 잔여 작업 조회
    • 작업 추가
    • 작업의 사진 조회
    • 작업 수정 페이지
  • 사진
    • GPS 입력된 사진
    • 사진 조회
  • 위치
    • 하기 휴가 방문지
    • 해외 출장

태그

android bash c docker driver FSM gps java kernel LEGO linux mysql network program opcua open62541 plc programmers python raspberry reinforcementLearning ros state space system program tensorflow transfer function 경제 미국 민수 삼국지 세계사 실기 에너지 역사 유전자 일본 임베디드 리눅스 전기기사 조선 중국 채윤 코딩 테스트 통계 한국사 한국어

팔로우하세요

  • Facebook
now0930 일지
WordPress로 제작.