Так как все приложения сперва разрабатываются с использованием эмулятора, то важно отметить, что для разработки приложений для платформ Microsoft, ни среда разработки, ни эмулятор не предоставляют данные о местоположении. Если мы запустим правильно написанный код на эмуляторе, то не получим никаких данных.
В случае работы с Windows Mobile необходимо ставить дополнительный эмулятор, который будет самостоятельно генерировать случайные (или указанные намеренно) географические координаты. Процесс настройки среды разработки под этот GPS-эмулятор, а также конфигурирование самого эмулятора достаточно сложен и трудоемок. В случае с Windows Phone 7 ситуация похожая – в среде разработки не предусмотренна возможность тестировать приложения с использованием GPS. Поможет в решений этой задачи другой инструмент. На сайте поддержки для разработчиков (msdn) приведена статья [17], которая в общих чертах описывает процесс настройки своей среды для возможности тестирования GPS. Однако, при этом, часть настроек, необходимых к конфигурированию, не указана, больше того – с выходом обновления для Инструментария Разработчика, возникли некоторые проблемы с приведенным в инструкции кодом.
Однако, важно отметить, что, только Windows Phone предоставляет встроенные в библиотеки функции для определения местоположения, такие как позиционирование посредством точек Wi-Fi, триангуляции телефонных вышек и GPS. Для доступа к этим функциям используется одинаковый интерфейс, что позволяет не задумываться об аппаратных аспектах работы телефона. Мы просто можем сказать, нужна ли нам всегда высокая точность или нет, если да – тогда будет использоваться только GPS, в противном случае – два других метода.
Для разработки этой части на платформе Windows Mobile использовалась стандартная библиотека Microsoft.WindowsMobile.Samples.Location, которая содержит базовые функции работы с GPS. Изучив их работу, была реализована возможность использовать модуль GPS. Используя функцию GPS.Open, возможно установить соединение и получить координаты местоположения. При этом, GPS.Open является элементом стандартного класса Microsoft.WindowsMobile.Samples.Location.GPS и если срабатывает событие locationChanged (событие запускается и запрашивает новые данные, если изменилась текущая локация), то после этого вызывается функция UpdateData(). UpdateData, в свою очередь, вызывая стандартные функции вышеописанного пространства имен, получает следующую информацию:
LatitudeInDegreesMinutesSeconds – широта (в градусах, минутах, секундах)
LongitudeInDegreesMinutesSeconds – долгота (в градусах, минутах, секундах)
GetSatellitesInSolution – определяет число доступных спутников
Для остановки запроса на определение местоположения, используется функция GPS.Close, которая останавливает выполнение потока запущенного события.
Аналогичным образом реализована библиотека Microsoft.Phone.Controls.Maps в Windows Phone, хотя произошли многочисленные изменения наименования классов и функций. Так, например, класс GPS был заменен на GeoCoordinateWatcher. Однако общая методика построения запроса для получения координат не изменилась.
В общем случае, при изменении местоположения, нам передаются следующие данные:
Latitude (Широта) [double] – от –90 до 90 градусов.
Longitude (Долгота) [double] – от –180 до 180 градусов.
Altitude (Высота) [double].
HorizontalAccuracy и VerticalAccuracy [double] – горизонтальная и вертикальная точность соотретственно.
Course (Курс) [double] – от 0 до 360 градусов (только Windows Phone).
Speed (Скорость) [double] (только Windows Phone).
IsUnknown принимает значение True, когда широта и долгота не являются числами (только Windows Phone).