본문 바로가기
Education/Bit 18th

[Windows Mobile] GPS를 이용한 속도계

by ★용호★ 2009. 12. 6.

개발환경
Visual Stuodio 2008
C#



이번 장에서는 GPS를 이용해서 간단한 속도계를 구현해 보겠습니다.



GPS와 FakeGPS 에 대한 중복되는 설명은 예전 강좌를 참고하시길 바랍니다.
http://windowsmobile7.tistory.com/10


전체적인 디자인은 아래와 같습니다.

속도 부분을 표시할 Label 1개
위,경,고도 표시를 위한 Label 3개, 텍스트박스 3개
동작을 위한 버튼 2개,  메인 메뉴 1개 입니다.






[참조추가]->[찾아보기]
아래 경로로 이동하여 Microsoft.WindowsMobile.Samples.Location.dll 을 참조 추가 합니다.


C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS\bin\Debug


using 선언문에 아래를 추가 해 줍니다.

  using Microsoft.WindowsMobile.Samples.Location;



 GPS 사용을 위한 객체를 선언하고 GPS의 위치변화를 탐지하는 이벤트핸들러를 추가합니다. 

         Gps gps;
         GpsPosition position;

        private EventHandler updateHandler;
      
    
   private void Form1_Load(object sender, EventArgs e)
        {
         
  gps = new Gps();
           
       
    updateHandler = new EventHandler(speed);
            gps.LocationChanged += new LocationChangedEventHandler(LocationChanged);
        }



속도를 구하는 방법은 간단합니다.

GetPosition 객체의  Speed 를 이용 하면 끝입니다.
기본적으로는 Km/h 단위이지만 따로 단위환산 작업을 한다면 여러가지 단위로 출력 가능 합니다.

속도 외의 위치 정보인 위도,경도,고도를 표시 하겠습니다.

     
   void speed(object sender, System.EventArgs args)
        {
           position = gps.GetPosition();
             
                    if (position.SpeedValid)
                    {              
                      label1.Text = position.Speed.ToString("0.00") + " Km/h";                        
                    }

                    if (position.LatitudeValid)
                    {
                        textBox1.Text = position.Latitude.ToString();
                    }
                    if (position.LongitudeValid)
                    {
                        textBox2.Text = position.Longitude.ToString();
                    }
           
                    if (position.SeaLevelAltitudeValid)
                    {
                        textBox3.Text = position.SeaLevelAltitude.ToString() +" Ft";
                    }    
        }


  protected void LocationChanged(object sender, LocationChangedEventArgs args)
        {
            position = args.Position;
            Invoke(updateDataHandler);
        }





마지막으로 GPS 실행과 종료를 정의 합니다.

  private void button1_Click(object sender, EventArgs e)
        {
            gps.Open();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            gps.Close();

            label1.Text = "0 Km/ h";

            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";

        }

        private void menuItem1_Click(object sender, EventArgs e)
        {
            gps.Close();
            this.Close();
        }




테스트 화면입니다.
에뮬레이터와 FakeGPS로 테스트 합니다.




속도 및 각 위치 정보를 확인 할 수 있습니다.

댓글