본문 바로가기
Education/Bit 18th

[Windows Mobile] Lab2 - GPS 사용법(1)

by ★용호★ 2009. 12. 6.

Study Mobile Project 연재 강좌.
 
Windows Mobile in C# 강좌
Lab 2 - GPS 사용법(1)

Windows Mobile in C#
  • 본 강좌는 Windows Mobile 6 세미나의 자료를 기반으로 제작 하였습니다.
  • Microsoft Visual Studio 2008 C# / Windows Mobile 6 Professional SDK


안녕하세요^^ Windows Mobile in C# 두번째 강좌 시간 입니다. 지난 시간에 이어서, 이번 강좌는 GPS 사용법에 대해 진행을 하려고 합니다. GPS 사용법의 첫번째 강좌로 에뮬레이터에 가상의 GPS를 설정하는 방법과 GPS 정보를 가져와서 화면에 출력하는 방법에 대해서 설명 하도록 하겠습니다. 아직 많이 미흡하고 부족한 강좌 이지만 보시는 분들이 조금이나마 도움이 되었으면 좋겠네요~~ 그럼 강좌를 시작하도록 하겠습니다. :)

1 에뮬레이터에 GPS 설정 방법

  • 지난번 강좌에서 에뮬레이터 설정 방법에 대해서 알아 보았습니다. 에뮬레이터 환경 설정을 모르시는 분들은 Emualtor Setting 이곳에서 확인 하시기 바랍니다. 다음번 강좌 부터는 에뮬레이터 설정에 대해서는 논하지 않도록 하겠습니다..^^;; 자.. 그럼 에뮬레이터에 가상 GPS를 설치 하도록 하겠습니다. 우선 첫번째로 에뮬레이터를 연결 합니다.

1.1 FakeGPS 설치

  • 가상의 GPS를 사용하기 위해서 MS에서 제공하는 FakeGPS 를 설치 합니다.
  • 에뮬레이터 창의 "파일" -> "구성" 을 클릭하여 에뮬레이터 속성 창을 띄웁니다.

    2.JPG

  • 에뮬레이터 속성 창의 "공유폴더"에 아래의 경로를 설정한 다음에 확인을 클릭합니다.

C:\Program Files\Windows Mobile 6 SDK\Tools\GPS

  • 다음, 에뮬레이터 화면에서 "시작" -> "프로그램" -> "파일 탐색기" -> "Storage Card" -> "FakeGPS" 를 클릭합니다.
  • FakeGPS를 설치할 때, 설치 위치는 "장치"로 설정 합니다.
  • 설치 완료 후, "시작" -> "프로그램"에서 설치된 FakeGPS를 확인 하실 수 있습니다. 만약 설치가 완료 되었는데도 프로그램 목록에 표시되지 않을 경우에는, 프로그램 창을 "X"를 클릭하여 종료 하신 다음 다시 "시작" -> "프로그램"을 보시면 FakeGPS 를 확인 하실 수 있습니다.

    3.JPG


  • 이제 가상의 GPS를 사용할 수 있는 FakeGPS 설치를 완료 하셨습니다. 간단하죠?? :)

2 Form 생성

2.1 FormGpsInfo

  • "FormGpsInfo.cs" 이름의 Windows Form 을 추가 합니다. 추가 방법은 다들 아실거라 생각합니다...^^;;
  • 생성된 FormGpsInfo Form의 좌측 메뉴에 Text는 "뒤로" 로 설정하고, Name은 "MnuBack"로 설정 합니다.

    4.JPG


  • FormGpsInfo 폼에 도구상자의 TextBox를 더블클릭하여 삽입합니다.
  • TextBox의 Name 속성은 "txtInfo" 로 설정하고, Dock 속성은 "TOP", Multiline 속성은 "TRUE"로 설정 후 TextBox의 크기를 여러줄의 내용을 확인 할 수 있게 늘려 줍니다. 원하는 만큼 늘려주시면 됩니다. 전 화면의 중앙정도까지만..ㅎ
  • 다음은 Button을 삽입 합니다. Text 속성은 "내 위치"로, Name 속성은 "BtnGpsUpdate"로 설정 합니다.

    5.JPG


3 참조 추가

  • GPS Device를 사용하기 위해서 Windows Mobile 6 SDK의 라이브러리를 추가 해야겠죠?? 추가 방법은 아래와 같습니다. :)
  • 우선 프로젝트에 "GPS"라는 폴더를 생성 합니다.
    6.JPG


  • 생성한 "GPS" 폴더에서 마우스 오른쪽을 클릭 후, "추가" -> "기존 항목"을 선택 합니다.

    8.JPG


  • "C:\Program Files\Windows Mobile 6 SDK\Samples\Smartphone\CS\GPS" 경로에 있는 아래의 파일을 추가 합니다.

    • DegreesMinutesSeconds.cs
    • DeviceStateChangedEventArgs.cs
    • GPS.cs
    • GpsDeviceState.cs
    • GpsPosition.cs
    • LocationChangedEventArgs.cs
    • Utils.cs

  • GPS 클래스가 다른 모든 클래스를 통합 시키는 역할을 합니다. 그래서 실제로 GPS 제어에 사용되는 클래스 이죠. 그외에 참조한 클래스들은 GPS장치, 위치처리 등에 필요한 클래스와 이벤트들을 별도로 만들어 처리할 수 있도록 만들어진 클래스 입니다.


