perjantaina, lokakuuta 31, 2008

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.


Fuusaus ilman ohjelmointia

Tony Hirst selosti blogissaan metkan systeemin, jolla luetaan taulukko joltain webbisivulta ja esitetään se Google Mapsissa. Lopputulos on selkeästi mashup mutta sen tuottamiseen ei tarvittu riviäkään JavaScriptiä.

Google Spreadsheets pystyy nykyisin lukemaan taulukko- tai listamuotoista tietoa miltä tahansa nettisivulta =importHtml() formulalla. Se osaa siis raapia dataa toisten sivuilta, esimerkkitapauksessa Wikipediasta. Näin luotu taulukko julkaistaan CSV-muodossa.

Seuraavaksi mennään Yahoon Pipes-palveluun, joka on hieno syötteidenkäsittelijä graafisella käyttöliitynnällä.  Se osaa lukea CSV-syötettä. Se osaa myös geokoodata osoitteita. Lopputulos saadaan haluttaessa ulos KML-muodossa.

KML on syöte, joka kelpaa mieluusti maps.google.comille, joka esittää sen kartalla ja sivupalkissa kuvineen päivineen.

Kyseinen artikkeli on herättänyt runsaasti huomiota. Se demonstroi webin uusia mahdollisuuksia ja saa paatuneimmankin mielikuvituksen lentoon. Yli yhdeksänkymmenen kommentoijan joukossa vilahti myös Mano Googlen geo-ryhmästä.

Demo saattaa vauhdittaa geokoodauksen ja KML-muotoisen julkaisun ilmestymistä Spreadsheetsiin. Geokoodauksen sillä pystyy jo tekemäänkin mutta ei kovin näppärästi.

torstaina, lokakuuta 23, 2008

Käänteinen geokoodaus

Osoite koordinaateista (reverse geocoding) on ollut suosituin ominaisuustoive sen jälkeen kun varsinaisen geokoodauksen julkaisu sammutti yhden ruikutuksen.

Tänään se julkaistiin. Se on heti myös dokumentoitu. GClientGeocoder.getLocations() on ottanut parametrikseen tähän saakka osoitemerkkijonon. Nyt sille kelpaa vaihtoehtona GLatLng() objekti jolloin se heti ymmärtää, että kyseessä on käänteinen geokoodauspyyntö. Asia ratkaistaan siis jo client-puolella, nerokasta. Siksi se on niin häikäisevän nopea.

Google julkaisee uusia ominaisuuksia ja uusia apeja sellaisella vauhdilla, ettei kukaan ehdi edes kokeilla kaikkia, puhumattakaan perehtymisestä. Kuin ilotulitus, jossa seuraava raketti on jo laukaistu ylös kun edellinen vielä säteilee taivaalla. Lähdekoodia lukeneena "tiedän" että kohta tulee Google Trends api Maps apin modulina.

Tämänpäiväiseen ominaisuuteen ajattelin kuitenkin tutustua lähemmin ja palata aiheeseen.

Edellisiin posteihin. Kirjoitin GLayer()-julkistuksesta:

"Enää ei itse tarvitse rakentaa järjestelmiä, joilla kerätään esim kotikylän valokuvia. Riittää että ihmiset lataavat kuvansa Panoramioon."

Pari päivää myöhemmin kävi ilmi, että Turo Pennalasta oli jo ollut ajan tasalla. Ai mistä Pennalasta?


Lisäys:

Unohtui mainita että toimii myös Härmässä. Toimii kaikissa maissa, joissa toimii 'forward geocoding' (lienee uusi termi). Lista.

Maantiedon opetuspeli, jota olen vuosia suunnitellut on nyt kymmenen minuutin projekti.

keskiviikkona, lokakuuta 08, 2008

Sprite

'Sprite' on tuttu termi neljännesvuosisadan takaa. Kahdeksan bitin aikakaudella animaatioiden tekeminen vaati luovuutta. Erillinen liikuteltava grafiikkaolio, sprite, oli innovaatio, joka mahdollisti vikkelät hahmot olemattomalla prosessoriteholla. Sen ajan pelikoneiden grafiikkapiirit huolehtivat spriteistä rasittamatta cpu:ta.

Jatkokehitys toi mahdollisuuden näyttää vain osa spritestä. Luotiin matriisi hahmoista joiden vaihtaminen kävi kätevästi. Juuri tästä ominaisuudesta on nykyinen 'sprite'-termi peräisin. Se omaksuttiin css-piireissä joitakin vuosia sitten.

Huomasin suunnilleen vuosi sitten, että maps.google.com tuottaa punaiset kirjainmerkityt markkerit sprite-tekniikalla. Ei kuitenkaan sinisiä. Kysymyksessä lienee siis testaus.

Heinäkuussa apinkin koodiin ilmestyi markkerin ikonin ominaisuuksiin '.sprite'. Pari päivää sitten innostuin kokeilemaan ja lopulta löysin syntaksin, jolla homma pelaa.

Tervetullut ominaisuus. Ison ikonivalikoiman ylläpito helpottui ratkaisevasti. Kaikki ikonit tulevat samalla esiladattaua selaimen välimuistiin. Yksi isompi kuva latautuukin nopeammin kuin liuta pieniä.

torstaina, lokakuuta 02, 2008

Kaksi riviä koodia parantaa maailmaa

Suunnilleen näin otsikoitiin apin viimeisin uutuus. Tottahan tuo onkin. Koodirivit
map.addOverlay(new GLayer("com.panoramio.all"));
map.addOverlay(new GLayer("org.wikipedia"));
lisäävät mille tahansa api-karttasivulle geotägättyjä valokuvia Panoramiasta ja artikkeleita Wikipediasta.

Uudistus muuttaa maailmaa taas askeleen avoimempaan suuntaan. Tuoreessa muistissa on miten jopa Igglon valokuvia paheksuttiin vain hetki sitten.

Ominaisuus on toki ollut maps.google.comissa jo alkukesästä mutta räätälöidyissä api-sivuissa se on ollut nyt muutaman tunnin.

Testisivun tekemiseen ei mennyt montaa minuuttia mutta Wikipedia-artikkelit ilmestyivät vasta kun älysin Wikipedian maakohtaisuuden. Vasta attribuutti .fi
map.addOverlay(new GLayer("org.wikipedia.fi"));
toi suomalaisia Wiki-artikkeleita näkyville.

Wikipedian maakohtaisuudesta on taulukko. Maakoodi kannattaa speksata koska muutoin api yrittää päätellä selaimen kieliasestuksista.

Enää ei itse tarvitse rakentaa järjestelmiä, joilla kerätään esim kotikylän valokuvia. Riittää että ihmiset lataavat kuvansa Panoramioon. Nyt vielä pitää geotäggäyksestä huolehtia erikseen.

Ehkä ensi vuonna kaikki pokkarikamerat geotäggäävät kuvat yhtä huomaamatta kuin ne nyt huolehtivat kaikista muista amatöörivalokuuvajalle vieraista pakollisista toimenpiteistä. Ennustin samaa jo yli kaksi vuotta sitten mutta niin ei ole tapahtunutkaan kamerateollisuuden toimesta. 

Uusi kameravalmistaja nimeltä Nokia on ymmärtänyt asian ja toimittaa kameroita joissa on kyseinen toiminto. Heidän kameroissaan on mukana myös toinen joidenkin ihmisten usein tarvitsema laite, puhelin. Useat muutkin perinteiset kameravalmistajat kuten Apple ja Google ovat seuranneet esimerkkiä.