День тринадцатый. Географические координаты

Вступление

Сегодня мы поговорим о LocationServices и как мы можем получить информацию о местонахождении устройства.

Почему локация - это так важно?

Давайте представим себе, что у нас есть приложение, которое содержит (или может получить через интернет) несколько сотен схем, списков и документацию по всем продуктам и устройствам, которые вы разрабатывали для ваших клиентов. На большинстве устройств можно организовать поиск клиентов, с которыми работаем в текущий момент, найти конкретный офис или сайт, а затем разобрать через десятки документов, которые могут по-прежнему отвечают нашим критериям.

Добавив данные о местоположении, мы избравляемся от необходимости искать всех подряд. Если каждый документ был бы с меткой геолокации данных, поиск конкретных документов также становится проще. Также мы могли бы в состоянии определить, какое здание, объект или устройство рядом с нами. Таким образом, использование местоположение устройства является одним из способов удобства и эффективности работы.

Еще один показательный пример - представьте себе приложение для игры в гольф, которое позволяет ввести свои результаты, отслеживать счет, и даже поделиться этой информацией с вашими друзьями.

Немного об определении местоположения

Сущестует три способа получения данных о местонахождении устройтсва в порядке точности: GPS, вышки сотовой связи и точки доступа Wi-fi.

Использовать любой из этих способов очень просто. Не нужны несколько страниц кода, как было раньше в Windows Mobile. Требуется несколько шагов:

  • Создаем новый объект GeoCoordinateWatcher
  • Создаем обработчик события, отслеживающий изменения позиции устройства
  • Считываем поступающие данные

Основным классом для определения местоположения является класс GeoCoordinateWatcher из пространства имен System.Device.Location. Конструктор принимает один из элементов перечисления GeoPositionAccuracy (Точность географических координат).

  • Default
  • High

После создания объекта GeoCoordinateWatcher необходимо задать обработчик события PositionChanged и вызвать метод Start. Событие PositionChanged возвращает объект GeoCoordinate, имеющий восемь свойств:

  • Latitude (Широта). Диапазон от -90 до 90 градусов
  • Longitude (Долгота). Диапазон от -180 до 180 градусов
  • Altitude (Высота)
  • HorizontalAccuracy и VerticalAccuracy - точность в горизонтальном или вертикальном положении
  • Course (Курс). Диапазон от 0 до 360 градусов
  • Speed (Скорость)
  • IsUnknown (Неизвестно). Принимает значение true, если Latitude или Longitude не являются числами

Пользователь может запретить в настройках разрешать определение местоположения устройства. В этом случае Latitude и Longitude имеют значения Double.Nan, а свойство IsUnknown имеет значение true.

Ниже приведена простейшая реализация примера.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Device.Location;
using Microsoft.Phone.Tasks;

namespace Day13_LocationServices
{
    public partial class MainPage : PhoneApplicationPage
    {
        GeoCoordinateWatcher gcw;
        
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            gcw.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(gcw_PositionChanged);
            gcw.Start();
        }

        void gcw_PositionChanged(object sender, GeoPositionChangedEventArgs e)
        {
            Latitude.Text = e.Position.Location.Latitude.ToString();
            Longitude.Text = e.Position.Location.Longitude.ToString();
        }
    }
}

Увы, эмулятор опять бессилен нам помочь для тестирования примера. Можно воспользоваться Reactive Extensions для эмуляции данных. На сайте MSDN есть статья How to: Use Reactive Extensions to Emulate and Filter Location Data for Windows Phone.

Картографические сервисы

О том, как использовать картографические сервисы можно прочитать в книге Ч.Петцольда Программируем Windows Phone 7.

Использованные материалы

Реклама