개발개발/잡탕찌게

GPS 로그 NMEA 에 관한 몇가지 이야기...

꾸냥 2009. 1. 15. 10:47
알련지 모르지만 뭐 몰라도 상관없지만.
세상은 내 중심으로 돌아가기 때문에 내꺼에서 잘 되면 남의것도 잘 될것이라는 기본 생각을 가지고 이 정보를 남긴다.

RGM-3800 이라는 기종에서 남겨지는 로그 [NMEA 0183 ver 3.0] 를 기준으로 작성함

GPS 로그를 남길 수 있는 기기에서 가장 일반적으로 많이 쓰는 데이터가 NMEA 라는 방식이다. 텍스트로 되어있고 문서편집기로 내용을 열어보면

$GPGGA,055808.000,3731.5635,N,12702.3936,E,1,00,,0059.8,M,0.0,M,,0000*7C
$GPRMC,055808.000,A,3731.5635,N,12702.3936,E,000.17,15.15,141007,,,E*55

이런식의 데이터가 남겨지게 된다.

우선 GPGGA, GPRMC 라는 것은 로그를 남기는 포멧중에 하나이다.
GP : talker ID로 일반적으로 GPS 에서는 GP 라는 것을 사용한다.
GGA : sentence ID로 GGA는 Global Positioning System fixed data의 약자이고, RMC는 Recommended minimum specific GNSS data 의 약자이다.

내가 사용하는 제품은 저 두가지 데이터만 남기에 나머지는 생략

두 로그에서 남겨지는 데이터는

$GPGGA 는
UTC 시간, Latitude(위도), Longitude(경도), Fix Quality, 위성수, 나머지는 패스~
이거에 따라 위에 데이터를 구분하면
이름 : $GPGGA
시간 : 055808.000
위도 : 3731.5635,N
경도 : 12702.3936,E
품질 : 1 (0이 아니고 1 or 다른 숫자이면 사용가능)
위성 : 00
나머지 :,0059.8,M,0.0,M,,0000*7C

$GPRMC 는
UTC 시간, 품질, Latitude(위도), Longitude(경도), 속도, 진행방향, 날짜, 나머지는 패스~
마찬가지로 위에 로그에 비교를 하면
이름 : $GPRMC
시간 : 055808.000
품질 : A (A 작동, V 는 에러)
위도 : 3731.5635,N
경도 : 12702.3936,E
속도 : 000.17 (knots)
방향 : 15.15
날짜 : 141007
기타 : ,,E*55

우선 데이터들이 나왔으면 잘라서 쓰면 된다. 텍스트라 자르는건 그리 어렵지 않으니. 하지만 여기서 주의할것은 내가 하려는 짓이 지오태깅. 구글맵과 네이버맵에 내 동선을 표시하기 위한 것이기 때문에 구글이나 네이버에서 쓰이는 좌표로 변환해야 된다. 네이버 좌표는 TM128 이라 일반적으로 쓰여지는 WGS84 랑은 다르다 그래서 WGS84 를 기준으로 변환을 하여야 한다. 그러기 위해선 해당되는 로그에 위도 경도 값을 변경을 시켜줘야 한다.

위도, 경도 계산 방식은 동일함
위도 3731.5635 를 예로 들어.
위도는 앞의 두자리인 37이 도, 경도는 앞에 세자리가 도이다. 그것을 제외한
나머지 31.5635 를 60으로 나눠준다. 그럼 0.52605833333333333333333333333333 가 나오는데
두개를 더한 37.52605833333333333333333333333333 가 WGS84 로 변환된 위도가 된다

그리고 또 하나더 여기에 나오는 속도는 Knots 단위이다. 이것을 km/h 로 변환하려면 1.852 를 곱하면 된다.

000.17*1.852 = 0.31484km/h

기본적으로 $GPGGA 는 대부분의 GPS 기기에서 로그가 가능하고 $GPRMC 는 되는 것도 있고 안되는 것도 있다고 한다.
GPGGA 를 기본으로 가져오고 부족한 정보는 GPRMC 에서 가져오면 됨. 뭐 자신이 중심에 있는 기기에서 가져오면 다 만사 OK~

여기까지 해당되는 정보는 http://home.pacific.net.au/~gnb/gps/nmea.html 여기에서 보면 상세하게 영.어. 로 볼 수 있다.
반응형