LogicSoft.com.pl - systemy informatyczne

Windows Mobile C# - obsługa GPS

Uwaga, otwiera nowe okno. PDFDrukujEmail

Projektowanie aplikacji mobilnych na platformę Windows Mobile w języku C# daje programiście wiele gotowych możliwości. Jedną z nich jest obsługa modułu GPS, dzięki czemu użytkownik może pobierać dane współrzędnych geograficznych za pomocą protokołu NMEA. Zadaniem tego artykułu jest opisanie sposobu implementacji obsługi GPS na platformę Windows Mobile.

W tym programie zostanie wykorzystana gotowa biblioteka do obsługi GPS w technologii .NET - Microsoft.WindowsMobile.Samples.Location.dll, oraz program FakeGPS umożliwiający symulacje działania GPS na emulatorze urządzenia przenośnego w programie Microsoft Visual Studio 2008 Professional.

Pierwsze, co należy zrobić, to wgrać na symulowane urządzenie aplikacje FakeGPS. Najlepiej zrobić to kopiując spakowany plik FakeGPS.cab z folderu Windows Mobile SDK (w moim przypadku: C:\Program Files (x86)\Windows Mobile 6 SDK\Tools\GPS) do folderu symulującym karte pamięci, a następnie uruchomić plik .CAB z poziomu telefonu w celu jego instalacji na urządzeniu. Kolejnym krokiem jest uruchomienie programu FakeGPS. Powinno ukazać się okno, jak na poniższym obrazku.

W celu uruchomienia GPS należy ustawić pierwszy ComboBox na wartość Enable, zaś w drugim wybrać symulowany plik NMEA (w moim przypadku dixies.txt) i zatwierdzić przyciskiem menu - Done. Kolejnym krokiem jest stworzenie nowego projektu Smart Device w Visual Studio. Na interfejs użytkownika będą składały się 2 przyciski typu Button (o nazwach: bStartGPS i bStopGPS), 2 pola typu TextBox (tbLongitude i tbLatitude) oraz tekst w formie Label (w celu podpisania długości i szerokości geograficznej). Całość powinna wyglądać jak na załączonym obrazku (dodane kilka mniej istotnych właściwości).

Dodatkowo właściwość ReadOnly pól typu TextBox powinna być ustawiona na True, w celu zlikwidowania możliwości edycji wyświetlanych danych, oraz przycisk Stop GPS powinień być nieaktywny (właściwość Enabled na False). W tym momencie interfejs użytkownika jest już gotowy i należy dodać tylko niezbędny kod.

Pierwsze, co należy zrobić, to dodanie do projektu referencji do biblioteki obsługującej GPS - Microsoft.WindowsMobile.Samples.Location.dll oraz dodanie przestrzeni nazw do kodu.

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.WindowsMobile.Samples.Location;

Kolejnym krokiem jest dodanie zmiennych globalnych odpowiedzialnych za obsługe GPS, aktualnej pozycji oraz delegata EventHandler, który później będzie wywoływany w celu aktualizacji danych.

public partial class Form1 : Form
{
private Gps gps = new Gps();
private EventHandler updateEvent;
private GpsPosition position = null;
...
}

Następnie w konstruktorze okna głównego należy dodać kod odpowiedzialny za zdarzenie zmiany pozycji GPS oraz przypisać do delegata funkcje, która będzie wywoływana wraz z wywoływaniem delegata.

public Form1() {
InitializeComponent();
updateEvent = new EventHandler(update);
gps.LocationChanged += new LocationChangedEventHandler(gps_LocationChanged);

}

Kod funkcji update i gps_LocationChanged został opisany poniżej.

void gps_LocationChanged(object sender, LocationChangedEventArgs args)
{
position = args.Position;
Invoke(updateEvent);
}

void update(object sender, System.EventArgs args)
{
if (gps.Opened)
{
if (position != null)
{
tbLongitude.Text = string.Format("{0}°{1}'{2:0}''", position.LongitudeInDegreesMinutesSeconds.Degrees, position.LongitudeInDegreesMinutesSeconds.Minutes, position.LongitudeInDegreesMinutesSeconds.Seconds);
tbLatitude.Text = string.Format("{0}°{1}'{2:0}''", position.LatitudeInDegreesMinutesSeconds.Degrees, position.LatitudeInDegreesMinutesSeconds.Minutes, position.LatitudeInDegreesMinutesSeconds.Seconds);
}
}
}

Zdarzenie odpowiedzialne za zmiane pozycji GPS przypisuje otrzymane dane do zmiennej position a następnie wywołuje zdarzenie aktualizacji danych. Zadaniem update jest sprawdzenie, czy GPS jest aktywny, oraz czy jest ustalona zmienna position, a następnie w odpowiednich TextBox'ach wyświetlane są sformatowane wartości przekazane przez urządzenie GPS (w tym przypadku FakeGPS).

Za włączenie i wyłączenie obsługi urządzenia GPS odpowiedzialne za przyciski Start GPS i Stop GPS. W oknie projektowania aplikacji należy dwukrotnie nacisnąć na oba przyciski, aby Visual automatycznie wygenerował zdarzenia naciśnięcia na nie, a następnie należy dodać poniżej opisany kod uruchamiania i wyłączania GPS.

private void bStartGPS_Click(object sender, EventArgs e)
{
if (!gps.Opened)
{
gps.Open();
}
bStartGPS.Enabled = false;
bStopGPS.Enabled = true;
}

private void bStopGPS_Click(object sender, EventArgs e)
{
if (gps.Opened)
{
gps.Close();
}
bStartGPS.Enabled = true;
bStopGPS.Enabled = false;
tbLatitude.Text = tbLongitude.Text = " włącz GPS";
}

Ostatnim elementem, który należy dodać jest wyłączenie GPS podczas zamykania programu. Realizuje to zdarzenie Closed okna głównego aplikacji.

private void Form1_Closed(object sender, EventArgs e)
{
if (gps.Opened)
{
gps.Close();
}
}

W ten sposób aplikacja umożliwiająca symulacje odbierania i przetwarzania danych GPS na urządzenie przenośne jest już gotowa. Poniżej znajduje się zrzut ekranu działającej aplikacji. Po więcej informacji zapraszam do działu kontakt.