Hacker News new | comments | show | ask | jobs | submit login

Aw I was REALLY hoping to see geocoding + reverse geocoding.

To clarify why, the landscape for that is fairly grim right now. GeoNames (http://www.geonames.org) seems to be the best that i've evaluated thus far. It'll cost you at scale (not much), but it's international and can find nearby neighborhoods/cities. Google requires you to display their information on one of their maps if you use them to geocode or reverse geocode.

Question for iOS devs out there: how are you finding nearby cities in your app from a lat/lng point? (is even asking this against the ios rules?) Right now I am using geonames and the results are pretty decent. Works for now!

Give OpenStreetMap a try. It is free and open. Just they way these things ought to be. You can set up your own geocoding server with Nominatim: http://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocodi...

There is a VM to play around as well: http://www.openstreetmap.org/user/AndrewBuck/diary/17698

Also there is Mapquest's API which uses this: http://open.mapquestapi.com/geocoding/

Note: I have setup a nominatim server. Unless you have 128gb of ram and some SSD's or 15k SAS drives, be prepared to wait over 1 month. The indexes are intense and they take, literally, over a month to create if you end up swapping. To avoid swapping you need at least 128gb of ram....

That is way to pessimistic and fear mongering in a way.

There are some numbers available at http://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks (eg getting it into EC2 in a day for ~30USD). Even just a week would be a pessimistic estimate.

I guess if all you want is geocoding, you could exclude a lot of data before importing it. Eg landuses without names, lots of single nodes that have nothing to do with addresses, etc.

Have you set it up? I have...and I am giving you the amount of time it took to do a world import on data from January. This was on a quad core xeon 5345 with 32gb of ram and a dedicated SSD for swap, with database living on a RAID10 of 8 7200 rpm drives. In other words, the box is decent.

I am not trying to fear monger, I am just trying to say "hey, BTW unless you have a big hardware budget, you might want to just pay a third party".

I have not but looking at the numbers I linked there seems to have been something wrong with your importing.

TomTom have a geocoding API [disclosure: I work for them]


Please get them to have a web based signup to at least try it. "Please contact Global Sales Operations for access" is too much friction.

Or at least to reply. I have called them several times and I can never get a hold of somebody with pricing information.

Does anyone remember Fire Eagle from Yahoo?

Over 5 years old, API is still available: http://fireeagle.yahoo.net/developer/explorer/0.1/lookup

Blast from the past! I worked on this project, mainly on the associated Facebook app, "Friends on Fire". The original crew has scattered around the place - several work at Twitter now, one is running a dev shop in Uruguay, one is freelancing in SF, a couple are at various startups down the peninsula.

Easter egg: All the little pixel characters on the homepage are members of the dev team. I'm the one on the left in blue jeans and a dotted shirt :)

Check out Yahoo's PlaceFinder API. You get 50,000 requests per day for free. This has worked well for me in the past. http://developer.yahoo.com/geo/placefinder/

I strongly recommend Gisgraphy - http://www.gisgraphy.com/ [not affiliated, just a happy user].

They offer both SaaS, as well as a simple way to deploy the whole thing and run a local (reverse-) geocoding server. It does take a few days to build the GeoNames + OpenStreetMap index though. I run it locally for mapping coordinates to cities and it runs quite decently, a 2-core 2GB Linux VM running PostgreSQL gets me about 80-100 queries/s. It has a nice JSON API so it shouldn't be too hard using it from iOS.

That strikes me as a fairly low number of requests per second for powerful dedicated hardware. Am I way off here? Is the problem much harder than I think it is?

iOS's built in MapKit provides a reverse geocoding lookup API. It used to abstract away the Google geocoding API, but I'm not sure if iOS6 still relies on Google for that, I haven't looked into it.

The basic gist of it: Init a CLLocation object with a lat/long (probably pulled from the device GPS or a map dropped pin) and then call CLGeocoder's reverseGeocodeLocationInitialize and it'll return a CLPlacemark, which contains the approximate address.

To just find nearby cities from a lat/long though, you probably don't need to reverse lookup the address, it's probably easier to use something like MaxMind's free database which would give you the lat/long of cities, host it either locally on the device (a subset, obv) or on your server and then just use math to put some coordinate min/max bounds on your query to find city names nearby.

It hasn't relied on Google since iOS 5, when CLGeocoder was introduced. This is one reason why the new geocoding classes (versus the now deprecated MapKit ones, which used Google) are somewhat less accurate and absent entirely from certain countries.

I worked on this last week and I found GeoNames' results to be quite poor.

The best replacement I found when going over Google's limits was Yahoo's PlaceFinder.

I integrated Google, GeoNames and Yahoo in a npm module: https://github.com/sylvinus/geocoder

Geonames data + geohashing.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact