Paikannusta pohjustettiin jo aiemmassa kirjoituksessa, joten nyt voidaan syöksyä suoraan teknisiin kiemuroihin.

Paikannus osana verkkosivuja on yksi uusista HTML5-aallon mukanaan tuomista mahdollisuuksista. JavaScriptillä operoitava Geolocation API löytyy luonnollisesti kaikista uusista selaimista, IE:ssä tuki alkaa versiosta 9. Käyttökohteista potentiaalisimmassa, mobiilissa, tuki on järjestään jokaisessa selaimessa.

Mobiililaitteissa paikannus tapahtuu pääasiallisesti GPS:n avulla. Kenties hämmentävästi paikannus toimii yllättävän tarkasti myös työpöytäselaimissa. Esimerkiksi Chrome käyttää Googlen Location Service:ä sijainnin selvittämiseen onnistuen siinä tunnettuja verkkosijainteja hyödyntämällä.

Raaka data haltuun

Yksityisyydensuojan nimissä paikannukseen tulee aina pyytää käyttäjältä lupa. Selaimet hoitavat luvan kysymisen automaattisesti, ja yhdelle palvelulle tai sivulle lupa tarvitsee antaa vain kerran. Luvan saamisen jälkeen sijaintitiedon kaivaminen onkin varsin helppoa.

if (navigator.geolocation) {    navigator.geolocation.getCurrentPosition(function(position) {      $('<p />', {        'html': 'Latitude: ' + position.coords.latitude + '<br>'                + 'Longitude: ' + position.coords.longitude + '<br>'                + 'Tarkkuus: ' + position.coords.accuracy + 'm'      }).appendTo('body');    });  }

Esimerkki 1: demosivu, lähdekoodi

Esimerkki on karu, eikä varmistuksia liiemmin tehdä. Ensimmäisellä rivillä tarkistetaan, että mahdollisuus paikannukseen on olemassa. Rivillä 2 haetaan sijainti. Funktio saa argumentikseen käsittelijäfunktion, jolle haettu sijainti välitetään. Käsittelijässämme oleellisin data tulostetaan sivulle.

Määritelmän mukaan listaamiemme leveys- ja pituusasteiden sekä paikannuksen tarkkuuden lisäksi aina saatavilla on myös paikannuksen aikaleima. Näiden neljän pakollisen tiedon lisäksi voi laitteesta riippuen olla saatavilla myös korkeustietoja sekä kulkusuunta ja -vauhti.

API palauttaa sijainnin leveys- ja pituuskoordinaatit verkossa yleisimmin käytetyssä WGS84-projektiossa, jolloin pääsääntöisesti projektioista ei (onneksi) tarvitse murehtia enempää. Manner-Suomessa leveysasteet osuvat välille 60–70 (pohjoista leveyttä, eli N) ja pituusasteet välille 21–32 (itäistä pituutta, eli E). Sijainnin hahmottamiseksi lisätään esimerkkiin yksinkertainen linkki Google Maps -palveluun, joka sallii sijainnin etsimisen koordinaattien perusteella.

API:n tarjoama koordinaattimuoto on asteina ja asteen desimaaleina, mikä ei ole kaikkein tutuin esitysmuoto. Esimerkkikoodimme toisessa inkarnaatiossa onkin apufunktio, joka muuntaa koordinaatit mukavamman näköiseen asteet-minuutit-sekunnit-formaattiin. Lisäksi, koska paikannus on teknisenä prosessina hieman riskialtista, on esimerkkiämme syytä täydentää asiaankuuluvilla tarkistuksilla ja virheenkäsittelijöillä.

Esimerkki 2: demosivu, lähdekoodi

Enemmän dataa jatkuvalla syötöllä

Yksittäinen paikkadatan kysely ei välttämättä ensimmäisellä yrityksellä tuota kovinkaan tarkkaa lopputulosta, etenkään GPS:ää käyttävissä laitteissa. Karkea tarkkuus, usein parin kilometrin luokkaa, on kuitenkin monissa tapauksissa riittävästi; ainakin kaupunki osuu kohdalleen. Tarkempaan tulokseen päästään, kun sijaintia määritetään jatkuvana, jolloin GPS:kin ehtii mukaan. Jatkuvan paikannusdatan käytöllä on toki myös omat käyttötarpeensa esimerkiksi navigoinnissa tai urheilusuoritusten tallennuksessa.

API luonnollisesti tarjoaa mahdollisuuden jatkuvaan paikannukseen. Tässä onnistumme vaihtamalla esimerkkien getCurrentPosition-funktion watchPosition-funktioon. Ja siinä se. Esimerkin seuraavaan vaiheeseen on lisätty myös painikkeet paikannuksen aloittamiseen ja lopettamiseen. Etenkin mobiilikäytössä GPS pureksii akkua siihen tahtiin, että on kohteliasta antaa käyttäjälle mahdollisuus rajoittaa paikannuksen käyttöä.

Esimerkki 3: demosivu, lähdekoodi

Vaikka muunsimmekin koordinaatit DMS-muotoon, eivät numerosarjat juurikaan auta hahmottamaan, missä ollaan. Kirjoitussarjan seuraavassa osassa piirretäänkin koordinaatit selkeämpään muotoon: täplänä kartalle.