November 17, 2009

C# Serial Port 통신 - GPS 수신 (버전업)

안녕하세요 DKLEE 입니다.

 

지난 프로그램 과정....

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

C# Serial Port 통신 - GPS 수신 완성

 Serial 통신을 통하여 GPS 모듈로부터 나온는 RAW DATA를 가지고 OPEN API 를 이용해 현재 위치를 지도에 띄우는 작업을 저번부터 해왔었습니다.

 저번 프로그램은 지도와 WinForms 상호간에 데이터가 일방적이였던 반면 이번 프로그램에서는 이를 개선하여 상호간 데이터를 자유롭게 얻거나 설정 할 수 있게 되었습니다. 전체적으로는 달라진게 없어보이지만 앞으로 발전해 나갈 방향을 생각했을땐 상당히 도움이 될것이라 생각됩니다.

 

 우선 저번과 달라진 점은GMap.NET 이라는 Open Source .NET Control 을 사용한점입니다. 이 컨트롤은 WinForms 디자인(도구모음)에서 간단하게 추가하여 사용할 수 있습니다. OPEN MAPS 또한 Google / Bing / Yahoo 등의 일반지도 그리고 위성지도까지 설정, 사용이 가능합니다. 또한 위도,경도 데이터를 바로 집어 넣을 수 있으며, 현재 선택한 위치(위도, 경도)를 간편하게 얻어 올 수 있어서 다양한 용도로 사용이 가능하게 됩니다.

 이전 프로그램의 문제점이 여기에 있습니다. 데이터를 집어넣어 지도에 현재 위치를 나타내기는 쉽지만 얻어오는 과정이 상당히 까다로웠습니다. 이유는 이전 Open API 지도들은 전부 익스플로러의 웹상에서 컨트롤이 가능했기때문에 WinForms 와 연동하기 어려웠기 때문입니다. 하지만 GMap.NET 을 통해 손쉽게 Open API Maps 를 사용할 수 있었습니다.

 

 GMap.NET 의 DLL 을 추가하게 되면 아래와 같이 도구모음에 뜨게되며 속성을 통해 여러 작업을 할 수 있습니다.

 

아래는 위 컨트롤을 간단하게 사용해본 예제 소스입니다.^^

 

 마커는 지도에 현재 위치나 목적지등 압정처럼 생긴 작은 표시를 지도에 표시해주는 기능을 합니다. 오버레이 객체에 삽입 하여 최종적으론 지도 컨트롤에 삽입함으로서 실제로 화면에 표시해 주는 기능을 하게됩니다. 아래는 최종 실행 결과 입니다.

 

 

p.s 굉장히 저의 주관적으로 작성된 프로그램 내용이므로 궁금한 점은 대환영 입니다. 댓글이나 방명록을 통해 물어봐 주시면 감사하겠습니다.

 

16 comments:

  1. 감사합니다. 덕분에 완성 했씁니다~~~



    해보니깐 정말 gmap.net 을 이용하니깐 쉽네요~ㅋㅋ



    감사합니다~~

    ReplyDelete
  2. @지재원 - 2009/11/19 15:21
    다행이네요 :)

    어떤 작품을 만드셨는지 궁금하네요ㅋ

    ReplyDelete
  3. 우와! C# 천재! C# 천재!

    또 뭘 만들고 있나요? ㅋㅋ

    ReplyDelete
  4. @작은아이! - 2009/11/20 07:14
    졸업작품에 사용하는 GPS 시스템(?) 이에요ㅋㅋ 전동 휠체어의 자동 주행모드에 사용한답니다. 경로대로 따라가야 하는데 GPS 오차가 심하네요ㅠ

    ReplyDelete
  5. @DKLEE - 2009/11/20 08:59
    저도 지난 겨울에 GPS 관련 프로젝트 했는데..

    오차가 정말 심하더라고요! 그래서 허접하지만,

    보정하는 알고리즘 만들어서 썼었던걸로 기억해요.

    ReplyDelete
  6. 블로그 보고 많은 도움 얻었습니다

    GMap.NET사이트 가보니 어플다운은 있는데 컨트롤이 없네요

    제가 잘못 찾고 있는건지 아니면 바껴서 그런건지 잘 모르곘네요

    아무리 찾아봐도 없는;;;;

    ReplyDelete
  7. 어플에 있는 GMap.NET.Core.DLL 을 추가해야되는건가요?..

    코드프로젝트에서 확인해봐도 GMap.NET.DLL만 추가 하면 된다고 하는데 도저히 못찾겠네요..ㅠㅠ

    혹시 라이브러리만 메일로 보내주실수 있으지요...

    ReplyDelete
  8. TAG 다는 법좀 알려주세염.ㅜㅜ

    ReplyDelete
  9. C#에서 DLL을 추가하는 법이 참조로 추가해서 DLL파일들만 추가를 하였습니다. 그런데 도구상자에 컴포넌트들이 추가가 되지 않는데 어떻게 해야하나요?

    ReplyDelete
  10. GMap.NET 홈페이지에가니 API는 아직 준비가 안되었는데요. API를 구할수가 있나요?

    ReplyDelete
  11. 비밀 댓글 입니다.

    ReplyDelete
  12. 좋은정보 감사드립니다.



    동규님이 작성하신 글을 보고서

    GPS수신쪽을 성공했네요.

    ReplyDelete
  13. 질문이 있습니다.

    실시간으로 받아오는것만이 아니라.

    이동한 거리에 따른 좌표를 db로 저장하여 라인으로 표시하고 싶은데요...



    현재 GMAP.NET 쪽 사이트를 보다보니. 소스를 적용시킨게 있어서 따라해보았습니다.



    MapRoute route = GMaps.Instance.GetRouteBetweenPoints(start, end, false, (int)MainMap.Zoom);



    if (route != null)

    {

    // add route

    GMapRoute r = new GMapRoute(route.Points, "test");

    routes.Routes.Add(r);



    // add route start/end marks

    GMapMarker m1 = new GMapMarkerGoogleRed(start);

    m1.ToolTipText = "Start: " + start.ToString();

    m1.ToolTipMode = MarkerTooltipMode.Always;



    GMapMarker m2 = new GMapMarkerGoogleGreen(end);

    m2.ToolTipText = "End: " + end.ToString();

    m2.ToolTipMode = MarkerTooltipMode.Always;



    objects.Markers.Add(m1);

    objects.Markers.Add(m2);



    MainMap.ZoomAndCenterRoute(r);

    }



    소스는 이렇게 되고요.. 문제는 route값이 null이라는겁니다... 어떻게 해야... 값이 들어오는지 모르겠네요...

    ReplyDelete
  14. 이 프로그램 다운 받아서 공부해 보고 싶은데요 다운 받을 수 있을 까요? 저도 유사 프로그램을 개발하고 있습니다

    ReplyDelete
  15. 안녕하세요? GPS수신기 그림을 보고 궁금한 점이 있어서

    물어봅니다.

    그 GPS모듈을 MAX232에 연결하고 MAX232는 rs232여기에 연결해서 받는데요 그러면 gps모듈을 저가 뭐 다른사람한태 장착해놓고 멀리서 저가 노트북으로 gps수신기가 어디에 있는지는 알수가없는건가요? 꼭 컴퓨터에 연결해야 볼수있나요?

    ReplyDelete
  16. @Help - 2010/12/14 09:35
    질문이 잘 이해가 안되네요ㅎ

    시리얼 통신으로 GPS 모듈이 송신하는 값들을 받아 처리하면 됩니다만.. 꼭 PC일 필요는 없고 MCU 등을 활용 하셔도 될듯 합니다.

    ReplyDelete