개발환경
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로 테스트 합니다.
속도 및 각 위치 정보를 확인 할 수 있습니다.
|
댓글