среда, 24 апреля 2013 г.

Bing Maps. Стилизация Pushpin.

В этой статье я продолжу обзор использования Bing Maps в приложениях Windows Store. Но на этот раз я расскажу как стилизовать Pushpin-объекты на карте для различных типов объектов. Сразу приведу результат программы, чтобы было понятнее о чем идет речь.




Как видно, на карте расположено несколько объектов различного типа (магазины, кинотеатры, POI). Все эти объекты находятся в одной коллекции MapItemsControl объекта Map.

суббота, 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. Теперь все готово - перейдем непосредственно к приложению.

понедельник, 8 апреля 2013 г.

Azure Mobile Service - Как получить все данные?

Разбираясь с Windows Azure Mobile Service, наткнулся на очень интересный нюанс: при запросе данных с помощью метода IMobileServiceTable<T>.ToListAsync (и других аналогичных методов соответствующего интерфейса) количество возвращаемых записей (по умолчанию) не превышает 50! (Более подробно можно прочитать здесь).

Example:
    var mobileServiceTable = App.MobileService.GetTable<SomeObject>();
    var cloudList = await mobileServiceTable.OrderBy(obj => obj.SomeProperty).ToListAsync();
    var count = 0;
    foreach (var item in cloudList)
    {
        count++;
    }
    Debug.WriteLine(count);
Если кол-во объектов SomeObject > 50, count все равно будет равен 50

То есть для того, чтобы получить 150 записей, нужно использовать метод IMobileServiceTable<T>.Take и непосредственно указывать нужное количество. А если это количество заранее не известно? К примеру, нужно синхронизировать базу данных в облаке с локальной копией.
Чтобы узнать общее количество записей, потребуется интерфейс ITotalCountProvider, используя который можно получить количество всех записей, возвращаемых запросом.

Example:
    var mobileServiceTable = App.MobileService.GetTable<SomeObject>();
    var cloudList = await mobileServiceTable.OrderBy(obj => obj.SomeProperty).IncludeTotalCount().ToListAsync();
    var countProvider = cloudList as ITotalCountProvider;
    Debug.WriteLine(countProvider.TotalCount);
    var count = 0;
    foreach (var item in cloudList)
    {
        count++;
    }
    Debug.WriteLine(count);

Однако, это не решает проблему, так как переменная count будет по прежнему равно 50 (хотя TotalCount = 150).