Розробка програм для Windows Phone/Географічне положення

Матеріал з Вікіпідручника

Із дозволу користувача, програма 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 програми)

Література[ред.]