C# Serial Port 통신 - GPS 수신 (1/2) 에 이어 이번에는 NMEA 프로토콜에 대해서 알아보겠습니다.

 

GPS 를 연결하여 시리얼 통신을 하면 아래와 같은 데이터가 나오게 됩니다.

$GPGGA,134807.000,3732.6627,N,12701.3549,E,1,04,2.6,39.7,M,19.7,M,,0000*69
$GPGSA,A,3,20,28,17,11,,,,,,,,,6.5,2.6,6.0*3D
$GPGSV,2,1,08,17,60,325,22,28,57,210,34,20,52,066,19,04,32,260,*76
$GPGSV,2,2,08,11,30,066,19,23,10,120,18,01,08,062,,02,00,252,*7A
$GPRMC,134807.000,A,3732.6627,N,12701.3549,E,1.58,329.68,110808,,,A*63

이중에서 우리가 봐야 할 부분은

$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48

입니다. 하나씩 분석해 보겠습니다. 데이터들은  ,  로 구분 되어 있습니다.

 

114455.532 <- 시간으로 그리니치 표준시 입니다. (11시 44분 55.532초) 따라서 한국의 시간을 구하기위해서는 +9 를 해야겠지요

 

3735.0079 , N<- 이것은 위도로서 37도 35.0079분을 뜻하며 , N 은 북위라는 의미입니다.

 

12701.6446 , E<- 경도를 가르키며 127도 1.6446분을 뜻하며, E 는 동격을 말합니다.

 

1 <- fix종류 입니다.

0 이면 invalid한 데이터(못쓰는 데이터) 라는 의미
1 이면 gps 위성신호만으로 계산
2 라면 dgps도 사용하여 계산 등등이다.

 

03 <- 계산에 사용된 위성의 갯수입니다. 최소한 3개 이상이 되어야 합니다.

 

7.9 <- 위성과 노이즈에 관련자료

 

48.8 M <- 해수면 기준 고도 입니다.

 

19.6 M <- ??

 

0.0,0000 <- dgps를 사용했을경우 마지막으로 update한 시간과 dgps 기지국 ID

 

*48 <- check sum 입니다.

 

http://gpsinformation.org/dale/nmea.htm#GGA

여기를 참조하시면 모든 내용을 보실 수 있습니다(영문)

 

여기서 포인트!!

3735.0079 , N

12701.6446 , E

위와 같이 위도와 경도를 뽑아오게 됩니다. Google Maps API 나 다음 Open Api 를 사용하여 실제 지도에 뿌려주기 외해서는 위의 값을 바로 넣어주면 안됩니다.

37도 35.0079분을 뜻하기 때문에 실제로 값을 넣어 줄때는

37 + (35.0079/60) = 37.583465 이렇게 넣어주셔야 합니다. (경도도 마찬가지 입니다.)

Posted by Dongkyu
,