Із дозволу користувача, програма Windows Phone може отримати інформацію про географічне положення телефону, використовуючи технологію Assisted-GPS, або коротко — A-GPS.

A-GPS система навігації визначає місце розташування отримуючи інформацію про розташування веж мобільного зв'язку або мережі.

Для того, щоб включити цю опцію в вашій програмі необхідно додати відповідний тег у файл WMAppManifest.xml: <Capability Name="ID_CAP_LOCATION" />

До проекту необхідно підключити збірку System.Device, а у коді прописати дерективу using для простору імен System.Device.Location. Клас який вам допомагає отримати інформацію про місце розташування називається GeoCoordinateWatcher. Він дозволяє отримувати інформацію з заданою точністю, яка задається в конструкторі класу у вигляді варіантів представленими перечисленням GeoPositionAccuracy, яке має два значення Default і High.

Так само як при роботі з акселерометром, вам необхідно додати обробник події PositionChanged і визвати метод Start. У інформації, яка передається коду в методі обробки події використовуючи об'єкт GeoCoordinate містяться такі дані:

Latitude - широта, приймає значення типу double у проміжку від –90 до 90 градусів; Longitude - довгота , приймає значення типу double у проміжку від –180 до 180 градусів; Altitude - висота у форматі double; HorizontalAccuracy і VerticalAccuracy - точність вертикальних і горизонтальних координат; Course - азімут, значення типу double у проміжку від 0 до 360 градусів; Speed - швидкість руху. число типу double; IsUnknown - змінна типу Boolean, яка приймає значення true, якщо Latitude і Longitude не є числом;

Якщо програма не має доступу до функції визначення місцерозташування, тоді значення змінних Latitude і Longitude буде дорівнювати Double.NaN, а IsUnknown прийме значення true.

Приклад виводу тексту із координатами у програмі XNA: protected override void Initialize() { GeoCoordinateWatcher geoWatcher = new GeoCoordinateWatcher(); geoWatcher.PositionChanged += OnGeoWatcherPositionChanged; geoWatcher.Start(); base.Initialize(); }

void OnGeoWatcherPositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> args) { text = String.Format("Latitude: {0:F3}\r\n" + "Longitude: {1:F3}\r\n" + "Altitude: {2}\r\n\r\n" + "{3}",

args.Position.Location.Latitude, args.Position.Location.Longitude, args.Position.Location.Altitude, args.Position.Timestamp); }

protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Navy); spriteBatch.Begin(); spriteBatch.DrawString(kootenay14, text, textPosition, Color.White); spriteBatch.End(); base.Draw(gameTime); }

Примітка: деталі програми, які стосуються виводу тексту на екран не приведені у програмі. (див. Створення першої XNA програми)

Література Programming Windows Phone 7, Charles Petzold