May 9, 2009

C# Serial Port 통신 - GPS 수신 (2/2)

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 이렇게 넣어주셔야 합니다. (경도도 마찬가지 입니다.)

4 comments:

  1. 비밀 댓글 입니다.

    ReplyDelete
  2. 정말 좋은 자료입니다~~ 잘보구 잘 사용하고 갑니다~~ 감사합니다~

    ReplyDelete
  3. trackback from: [C#] GPS 데이터 Parsing 시간과 위도 경도 가져오기
    이번시간에는 GPS 정보를 가져오는 부분을 다루려고 합니다. 다들 알다시피 GPS는 보통 시리얼 통신을 통해서 Com Port로 들어오게 됩니다. 그런데 GPS라고 해서 Latitude와 Longitude가 바로 들어오는 것이 아니라 GPS NEMA 프로토콜의 형태로 들어오게 되고 그 프로토콜을 해석해서 Application에서 필요한 정보를 우리가 취득하면 되는것이겠지요. GPS 시리얼 포트를 통해서 받는 법이라던지, NEMA 프로토콜 자체에 대해..

    ReplyDelete
  4. 비밀 댓글 입니다.

    ReplyDelete