Offline reverse geocoding library and scripts for the iPhone.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Reverse Geocoding

This project a Objective-C class (aim to be used on the iPhone) to include in your application a reverse geocoding system. Included in the project there is also a Thor script for downloading the cities database and transforming it into a suitable format for the iPhone.

What's a “reverse geocoding” system?

As Wikipedia says

Geocoding is the process of finding associated geographic coordinates … from other geographic data, such as street addresses, or zip codes. …

Reverse Geocoding is the opposite: finding an associated textual location such a street address, from geographic coordinates.

How do I use it

The project includes a script for Thor that tries to make the use of the project classes and the needed resources as easy as I can.

This project tries to leverage the tools include in Mac OS X 10.5, but there are some steps you have to do before using this script. So open your Terminal and type the following (except the dollar sign):

    $ gem install thor sqlite3-ruby fastercsv

After Thor installation you have to install this project Thor script into your system:

    $ thor install

When asked, you should say “y” to the question “Do you wish to continue?” and provide “geocoder” as name for the script in your system.

Once installed you can use Thor anywhere in your system to access the geocoder tasks. You can get a list of the task typing the following:

    $ thor list geocoder

And you can update the Thor script easily by:

    $ thor update geocoder

The easiest way to use the reverse geocoding system is to use the defaults, download all (code and databases), and create the SQLite database and the auxiliary files.

    $ thor geocoder:download all
    $ thor geocoder:database

Then in your application include the following files:

  • RGReverseGeocoder.h
  • RGReverseGeocoder.m
  • RGConfig.h
  • geodata.sqlite.gz
  • geodata.sqlite.plist

And also add libsqlite3.dylib, libz.dylib and CoreLocation.framework to your application.

Then at the start of your application call to:

    [RGReverseGeocoder setupDatabase];

And when you need to get a place from a location:

    [[RGReverseGeocoder sharedGeocoder] placeForLocation:myLocation];

If you need more help look at help from the Thor script, the documentation of the source code and the example project included in this Git repository.


Author: Daniel Rodríguez Troitiño (drodrigueztroitino thAT yahoo thOT es)

This project could not have been done without the free data provided by GeoNames GeoNames data is licensed under a Creative Commons Attribution 3.0 License The data is provided "as is" without warranty or any representation of accuracy, timeliness or completeness.

There is a small “inspiration” on some parts of SQLite Persistent Objects for Cocoa and Cocoa Touch

There is also a method adapted from Figure 14-10 of Hacker's Delight by Henry S. Warren