4 Source Code

4.1 Main Form

  • 메인 폼의 "내 위치" 메뉴에 "FormGpsInfo" 폼으로 이동하는 클릭 이벤트를 아래와 같이 정의 합니다.

  try
{
      MobilityMetro2009.FormGpsInfo f = new MobilityMetro2009.FormGpsInfo();
      f.Show();
}
catch (Exception ex)
{
      throw ex;
}

      



4.2 FormGpsInfo

  • FormGpsInfo에서는 좌측 하단의 "뒤로" 메뉴와 GPS 정보를 출력하는 버튼에 대한 구현을 합니다. 따라서 작성하기 쉽게 FormGpsInfo의 전체 코드로 설명 드리겠습니다. 부분을 나눠서 설명하려니 힘드네요..^^;; 이해 부탁!! :)

using Microsoft.WindowsMobile.Samples.Location; // using 선언문 추가.

 

namespace MobilityMetro2009

{

    public partial class FormGpsInfo : Form

    {

        Gps gps;

        StringBuilder _info = new StringBuilder();

 

        public FormGpsInfo()

        {

            InitializeComponent();

            gps = new Gps();

            gps.Open(); // GPS 활성화.

        }

 

        // GPS 정보를 가져오는 함수 구현.

        void UpdateGPSInfo()

        {

            // GPS의 위치정보를 가진 객체 생성.

            GpsPosition position = gps.GetPosition();

            _info.Remove(0, _info.Length);

            double lat = position.Latitude; // 위도.

            double lon = position.Longitude; // 경도.

 

            _info.AppendLine("Lat (위도) : " + lat);

            _info.AppendLine("Long (경도) : " + lon);

             // 탐지되는 위성의 갯수.

            _info.AppendLine("위성 갯수 : " + position.SatelliteCount.ToString());

            txtInfo.Text = _info.ToString();

        }

 

        // "내위치" 버튼의 클릭 이벤트 정의.

        private void BtnGpsUpdate_Click(object sender, EventArgs e)

        {

            txtInfo.Text = "";

            UpdateGPSInfo(); // GPS 정보를 가져오는 함수 호출.

        }

 

        // 좌측 하단의 "뒤로" 메뉴의 클릭 이벤트 정의.

        private void MnuBack_Click(object sender, EventArgs e)

        {

            gps.Close();

            this.Close();

        }

    }

}


  • 간단하죠?? 위도와 경도, 위성의 갯수만을 가져오는 코드 입니다. 코드를 보시면 알 수 있는 것이 있습니다. 바로 Data를 가져오기 위해 생성한 position 객체는 GPS Device를 사용하기 위해 추가했던 GpsPosition.cs를 상속 받은 것을 볼 수있습니다. 즉 GPS 위치 정보는 GpsPosition.cs을 참조하여 가져올 수 있다는 것이죠.. 자.. 그럼 구현한 코드의 결과를 확인해 볼 차례입니다.

5 실행 결과

5.1 Emulator 실행 결과

  • 작성한 프로그램을 에뮬레이터에 실행 하기 전에 FakeGPS를 실행 해야 합니다. 실행 방법은 설치된 FakeGPS를 클릭하면 아래와 같은 화면을 볼 수 있습니다.

    9.JPG


  • FakeGPS를 "Enabled"로 설정 후, Done를 클릭 합니다. 이제 작성한 프로그램을 실행 시켜 봅시다!!
  • 작성 완료한 VS 에서 "Ctrl + F5"를 누르면 컴파일 후 자동 배포 하니 눌러 봅시다. 아래와 같은 화면이 나왔나요??

    10.JPG


  • 다음으로 우측 메뉴에서 "내 위치"를 클릭합니다. 우리가 만들었던 화면이 나옵니다. 그럼 "내위치" 버튼을 클릭 합시다.

    11.JPG


  • 위와 같은 Data가 TextBox에 나오나요?? 나오는 Data는 각자 다를 수 있습니다. 버튼을 누를때마다 조금씩 바뀌는 것도 확인 해 보실 수 있습니다. 그럼 가상의 GPS에서 보내지는 실시간 정보는 어떻게 활용 할까요?? 그것은 다음 시간에 설명 하도록 하겠습니다.. :)
  • 다음 시간에는 실시간으로 변하는 위치 정보와 다양한 Data를 사용하는 법에 대해서 강좌를 진행 하도록 하겠습니다. 미흡한 강좌를 끝까지 봐주셔서 감사드리며.. 다음 강좌에서 뵙겠습니다~

댓글