Een inleiding tot de Geolocation-API

Invoering

Al vele jaren zijn papieren kaarten een antiek geworden. Ze zijn vervangen door speciale GPS-navigatieapparaten en mobiele applicaties die alomtegenwoordig zijn geworden. Je vindt ze in auto's en, nog belangrijker, op tablets en smartphones.

Een van de belangrijkste kenmerken van een navigatieapparaat is het detecteren van de huidige positie van het apparaat en het bijwerken wanneer het verandert. Dit helpt ons om van de ene locatie naar de andere te gaan door ons aanwijzingen te geven.

Vandaag hebben we het geluk dat geolocatie standaard wordt ondersteund door browsers. In dit artikel zullen we de Geolocation API bespreken, zodat applicaties de locatie van het apparaat kunnen detecteren en volgen.

De mogelijkheid om de locatie van het apparaat te detecteren heeft een breed scala aan toepassingen. Op het web gebruiken Google, Microsoft en Yahoo bijvoorbeeld de locatie van de gebruiker om de SERP's (Zoekmachine-resultatenpagina) aan te passen op basis van de locatie van de gebruiker. Lokalisatie is een andere uitstekende fit voor geolocatie.

1. Wat is het??

De Geolocation API definieert een interface op hoog niveau met locatie-informatie, zoals breedtegraad en lengtegraad, die is gekoppeld aan het apparaat dat de implementatie host. De API zelf is agnostisch voor de onderliggende locatie-informatiebronnen.

Algemene bronnen van locatie-informatie omvatten het Global Positioning System (GPS) en locatie-informatie afgeleid van netwerksignalen zoals het IP-adres van het apparaat, RFID, Wi-Fi, Bluetooth, MAC-adressen, GSM / CDMA-cel-ID's en gebruikersinvoer. Er wordt geen garantie gegeven dat de API de werkelijke locatie van het apparaat retourneert.

De geolocatie-API is een W3C-aanbeveling, wat betekent dat de specificatie stabiel is. We kunnen aannemen dat het in de toekomst niet zal veranderen, tenzij er aan een nieuwe versie wordt gewerkt. Het is vermeldenswaard dat de Geolocation API niet officieel deel uitmaakt van de HTML5-specificatie, omdat deze apart is ontwikkeld.

Nu we weten wat de Geolocation-API is en wat deze kan doen, is het tijd om te zien welke methoden worden blootgesteld aan ontwikkelaars.

2. Implementatie

Nauwkeurigheid

De API gebruikt verschillende bronnen om de positie van het apparaat te detecteren. Op een notebook of desktopcomputer zonder GPS-chip is de kans groot dat de positie wordt afgeleid van het IP-adres van het apparaat. Dit betekent dat de door de API geretourneerde locatie niet erg nauwkeurig is.

Op een mobiel apparaat kan de API echter informatie gebruiken van meerdere en nauwkeurigere bronnen, zoals de GPS-chip van het apparaat, de netwerkverbinding (wifi, 3G, HSPA +) en de GSM / CDMA-cel. U kunt nauwkeuriger locatiegegevens verwachten op een mobiel apparaat, vooral als GPS is ingeschakeld.

Privacy

De specificatie van de Geolocation API bespreekt ook privacy en permissies. In de specificatie wordt duidelijk aangegeven dat de toestemming van de gebruiker expliciet moet worden verkregen voordat de API wordt ingeschakeld.

Wat dit betekent, is dat de browser een melding aan de gebruiker moet weergeven om toestemming te vragen. Een voorbeeld van het bericht getoond aan de gebruiker wordt hieronder getoond (Google Maps).

API

De API beschrijft drie methoden die behoren tot de window.navigator.geolocation voorwerp. De geboden methoden zijn:

  • getCurrentPosition
  • watchPosition
  • clearWatch

Ondersteuning detecteren

Net als veel andere API's is het zeer eenvoudig om te bepalen of de browser van het apparaat de Geolocation API ondersteunt. Bekijk het volgende fragment waarin we ondersteuning voor de Geolocation-API detecteren.
if (window.navigator && window.navigator.geolocation) // Ik kan je overal bekijken ... else // Niet ondersteund

Lokaliseren van het apparaat

Om de locatie van het apparaat te detecteren, bellen we getCurrentPosition of watchPosition, afhankelijk van uw behoeften. Beide methoden voeren dezelfde taak uit met slechts een paar kleine verschillen.

Om de locatie van het apparaat te verkrijgen, getCurrentPosition en watchPosition een asynchroon verzoek doen. Het verschil tussen deze methoden is dat getCurrentPosition voert een eenmalig verzoek uit, terwijl watchPosition bewaakt de locatie van het apparaat op veranderingen en meldt de toepassing wanneer er een locatiewijziging plaatsvindt.

De Geolocation-API is slim genoeg om alleen de succesterugroep van te activeren watchPosition-aangeroepen wanneer de positie wordt verkregen-als de locatie van de gebruiker verandert.

Een ander belangrijk verschil tussen getCurrentPosition en watchPosition is de retourwaarde van elke methode. De getCurrentPosition methode retourneert niets, terwijl watchPosition geeft een identifier terug die kan worden gebruikt om te voorkomen dat de API de locatie van het apparaat bewaakt via de clearWatch functie.

De handtekeningen van getCurrentPosition en watchPosition er uitzien als dit:

// Get Current Position getCurrentPosition (successCallback [, errorCallback [, options]]) // Watch Position watchPosition (successCallback [, errorCallback [, options]])

Zoals de handtekeningen aangeven, accepteert elke functie drie parameters. Alleen het eerste argument, de succes-callback-functie, is vereist. Laten we elk argument van dichterbij bekijken.

  1. successCallback: Deze callback-functie wordt uitgevoerd nadat de locatie van de gebruiker met succes is verkregen. De terugbelfunctie accepteert een positie object dat de locatiegegevens van het apparaat bevat.
  2. errorCallback: De fout callback wordt uitgevoerd wanneer een fout wordt aangetroffen. De fout terugbellen accepteert een fout object, met informatie over het type fout dat is opgetreden.
  3. opties: De opties object geeft de ontwikkelaar de mogelijkheid om het asynchrone verzoek te configureren.

Bekijk de volgende fragmenten om te zien hoe u deze kunt gebruiken getCurrentPosition en watchPosition om de locatie van het apparaat te verkrijgen.

var geolocation = null; if (window.navigator && window.navigator.geolocation) geolocation = window.navigator.geolocation;  if (geolocatie) geolocation.getCurrentPosition (functie (positie) console.log (positie);); var identifier = geolocation.watchPosition (functie (positie) console.log (positie);); console.log (id); 

Stop monitoring locatie

In het vorige gedeelte noemde ik het clearWatch functie. Met deze functie kunt u stoppen met het volgen van de locatie van het apparaat, geïnitieerd door aan te roepen watchPosition.

De clearWatch functie accepteert één vereist argument, de identifier wordt teruggestuurd na het oproepen watchPosition.

Nu we de technische details van de Geolocation API hebben behandeld, is het tijd om de positie, fout, en opties objecten geretourneerd door de Geolocation API.

locatie informatie

Positie

De methoden die door de Geolocation API worden weergegeven, accepteren of retourneren drie soorten objecten. Het eerste object dat voor ons van belang is, is het positie object, dat de locatie-informatie bevat waarin we geïnteresseerd zijn. Bekijk de volgende tabel om een ​​idee te krijgen van de informatie die deze bevat.

Het positieobject dat is teruggezonden van de succes-callbacks van getCurrentPosition en watchPosition bevat een tijdstempel en coords eigendom. De coords eigenschap is een object dat de locaties bevat breedtegraad, Lengtegraad, hoogte, nauwkeurigheidaltitudeAccuracy, titel, en snelheid.

De meeste desktopbrowsers retourneren geen waarde voor de hoogtealtitudeAccuracytitel, en snelheid eigenschappen. Mobiele apparaten, zoals smartphones en tablets, bieden echter meer accurate informatie dankzij de aanwezigheid van een GPS-chip of andere hardware die helpt bij het detecteren van de locatie van het apparaat.

De tijdstempel eigenschap bevat de tijd dat de locatie werd gedetecteerd, wat handig kan zijn als u wilt weten hoe vers de gegevens zijn die zijn geretourneerd.

PositionError

De fout object van de fout terugbellen, het optionele tweede argument van getCurrentPosition en watchPosition, heeft een code en een bericht eigendom.

De bericht eigenschap beschrijft in het kort het type fout. De code property kan een van de volgende vier waarden hebben:

  • 0: De aanvraag is mislukt, maar de reden is niet bekend.
  • 1: De aanvraag is mislukt omdat de gebruiker geen toestemming heeft gegeven om de locatie van het apparaat te gebruiken.
  • 2: De aanvraag is mislukt als gevolg van een netwerkfout.
  • 3: De aanvraag is mislukt omdat het te lang duurde om de positie van het apparaat op te lossen.

PositionOptions

Het optionele derde argument van getCurrentPosition en watchPosition is een PositionOptions object, waardoor de ontwikkelaar het asynchrone verzoek kan aanpassen.

Het PositionOptions-object ondersteunt momenteel drie opties:

  • enableHighAccuracy: Als de waarde is ingesteld op waar, de webpagina of applicatie geeft aan dat het het best mogelijke, meest nauwkeurige resultaat wil. Dit kan resulteren in een lagere reactietijd of een hoger energieverbruik. De standaardwaarde is vals.
  • time-out: Deze eigenschap geeft het maximale aantal milliseconden aan, waarna de aanvraag als buiten de tijd moet worden beschouwd. De standaardwaarde is Oneindigheid.
  • jaar Maximum: Wanneer een locatieverzoek succesvol is, slaat de browser het resultaat in cache voor later gebruik. De jaar Maximum property geeft de tijd aan waarna de cache ongeldig moet worden gemaakt. De standaardwaarde is 0, wat betekent dat het verzoek niet in de cache mag worden geplaatst.

Browserondersteuning

Ondersteuning voor de Geolocation-API is echt goed. Dit geldt voor desktop- en mobiele browsers. Bekijk deze samenvatting om een ​​idee te krijgen van welke desktopbrowsers de Geolocation API ondersteunen:

  • Firefox 3.5+
  • Chrome 5.0+
  • Safari 5.0+
  • Opera 10.60+
  • Internet Explorer 9.0+

Ondersteuning in mobiele browsers is nog beter, zoals u in deze samenvatting kunt zien:

  • Android 2.0+
  • iPhone 3.0+
  • Opera Mobile 10.1+
  • Symbian (S60 derde en vijfde generatie)
  • Blackberry OS 6

De Geolocation-API wordt breed ondersteund. U vraagt ​​zich misschien af ​​wat u kunt doen als u een browser tegenkomt die de Geolocation-API niet ondersteunt. Geloof het of niet, er bestaan ​​verschillende polyfills en shims om dat probleem te verhelpen. De meest opvallende oplossingen zijn die van Manuel Bieh en een lichtgewicht schijf gemaakt door Paul Irish.

demonstratie

Nu we de ins en outs van de Geolocation API kennen, is het tijd om het in actie te zien. Deze demo is volledig functioneel en gebruikt alle methoden en objecten die in dit artikel worden beschreven. Het doel is eenvoudig, elke keer dat een verzoek om de positie van het apparaat wordt gedetecteerd, worden de locatiegegevens getoond aan de gebruiker in lijstindeling.

De demo bevat drie knoppen, waarmee u de bewerking kunt selecteren die u wilt uitvoeren. De demo detecteert ook of de browser de Geolocation API ondersteunt of niet. Als dit niet het geval is, wordt het bericht "API niet ondersteund" weergegeven en zijn de knoppen uitgeschakeld.

De broncode van de demo wordt hieronder getoond, maar je kunt ook spelen met een live demo van de Geolocation API.

      Geolocation API Demo door Aurelio De Rosa    

Geolocation API

API niet ondersteund

Informatie

  • Jouw positie is niet beschikbaarbreedtegraad, niet beschikbaar° lengtegraad (met een nauwkeurigheid van niet beschikbaar meter)
  • Je hoogte is niet beschikbaar meter (met een nauwkeurigheid van niet beschikbaar meter)
  • je bent niet beschikbaar° vanuit het ware noorden
  • Je beweegt met een snelheid van niet beschikbaar° meter / seconde
  • Gegevens bijgewerkt op niet beschikbaar

Log

Demo gemaakt door Aurelio De Rosa (@AurelioDeRosa)

Conclusie

In dit artikel hebben we geleerd over de Geolocation-API. We hebben gezien wat het is, hoe het te gebruiken en wanneer het te gebruiken.

De geolocatie-API is een nuttige tool om de gebruikerservaring te verbeteren en kan vele doelen dienen. Ondersteuning is breed, maar vergeet niet dat oudere versies van Internet Explorer dit niet ondersteunen.

Zoals we in dit artikel hebben besproken, moet u zich ervan bewust zijn dat sommige locatiegegevens, zoals snelheidhoogte, en titel, zijn niet altijd beschikbaar. Vergeet ook niet om de Geolocation API met zorg te gebruiken, omdat deze een aanzienlijke batterijcapaciteit vereist, vooral op mobiele apparaten die zijn uitgerust met een GPS-chip.