Google Spreadsheet geokoodaa
Eilinen posti sisälsi väitteen, että Google Spreadhseets osaa geokoodata. Väite oli osin vaistonvarainen. Googlaus näytti siltä, ettei kukaan voi tietää, koska aihetta ei ole edes käsitelty.
Googlella on geokooderista http-versio. Lähettämällä pyyntö muotoa:
http://maps.google.com/maps/geo?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA&output=xml&key=abcdefg
saapuu tyhjentävä XML-vastaus. Mutta parametrillä output=csv saapuukin minimaalinen vastaus muotoa:
200,6,42.730070,-73.690570 Status, accuracy, lat, lng tekstimuotoisena neljän solun csv-tiedostona, jess!
Google Spreadsheets osaa hakea csv-tietoa =ImportData() formulalla. Miksi emme siis laittaisi sitä hakemaan naapurisolun sisältämän osoitteen koordinaatteja.
Dokkareitten mukainen parametrien järjestys on hankala, mutta luullakseni systeemit eivät järjestyksestä piittaa. Muutamme siis query-parametrin 'q' viimeiseksi. Laitamme Spreadsheetsin ensimmäiseen soluun:
http://maps.google.com/maps/geo?output=csv&key=abcdefg&q=
ja seuraavan sarakkeen soluun sijoitamme kysyttävän osoitteen, vaikkapa Helsinki.
Kolmannen sarakkeen soluun ynnäämme edelliset yhteen ja haemme dataa ImportData() formulalla
=ImportData(CONCATENATE(A2,B2))
Tämän kun olet saanut kirjoitettua, niin seuraaviin soluihin ilmestyy kuin tyhjästä: '200' (http-vastauskoodi), '4' (Googlen tarkkuusparametri), 60.169879 (Helsingin latitudi) ja 24.938408(Helsingin longitudi). Pyysimmekö muuta?
Eikö Google Spreadsheetsissa muka ole geokoodausta? Vielä kun ajattelee mistä se osaa hakea lähtötiedon ja miten se osaa jakaa sitä - siis pliis apua!
Lähtötiedon voi hakea myös automaattigooglauksella.
=GoogleLookup(entity,attribute)
hakee vaikkapa mielisairaalasi (entity) osoitteen (attribute), jonka voit edelleen geokoodata ylläkerrotusti.
Lopputulosta voi käyttää monien erilaisten syötteiden kautta tai lukea ilman proxya JSON-muodossa ajax-apin avulla. Kyseisellä lopputuotteella voi vaikkapa ladata GClientGeocoderin välimuistiin ihmisten mielisairaalat nimiltä. Sivusi kävijät eivät löydä geokooderista hakusanalla 'HUS' yhtään osoitetta, paitsi jos olet huolehtinut koko ruokintaketjusta.
Tässä on kokeilutaulukko, jonka hakuosoitteiksi kirjoittelin muutamia kaupunkeja. (Huomaa, että Google on peloissaan lisännyt siihen vesileimamerkit tietolähteistä). Ja tässä siitä otettu csv-muotoinen syöte.
Herkästi tulee mieleen riski, että sivut lukevat toisiaan silmukassa.
Päivitys 1.11.:
jaguzzi kysyi: miten key=abcdefg voi toimia, eikö key-parametrillä ole mitään merkitystä?
Vastaus: tässä tapauksessa ei ole merkitystä koska haku lähetetään Googlen omalta palvelimelta (Google Docs). Kyn lähetät haun joltain muulta palvelimelta, on avain pantava gondikseen. Taidanpa selvyyden vuosi poistaa koko 'key'-parametrin.
Uusi päivitys 3.11:
Avainasiasta käytiin keskustelua johon Googlen edustaja otti kantaa. Avainta on syytä käyttää aina vaikka sivu toimisikin ilman. Avaimen käyttämättä jättäminen on sopimusrikko. Koskee myös API-sivuja jotka toimivat esim Blogger- tai GooglePages-palvelimilta ilman avainta. Näin välttää mahdollisen bannauksen, joka voi yllättää jos kävijöitä ilmaantuu paljon.