Start Debugging
2012-01-15 Обновлено 2023-11-04 windows-phone Edit on GitHub

Windows Phone 7: получение текущей GPS-позиции с устройства

Как получить текущую GPS-позицию на устройстве Windows Phone 7 с помощью GeoCoordinateWatcher и события PositionChanged.

Получить текущую GPS-позицию на устройстве Windows Phone довольно просто. Для начала нужно добавить в проект ссылку на System.Device и затем using-выражение в классе, в котором вы хотите получить геолокацию.

using System.Device.Location;

Далее нужно объявить объект типа GeoCoordinateWatcher. Для удобства доступа объявим его как член класса, а не как локальную переменную внутри какого-нибудь метода.

GeoCoordinateWatcher geoWatcher = null;

Дальше: создаём экземпляр GeoCoordinateWatcher, заводим обработчик события position changed и затем начинаем читать данные. Для создания экземпляра перейдите в конструктор класса и скопируйте код:

geoWatcher = new GeoCoordinateWatcher();

Это создаст объект GeoCoordinateWatcher в ранее объявленной переменной. Если требуется определённая точность, у класса есть перегрузка конструктора, принимающая нужную точность параметром.

 geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);

Затем создайте обработчик для события PositionChanged. Можно набрать geoWatcher.PositionChanged += и дважды нажать TAB - обработчик создастся автоматически. После этого достаточно вызвать geoWatcher.Start(), чтобы начать чтение координат. Код должен выглядеть так:

GeoCoordinateWatcher geoWatcher = null; 

public MainPage() 
{ 
    InitializeComponent(); 
    geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); 
    geoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher_PositionChanged);
    geoWatcher.Start(); 
} 

void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
{ 
    throw new NotImplementedException(); 
}

Теперь хотим получить координаты нашего местоположения. Это очень просто. Их можно получить как объект GeoCoordinate, обращаясь к e.Position.Location в обработчике, либо как отдельные значения, сохранив e.Position.Location.Latitude, e.Position.Location.Longitude и e.Position.Location.Altitude в три переменные типа double. Пример ниже:

void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{ 
    GeoCoordinate currentLocation = e.Position.Location; 
    double currentAltitude = e.Position.Location.Altitude; 
    double currentLongitude = e.Position.Location.Longitude; 
    double currentLatitude = e.Position.Location.Latitude; 
}

Вот и всё. Если хотите избавиться от объекта и прекратить чтение текущей позиции после первого набора значений, просто добавьте следующие строки в обработчик. Иначе оформите это методом и вызывайте, когда захотите.

geoWatcher.Stop(); 
geoWatcher.Dispose(); 
geoWatcher = null;

Чтобы протестировать только что написанный код, я добавлю в приложение три textbox’а, в которых буду отображать данные. Вы можете сделать то же. Вот, собственно, и всё. Если есть вопросы - оставляйте комментарий, отвечу как можно скорее.

Скачать проект можно здесь.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад