Získání GPS polohy v prohlížeči

Získání GPS polohy v prohlížeči

UPDATE:
Prohlížeč Chrome od verze 50 považuje informace o poloze uživatele za soukromá data a přes Geolocation API je zpřístupňuje pouze na stránkách zabezpečených HTTPS protokolem.

========================

Mobilní telefon máme v kapse skoro všichni a snadno jsme si zvykli, že jsou zobrazované informace přizpůsobené naší poloze. Je to komfortní, dokáže to ušetřit spoustu času a přitom je velmi jednoduché se prohlížeče na aktuální polohu zeptat.

Využívá se k tomu Geolocation API, které má dnes již širokou podporu, viz. caniuse.com. Komunikace s API je velmi jednoduchá a stačí ošetřit několik možných stavů.

Definice metody geolocation.getCurrentPosition je do velké míry samovysvětlující:

 navigator.geolocation.getCurrentPosition(success, error, options) 
  • v success poskytujeme callback pro úspěšně získanou polohu,
  • v error poskytneme callback pro případ odmítnutí poskytnutí polohy a
  • v options můžeme upřesnit dodatečné volby metody

více informací můžete získat třeba na stránce MDN

Firefox

Zde nám do toho zákeřně vstupuje Firefox se svojí volbou „Nyní ne„, která oproti všem očekáváním nevyvolá error callback. Nevyvolá totiž žádnou událost. Z pohledu kódu se poté zdá, že se uživatel stále nerozhodl jestli sdílení polohy povolí, nebo odmítne.

Jako nejrozumnější reakce na tento stav se mi jeví vyvolat po nějaké době vhodnou akci pomocí setTimeout() a tento timeout rušit pokud uživatel zareaguje dříve než se tento timeout provede.

Ukázka kódu

V ukázce si připravíme dvě jednoduché metody. V první nastavíme timeout pokud nedostaneme do 5 vteřin žádnou reakci a vytvoříme callbacky pro jednotlivé stavy. Na konci vyvoláme druhou metodu pro získání vlastní polohy:


var showPosition = function () {
    var timeout = setTimeout(function() {
        console.log("Timeout vyprsel...");
    }, 5000);
    
    var success = function (position) {
        clearTimeout(timeout);
        console.log("Ziskani polohy povoleno", position);
    };
    
    var failure = function(error) {
        clearTimeout(timeout);
        console.log("Poloha nedostupna...", error);
    };

    getPosition(success, failure);
};

Ve druhé metodě již komunikujeme s API a pomocí poskytnutých callbacků si vrátíme patřičné odpovědi. V případě úspěšného získání polohy to bude objekt se souřadnicemi, jinak chybový objekt:


var getPosition = function (success, failure) {
    var available = function (location) {
        var lat, lng, acc;
        lat = location.coords.latitude;
        lng = location.coords.longitude;
        acc = location.coords.accuracy;

        success({lat: lat, lng: lng, acc: acc});
    };
    
    var unavailable = function(error) {
        failure(error);
    };
    
    var options = {enableHighAccuracy: true, timeout: 5000, maximumAge: 0};

    navigator.geolocation.getCurrentPosition(available, unavailable, options);
};

To je vše. Nyní byste v konzoli měli vidět vaše souřadnice :-)

Pokud toto vyzkoušíte třeba v klasickém desktopovém prohlížeči na notebooku, tak nemusí být souřadnice přesné. V závislosti na vašem připojení, nebo poskytovateli připojení mohou být i velmi nepřesné a nemusí souhlasit ani kraj. Nicméně tento způsob získávání informací o poloze uživatele je asi nejpřesnější z dostupných a v mobilních zařízeních se zapnutou GPS funguje velmi spolehlivě.

Napsat komentář