For those looking to roll your own, the Ruby implementation of a TIGER geocoder released by GeoIQ a while back is a pretty solid starting point: https://github.com/geocommons/geocoder/
We ended up using that as a base and then making some customizations for our US-based geocoding solution. As these guys are figuring out, there's no great int'l option. Google is bad from a licensing perspective (but their tech is fantastic). MapQuest is great but can get really expensive. We've had decent luck with TomTom I think, but if I remember correctly there are a lot of caveats.
Interesting projects! I have tried to use the Mapquest geocoder API but for anything outside the US it's worse than useless. Will definitely check those out. It's great that they're based on Elastic Search since obviously geocoding is about full text search more than it is about "geo".
I'm an engineer on Mapbox's search (geocoding) team, and our geocoding engine is actually open source: https://github.com/mapbox/carmen
Our data isn't, but as other commenters here have said, it's not currently possible to build a good geocoder with the open data available. We're constantly working to support open data efforts, but it's not there yet.
We're currently using Google's Geocoder and Yahoo's Placefinder, which work okay, but they both have numerous flaws and various TOS policies we're ignoring for the moment.
Hi,
thanks for your comment and the link to your Geocoder. I think it's exactly the use case that I faced several times in the past.
I just saw that the Geocoder API is free with certain limitations. If I find some free time, I would like to create an enricher for it. Maybe it can help your clients (and other people of course) to save some time :)
I just started playing around with Geocoder on a side project. I'm still a little confused as to exactly how you are trying to implement this, but if you are working in ruby, it may help you get started.
If anyone comes across this looking for an alternative, we can help at Geocode Earth (https://geocode.earth).
We're a small independent company that has been working on geocoding since 2013, first as part of Mapzen(https://mapzen.com), and then with our own self-funded business after Mapzen shut down at the start of 2018.
Our core software, the Pelias Geocoder (https://pelias.io) is open source, and ironically we understand it to be the primary geocoder in use by Positionstack.
We're biased of course, but we think that as the primary authors of the open source project, and with a high-volume service that has had _zero_ major outagee, we're a great option for anyone who needs forward or reverse geocoding, addresss parsing, place or address autocomplete, etc.
A friend of mine runs opencage, which is a geocoder based on open streetmaps and a few other data sets. They got a lot more business when Google raised their prices a while back. Anyway, go give them some love if you need a geocoder because they are an awesome small company with a great service. Their freemium layer is also pretty generous.
Nominatim is the defactor open streetmaps geocoder but its weakness is that it relies on only that; so it is only as good as OSM is.
Geocoding is a surprisingly hard problem to solve with and without open data. Picking apart text strings into unambiguous addresses is just super hard with all the conventions for this around the world. One area open streetmaps is still inconsistent is house numbers and postal codes. Getting solid open data for that is just hard in some places.
reply