Edellinen kirjoitukseni oli pintaraapaisu iOS SDK:n CoreLocation-kirjastoon. Kävin läpi kuinka laitteen sijainti saatiin haettua CLLocationManager-luokan avulla leveys- ja pituuspiirin koordinaatit sisältävän CLLocation-olion muodossa. Kuitenkaan pelkät koordinaatit eivät sellaisenaan ole kovin kiinnostavaa tai hyödynnettävää tietoa ja sen takia koordinaatteihin liittyy usein kysymyksiä kuten “missä tämä paikka on?” ja “mitä täällä paikassa on?”. Vastauksen näihin tarjoaa geokoodaus.
Geokoodaus on osoitteen muuttamista koordinaateiksi, ja käänteinen geokoodaus koordinaattien muuttamista osoitteeksi. CoreLocation tarjoaa kummankin palvelun CLGeocoder-luokassa. Geokoodauksen käyttö ei edellytä paikkatietojen käytön hyväksyntää käyttäjältä. Luokka sisältää kolme metodia geokoodaukseen ja yhden metodin käänteiseen geokoodaukseen.
- geocodeAddressString:completionHandler: Ottaa parametrinä vapaamuotoisen osoitteen, esimerkiksi “Urho Kekkosen katu 5, 00100 Helsinki”
- geocodeAddressString:inRegion:completionHandler: Tekee samaa kuin edellinen, mutta toisena parametrina voi antaa aluetta kuvaavan CLRegion-olion jonka sisällä olevia kohteita suositaan tuloksia järjestellessä.
- geocodeAddressDictionary:completionHandler: Parametrina annetaan NSDictionary johon voi määritellä tarkemmin haettavan alueen esim. kaupungin tai maan perusteella. Esimerkiksi parametrinä annettu NSDictionary @{(id)kABPersonAddressCityKey : @”St. Petersburg”, (id)kABPersonAddressCountryKey : @”United States”} palauttaisi Floridassa olevan St. Petersburgin kaupungin. Dictionaryn kABPersonAddressCountryKey-avaimen arvon ollessa @”Russia“, palauttaa geokoodaaja itänaapurin entistä pääkaupunkia kuvaavan vastauksen.
- reverseGeocodeLocation:completionHandler: palauttaa listan koordinaatteja vastaavia CLPlacemark-olioita. Parametrina metodi ottaa CLLocation-olion. CLLocation-olion voi luoda ja alustaa CLLocation-oliolla.
Mitä täällä on?
- paikan koordinaatit (CLLocation-olion muodossa)
- Listan alueen maamerkeistä (esim. Golden Gate -silta San Franciscossa), listana NSString-olioita
- paikan osoitetiodot Address Book -yhteensopivina avain-arvopareina
- paikan nimi
- kaupunki ja kaupunginosa
- mahdollistet läänit ja maakunnat joiden osa paikka on
- maa, johon paikka kuuluu, sekä maakoodi
- vesistö tai valtameri jossa paikka sijaitsee
Vaihtoehto Applen geokoodauspalvelulle
Applen tarjoaman geokoodauspalvelun lisäksi Googlella on Geokoodaus-API. Googlen paikkatietokanta on epäilemättä paljon kattavampi ja tarkempi kuin Applen oma, mutta Applen valmiit CLGeocoding-luokat tarjoavat hyvin nopean tavan muuttaa koordinaatteja informaatioksi ja toisin päin. Yleensä Applen palvelu riittää katuosoitteiden ja kaupunkien nimien muuttamisen koordinaateiksi ja toisin päin. Googlen palvelussa kehittäjä joutuisi itse parsimaan JSON- tai XML-muotoisen vastauksen itse. Mielestäni Applen geokoodauspalvelun suurin puute on maamerkkien, kauppojen, ravintoloiden yms. kiinnostavien kohteiden täydellinen puute. Siitä huolimatta CLGeocoder on riittänyt useimpiin kehittämiini applikaatioihin.