суббота, 13 апреля 2013 г.

Bing Maps в приложениях Windows Store.

Если вы разрабатываете приложение, которое используют геолокацию - без карт вам не обойтись. В данном посте я расскажу как внедрить карты в свое Windows Store приложение на примере Bing Maps.

Первым делом нужно создать Bing Maps Account (можно использовать свою учетную запись Microsoft). Для того, чтобы использовать карты в своем приложении потребуется также создать Bing Map Key (в разделе Create or view keys), который используется для проверки подлинности карты. На данный момент существует три типа ключей:
  • Trial (используется в течение 90-дневного периода, при этом количество транзакций не должно превышать 10 000 за любой 30-дневный срок);
  • Basic (не имеет периода использования, однако количество транзакций не должно превышать 50 000 за 24 часа.);
  • Enterprise (используется для корпоративных учетных записей).
В таблице ниже приведены примеры, когда и какой ключ можно использовать:

Trial key Basic key Enterprise key
Public website + + +
Private website + - +
Mobile + + +
Windows Store app + + +
Business asset managment + - +
Education + + -
Not-for-profit + + -

После того как нужный ключ создан - следует установить Bing Maps SDK for Windows Store apps. Теперь все готово - перейдем непосредственно к приложению.


Создадим Blank App приложение для Windows Store и добавим в проект ссылки:


Помимо этого нужно установить Active solution platform в одно из значений: ARM, x86 или x64 (все зависит от того, для какой платформы вы разрабатываете). Отлично! Приступим к добавлению самой карты в приложение:

MainPage.xaml:
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Maps:Map x:Name="map" Credentials="{You key}"/>
    </Grid>
Здесь вместо {You key} подставьте свой ключ, который вы создали ранее

На данном этапе, если вы запустите приложение, карта уже будет отображаться на экране. 

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


Осталось написан код, который выполнить задуманную задачу:

MainPage.xaml.cs:
    private readonly Geolocator geolocator;
    private Pushpin pushpin;

    public MainPage()
    {
        InitializeComponent();
        geolocator = new Geolocator();
        geolocator.PositionChanged += OnPositionChanged;
    }

    /// <summary>
    /// Raised when the location is updated.
    /// </summary>
    /// <param name="sender">The event source.</param>
    /// <param name="args">The event data.</param>
    private async void OnPositionChanged(Geolocator sender, PositionChangedEventArgs args)
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            //Retrieve the Geolocation from Geolocator
            var geoposition = args.Position;
            //Create a new pushpin
            if (pushpin != null) return;
            pushpin = new Pushpin { Text = "Я" };
            //Add the pushpin
            map.Children.Add(pushpin);
            //Get the geolocation from windows 8 and convert to bing maps location
            var location = new Location(geoposition.Coordinate.Latitude, geoposition.Coordinate.Longitude);
            //Set the position of the pushpin
            MapLayer.SetPosition(pushpin, location);
            //Zoom Bing Maps to location
            map.SetView(location, 10.0f);
        });
    }

В приведенном коде мы создаем объект Geolocator и подписываемся на его событие Geolocator.PositionChanged, которое вызывается каждый раз, когда наше местоположение обновляется. Далее создаем объект Pushpin (скрепка), добавляем его на карту, устанавливаем полученные координаты и перемещаем центр карты с дополнительным приближением :)



Комментариев нет:

Отправить комментарий