1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki (głosów: 1, średnia ocena: 4,00)
Loading...Loading...

Metody sprawdzania pozycji

W rozdziale:

Chcę mieć wybór!

Niektóre powszechnie używane urządzenia mobilne — takie jak iPhone i telefony z Androidem — obsługują dwie metody sprawdzania pozycji. Pierwsza polega na wyznaczeniu położenia metodą triangulacji na podstawie względnej odległości od różnych wież telefonii komórkowej należących do operatora, z którego usług korzysta użytkownik. Metoda ta jest szybka i nie wymaga stosowania żadnego specjalnego sprzętu GPS, ale jest też mało dokładna. W zależności od liczby wież telefonii komórkowej w okolicy ta niedokładność może być równa rozmiarowi bloku w mieście jak również wynosić kilometr w każdym kierunku.

Druga metoda polega na wykorzystaniu specjalnego sprzętu GPS w urządzeniu do połączenia się z satelitami pozycjonowania GPS krążącymi po ziemskiej atmosferze. Za pomocą GPS-u można określić czyjeś położenie z dokładnością do paru metrów. Wadą tego rozwiązania jest to, że układ GPS pochłania dużo energii, przez co telefony i inne urządzenia wyłączają go dopóki nie jest potrzebny. To znaczy, że od chwili uruchomienia układu do nawiązania połączenia z satelitami GPS będzie musiało upłynąć trochę czasu. Jeśli kiedykolwiek używałeś Map Google na iPhonie lub w innym smartfonie, to zapewne wiesz jak wyglądają oba opisane procesy. Najpierw widoczny jest duży okrąg pokazujący w przybliżeniu twoją pozycję (po znalezieniu najbliższej wieży komórkowej), a potem pokazuje się mniejsze kółko (triangulacja z innymi wieżami), aż w końcu pojawia się kropka oznaczająca dokładną pozycję (uzyskaną dzięki satelitom GPS).

Piszę o tym, bo może w niektórych przypadkach nie będziesz potrzebować wysokiej dokładności. Jeśli chcesz znaleźć ofertę pobliskich kin, to przybliżone informacje o twojej pozycji będą wystarczające. Nie ma tak dużo kin, nawet w gęsto zabudowanych miastach, a poza tym i tak pewnie sprawdzisz ofertę kilku z nich. Jeśli jednak chcesz udzielić komuś dokładnych wskazówek, jak gdzieś dotrzeć, to musisz dokładnie wiedzieć, gdzie ten ktoś się znajduje, aby móc mu powiedzieć „za 20 metrów skręć w lewo” itd.

Funkcja getCurrentPosition() opcjonalnie przyjmuje jeszcze trzeci argument, obiekt PositionOptions. W obiekcie tym można ustawić trzy własności i wszystkie są opcjonalne. Można ustawić dowolną jedną, wszystkie albo nie ustawiać żadnej.

Obiekt PositionOptions
WłasnośćTypWartość domyślnaUwagi
enableHighAccuracyLogicznafalsetrue może być wolniejsza
timeoutlong(brak domyślnej)w milisekundach
maximumAgelong0w milisekundach

Własność enableHighAccuracy służy do włączania modułu precyzyjnego określania położenia: jeśli ma wartość true i urządzenie ją obsługuje, a użytkownik zgodzi się na podanie swojego dokładnego położenia, to urządzenie spróbuje podać te informacje. W iPhone’ach i telefonach z Androidem osobno wyraża się zgodę na określenie przybliżonej i dokładnej pozycji, a więc istnieje możliwość, że wywołanie getCurrentPosition() z własnością enableHighAccuracy:true zakończy się niepowodzeniem, a z własnością enableHighAccuracy:false — powodzeniem.

Własność timeout określa liczbę milisekund, jaką aplikacja może czekać na otrzymanie informacji o położeniu. Licznik ten zaczyna odmierzać czas od momentu gdy użytkownik wyrazi zgodę na próbę obliczenia jego pozycji. Ograniczenie nie dotyczy użytkownika, tylko sieci.

Własność maximumAge umożliwia urządzeniu natychmiastowe wysłanie odpowiedzi z bufora. Wyobraźmy sobie na przykład, że wywołujemy funkcję getCurrentPosition() pierwszy raz, użytkownik zezwala na podanie jego pozycji i następuje wywołanie funkcji zwrotnej powodzenia z pozycją obliczoną dokładnie o godzinie 10:00 rano. Dokładnie minutę później, czyli o 10:01, ponownie wywołujemy funkcję getCurrentPosition() z własnością maximumAge ustawioną na 75000.

navigator.geolocation.getCurrentPosition(
  success_callback, error_callback, {maximumAge: 75000});

Informujemy system, że niekoniecznie interesuje nas bieżące położenie użytkownika. Wystarczy nam wiedzieć, gdzie się znajdował 75 sekund temu (75000 milisekund). Urządzenie wie, gdzie użytkownik znajdował się 60 sekund temu (60000 milisekund), ponieważ obliczyło jego pozycję przy pierwszym wywołaniu funkcji getCurrentPosition(). W związku z tym nie wykonuje tych samych obliczeń jeszcze raz, tylko zwraca te same informacje, co za poprzednim razem: taką samą szerokość i długość geograficzną, dokładność oraz ten sam znacznik czasu (10:00 rano).

Zanim poprosisz o udostępnienie danych o pozycji użytkownika, powinieneś przemyśleć jak wysoka dokładność jest ci potrzebna i odpowiednio ustawić własność enableHighAccuracy. Jeśli informacji tych będziesz potrzebować więcej niż raz, musisz zastanowić się jak długo dane zdobyte za pierwszym razem będą nadawały się do użytku i odpowiednio ustawić własność maximumAge. Jeśli musisz sprawdzać pozycję na bieżąco, to nie używaj metody getCurrentPosition(). Do tego służy metoda watchPosition().

Funkcja ta ma taką samą strukturę jak getCurrentPosition(). Pobiera jako argumenty dwie funkcje zwrotne. Jedna jest wymagana i dotyczy powodzenia operacji, a druga jest niewymagana i dotyczy obsługi błędów. Ponadto jako argument można przekazać jeszcze obiekt PositionOptions zawierający takie same własności, jak opisane wcześniej. Różnica polega na tym, że w tym przypadku funkcja zwrotna jest wywoływana przy każdej zmianie pozycji użytkownika. Nie ma potrzeby ciągle wysyłać zapytań. Urządzenie automatycznie określi najlepszy odstęp czasowy zapytań i wywoła funkcję zwrotną przy każdej zmianie pozycji użytkownika. Uzyskanych w ten sposób informacji można używać do przesuwania znacznika na mapie, dostarczania wskazówek kierunkowych itd. Możesz z nimi zrobić co chcesz.

Funkcja watchPosition() zwraca liczbę. Liczbę tę powinno się gdzieś zapisać. Gdy będziesz chciał przestać śledzić użytkownika, możesz wywołać metodę clearWatch() i przekazać jej tę liczbę. To spowoduje, że urządzenie przestanie wywoływać naszą funkcję zwrotną. Jeśli używałeś kiedyś funkcji JavaScript setInterval() i clearInterval(), to wiesz jak to działa.

Dodaj komentarz









Newsletter

Subskrybując nasz newsletter masz pewność, że nie ominie Cię żadna nowość w serwisie!