BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











WP7 dla programistów. Część 10 - Lokalizacja i BING

24-03-2011 09:00 | Daniel Plawgo
Zapraszam do lektury dziesiątego artykułu poświęconego Windows Phone 7. W poprzedniej części zapoznaliśmy się z nowym podejście do komunikacji z urządzeniem a mianowicie notyfikacjom PUSH. Dziś przyjrzymy się w jaki sposób możemy określić lokalizację telefonu oraz w jaki sposób korzystać z usług oferowanych przez Binga poświęconych właśnie lokalizacji.. Artykuł ten ściśle nawiązuje do równoległego cyklu webcastów dostępnych na Channel 9 poświęconych programowaniu na platformi

Wstęp

Zapraszam do lektury dziesiątego artykułu poświęconego Windows Phone 7. W poprzedniej części zapoznaliśmy się z nowym podejście do komunikacji z urządzeniem a mianowicie notyfikacjom PUSH. Dziś przyjrzymy się w jaki sposób możemy określić lokalizację telefonu oraz w jaki sposób korzystać z usług oferowanych przez Binga poświęconych właśnie lokalizacji. Artykuł ten ściśle nawiązuje do równoległego cyklu webcastów dostępnych na Channel 9 poświęconych programowaniu na platformie Windows Phone 7. Gorąco zachęcam do obejrzenia dziesiątej części, która jest autorstwa Bartka Zassa.

Lokalizacja

Windows Phone 7 umożliwia programiście określenie lokalizacje w jakiej znajduje się telefon. Dzięki czemu programista w swojej aplikacji może na przykład wyświetlić informacje dostosowane do aktualnej lokalizacji użytkownika. Np. w aplikacji, która wyświetla informacje o aktualnej pogodzie można wyświetlić pogodę dla miejsca, w którym znajduje się użytkownik.

Windows Phone 7 umożliwia określenie lokalizacji telefonu za pomocą trzech różnych sposobów:

  • GPS – gps jest najdokładniejszą metodą, które umożliwia zlokalizowanie telefonu z dokładnością do kilku metrów. Niestety sposób ten ma kilka wad. Po pierwsze zużywa dużo zasobów energetycznych, przez co bateria dużo szybciej się rozładowuje i przez co telefon pracuje dużo krócej na baterii. Dodatkowo określenie lokalizacji trwa dość długo oraz ten sposób jest dostępny tylko na zewnątrz, gdzie widoczne jest niebo (w budynku nie jesteśmy w stanie za pomocą gps określić położenia telefonu).
  • Nadajniki BTS – innym sposobem określenia lokalizacji jest wykorzystanie sieci GMS. Telefon na podstawie siły sygnału trzech najbliższych nadajników BTS może określić w przybliżeniu położenie telefonu. Metoda ta jest najszybszą metodą (wynik dostajemy praktycznie od razu) oraz zużywającą najmniej energii. Niestety w przypadku tej metody dokładność jest bardzo niska (rzędu kilku kilometrów) i zależy od lokalizacji nadajników w okolicy. Metoda ta nadaje się bardzo dobrze do aplikacji, w których nie potrzebujemy dokładnej lokalizacji tylko np. informacji o tym, w jakim mieście się znajdujemy (np. do aplikacji wyświetlającej pogodę)
  • Sieć WIFI – ostatnim sposobem na lokalizację telefonu jest wykorzystanie sieci wifi, do której jest podłączony telefon. Na podstawie adresu IP sieci jesteśmy w stanie określić w przybliżeniu położenie telefonu.

Na szczęście w naszej aplikacji nie musimy się martwić, który sposób wybrać i jak dokładnie go oprogramować. Dostajemy jedno API, które jest warstwą abstrakcji dla powyższych metoda. To system w zależności od warunków wybierze odpowiedni sposób określenia położenia. Domyślnie działa to tak, że system zwraca szybko położenie określone na podstawie nadajników BTS, natomiast następnie jeśli jest wstanie określić położenia za pomocą GPS, aktualizuje je do dokładniejszej wartości.

Wszystkie potrzebne klasy znajdują się w przestrzeni nazw System.Device.Location, a najważniejszą klasą jest GeoCoordinateWatcher, która posiada zdarzenie PositionChanged, które jest wywoływane wtedy, gdy telefon zmienił swoje położenia. Zdarzenie te w argumencie dostaje między innymi informacje o położeniu telefonu, dokładności określonej pozycji, szybkości zmiany położenie, kierunku zmiany itp. Za pomocą metody Start rozpoczynamy nasłuchiwania zmian położenia, natomiast za pomocą metody Stop przestajemy.

Poniżej kawałek kodu pokazujący pracę w klasą GeoCoordinateWarcher:

GeoCoordinateWatcher watcher;
watcher = new GeoCoordinateWatcher();

watcher.PositionChanged += (sender, e) =>
{
      var coordinate = e.Position.Location;
      Console.WriteLine("Lat: {0}, Long: {1}", coordinate.Latitude,
         coordinate.Longitude);
            };

     // Rozpoczęcie pracy usług lokalizacyjnych.
     watcher.Start();

 

Artykuł Tima Heuera pokazuje w jaki sposób na emulatorze można sobie za emulować działanie usług lokalizacyjnych, dzięki czemu można przetestować aplikację, bez konieczności posiadania fizycznego telefonu.

Bing Maps

Microsoft oferuje bezpłatne usługi Binga (dla rozwiązań mobilnych) związane z lokalizacją. Szczegółowe informacje oraz rejestracja (musimy się zarejestrować oraz w aplikacji wykorzystać klucz zdobyty podczas rejestracji, aby nie wyświetlała się informacja o tym, że nie mamy zarejestrowanej usług) na stronie www.bingmapsportal.com. Na tej stronie znajdziemy również szczegółowe informacje o oferowanych usługach.

Oferowane usługi umożliwiają takie rzeczy jak: wyznaczenie drogi z dwóch miejsc, określenie adresu dla danego punktu, wyszukanie w okolicy punktu jakiś elementów (np. restauracji) i wiele innych.

Dodatkowo programiści mają możliwość korzystania z kontrolki Map, która wyświetla mapę Binga. Kontrolka ta praktycznie nie różni się od kontrolki dostępnej w Silverlight na PC.

Poniżej przykładowa deklaracji kontrolki Map w xamlu (gdzie właśnie CredentialsProvider to klucz uzyskany po rejestracji):

<my:Map Grid.Row="1" Name="map1" CredentialsProvider="klucz" />

Natomiast w taki sposób moglibyśmy aktualizować punkt wyświetlany na mapie otrzymany z usług lokalizacyjnych:

void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
  
{
    Dispatcher.BeginInvoke( () =>
    map1.SetView(new System.Device.Location.GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude), 5));             
}

Podsumowanie

Tymczasem dotarliśmy do końca dzisiejszego tematu. Teraz wiemy w jaki sposób zlokalizować telefon i na podstawie tych informacji na przykład wyświetlić informacji w aplikacji odpowiadających tej lokalizacji. Dodatkowo poznaliśmy usługi w ramach Binga, które są związane z lokalizacją. Przypominam, że równolegle z tym cyklem na Channel 9 jest również publikowana seria webcastów poświęcona Windows Phone 7. Tym samym zapraszam do obejrzenia dziesiątego odcinka.

Daniel Plawgo
Daniel Plawgo
Na co dzień programista technologii .NET, dla którego to również hobby. Od lat związany z Olsztyńską społecznością pasjonatów technologii Microsoftu.

Komentarze 0

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.