(głosów: 1, średnia ocena: 5,00)
 Loading ...

API geolokalizacji

API geolokalizacji

API geolokalizacji umożliwia udostępnianie informacji o miejscu pobytu zaufanym serwisom internetowym. Szerokość i długość geograficzna są na stronie dostępne poprzez JavaScript. Za pomocą skryptów informacje te można wysłać do serwera, aby je jakoś ciekawie wykorzystać, np. znaleźć pobliskie firmy albo wyświetlić mapę okolicy.

W poniższej tabeli widać, że API geolokalizacji jest obsługiwane przez większość przeglądarek i urządzeń mobilnych. Ponadto przy użyciu specjalnych bibliotek do współpracy da się też namówić niektóre starsze przeglądarki i urządzenia. O tym będzie mowa w dalszej części rozdziału.

Obsługa API geolokalizacji
IEFirefoxSafariChromeOperaiPhoneAndroid
9.0+3.5+5.0+5.0+10.6+3.0+2.0+

Platformy mobilne oprócz standardowego API geolokalizacji obsługują jeszcze wiele różnych własnych API. Więcej na ten temat dowiesz się w dalszej części rozdziału.

Pokaż mi jakiś kod

API geolokalizacji jest zbudowane wokół nowej własności globalnego obiektu navigator: navigator.geolocation.

Poniżej przedstawiony jest najprostszy sposób jego wykorzystania:

function get_location() {
  navigator.geolocation.getCurrentPosition(show_map);
}

Nic tu nie wykrywamy, nie obsługujemy błędów i nie ma żadnych opcji. Twoja aplikacja powinna zawierać implementację przynajmniej pierwszych dwóch z wymienionych składników. Aby sprawdzić, czy API geolokalizacji jest obsługiwane, można użyć biblioteki Modernizr:

JA UMIEĆ LOKALIZOWAĆ?

function get_location() {
  if (Modernizr.geolocation) {
    navigator.geolocation.getCurrentPosition(show_map);
  } else {
    // Brak standardowej obsługi, więc trzeba zastosować jakieś wyjście awaryjne
  }
}

Co zrobisz wiedząc, że przeglądarka obsługuje geolokalizację zależy od ciebie. Technikę awaryjną z użyciem JavaScriptu objaśnię nieco dalej, a na razie napiszę, co się dzieje podczas wywołania metody getCurrentPosition(). Jak napisałem na początku tego rozdziału, na geolokalizację musi zgodzić się użytkownik. To znaczy, że przeglądarka nigdy cię nie zmusi do ujawnienia serwerowi swojego miejsca pobytu. Pytanie o pozwolenie na udostępnienie tych informacji wygląda różnie w przeglądarkach. Przykładowo w przeglądarce Mozilla Firefox, wywołanie metody getCurrentPosition() API geolokalizacyjnego powoduje wyświetlenie paska informacyjnego w górnej części okna programu. Pasek ten wygląda tak:

Pasek informacyjny geolokalizacji

Całkiem sporo tu się dzieje. Użytkownik

  • zostaje poinformowany, że strona chce poznać jego lokalizację;
  • zostaje poinformowany która strona chce znać te informacje;
  • może wejść na stronę „Location-Aware Browsing” Mozilli, na której znajduje się wyjaśnienie o co w ogóle chodzi (krótko: Google udostępnia lokalizację i zapisuje twoje dane zgodnie z zasadami Location Service Privacy Policy)
  • może pozwolić na udostępnienie informacji o miejscu pobytu;
  • może nie pozwolić na udostępnienie informacji o miejscu pobytu;
  • może nakazać przeglądarce zapamiętać swój wybór (pozwolenie albo brak pozwolenia), aby więcej nie wyświetlała tego pytania na tej stronie

Ponadto pasek informacyjny jest:

  • niemodalny, a więc nie uniemożliwi przejścia na inną kartę lub do innego okna;
  • przypisany do karty, a więc zniknie po przejściu do innego okna lub innej karty i pojawi się znowu po powrocie do pierwszej karty;
  • bezwarunkowy, a więc nie ma sposobu na pominięcie jego wyświetlenia;
  • blokujący, a więc przeglądarka nie może sprawdzić lokalizacji użytkownika podczas oczekiwana na odpowiedź.

Przed chwilą widziałeś kod JavaScript powodujący wyświetlenie paska informacyjnego. Jest to jedna funkcja pobierająca jako argument funkcję zwrotną (przeze mnie nazwaną show_map). Wywołanie metody getCurrentPosition() spowoduje jej natychmiastowe wykonanie, ale to nie znaczy, że od razu będziemy mieli dostęp do danych lokalizacyjnych. Pierwsze miejsce, w którym mamy gwarancje otrzymania informacji lokalizacyjnych jest funkcja zwrotna. Kod tej funkcji jest następujący:

function show_map(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  // Pokażmy mapę albo zróbmy coś innego równie fajnego!
}

Funkcja zwrotna zostanie wywołana z jednym parametrem w postaci obiektu z dwiema własnościami: coords i timestamp. Własność timestamp określa datę i godzinę, kiedy obliczono położenie. (Jako że wszystko odbywa sie asynchronicznie, nie można z góry przewidzieć kiedy będzie miało miejsce. Może upłynąć trochę czasu zanim użytkownik przeczyta informację i zgodzi się na udostępnienie informacji o swojej lokalizacji. Urządzenia GPS mogą potrzebować trochę czasu na połączenie się z satelitą GPS. Itd.) Obiekt coords ma własności latitude i longitude, które oznaczają szerokość i długość geograficzną, a więc fizyczne położenie użytkownika na ziemi.

Obiekt Position
WłasnośćTypUwagi
coords.latitudedoublestopnie dziesiętne
coords.longitudedoublestopnie dziesiętne
coords.altitudedouble lub nullmetry nad elipsoidą odniesienia
coords.accuracydoublemetry
coords.altitudeAccuracydouble lub nullmetry
coords.headingdouble lub nullstopnie zgodnie z ruchem wskazówek zegara od prawdziwej północy
coords.speeddouble lub nullmetry/sekundy
timestampDOMTimeStampjak obiekt Date()

Gwarantowane są tylko trzy z tych własności: coords.latitude, coords.longitude oraz coords.accuracy. Reszta może mieć wartość null, chociaż zależy to od możliwości urządzenia i serwera pozycjonowania. Własności heading i speed są w razie możliwości obliczane na podstawie poprzedniej lokalizacji użytkownika.

Dodaj komentarz









Newsletter

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