C# Serial Port 통신 - GPS 수신 (1/2) 에 이어 이번에는 NMEA 프로토콜에 대해서 알아보겠습니다.
GPS 를 연결하여 시리얼 통신을 하면 아래와 같은 데이터가 나오게 됩니다.
$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
이중에서 우리가 봐야 할 부분은
입니다. 하나씩 분석해 보겠습니다. 데이터들은 , 로 구분 되어 있습니다.
114455.532 <- 시간으로 그리니치 표준시 입니다. (11시 44분 55.532초) 따라서 한국의 시간을 구하기위해서는 +9 를 해야겠지요
3735.0079 , N<- 이것은 위도로서 37도 35.0079분을 뜻하며 , N 은 북위라는 의미입니다.
12701.6446 , E<- 경도를 가르키며 127도 1.6446분을 뜻하며, E 는 동격을 말합니다.
1 <- fix종류 입니다.
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 이렇게 넣어주셔야 합니다. (경도도 마찬가지 입니다.)