How to reverse geocode without Google?
Reverse GeocodingReverse Geocoding Problem Overview
Are there any web services (paid or free) out there besides the Google Maps API which allow you to reverse geocode?
My particular application will have access to a latitude and longitude and I need to be able to get the US Zip Code or State.
The reason I can't use Google is that the Terms of Service seems to indicate that if you use Google Maps API, you need to use the data to display a Google map.
I am using C# .Net framework in case that's relevant.
Reverse Geocoding Solutions
Solution 1 - Reverse Geocoding
I use http://nominatim.openstreetmap.org for reverse lookups, it's very easy to use:
Solution 2 - Reverse Geocoding
Geonames can give you either a placename:
> http://ws.geonames.org/findNearbyPlaceName?lat=40.65&lng=-73.78
or a zip code:
> http://ws.geonames.org/findNearbyPostalCodes?lat=40.65&lng=-73.78
It's free as long as you credit them and you need fewer than 15000 lookups per day. You can http://www.geonames.org/commercial-webservices.html">pay</a> if you need more.
Solution 3 - Reverse Geocoding
I am not a fan of MS. But check this out: http://msdn.microsoft.com/en-us/library/ff859477.aspx
RESTful Location Service API does not seem to post any restriction.
You can user Find Location By Point API: http://msdn.microsoft.com/en-us/library/ff701710.aspx
I tried out the sample for geoNames, the result is not good enough for me as I need county information, and the response time is slow.
Solution 4 - Reverse Geocoding
openstreetmap:
$.getJSON('https://nominatim.openstreetmap.org/reverse', {
lat: position.coords.latitude,
lon: position.coords.longitude,
format: 'json',
}, function (result) {
console.log(result);
});
geonames:
$.getJSON('https://secure.geonames.org/countryCode', {
lat: position.coords.latitude,
lng: position.coords.longitude,
type: 'JSON',
username: 'demo'
}, function (result) {
console.log(result);
});
Solution 5 - Reverse Geocoding
ArcGIS provides a free (and paid) API:
https://developers.arcgis.com/rest/geocode/api-reference/geocoding-reverse-geocode.htm
It provides an address for a given location (lat/lon). It doesn't even require an API key, but they suggest you get a free one to avoid rate limits.
Here is an example API call, with a JSON response:
Solution 6 - Reverse Geocoding
Nominatim Search Service from MapQuest Open API is free and has no request limit (soft limit of 1/sec).
> http://open.mapquestapi.com/nominatim/v1/reverse.php?format=json&lat=44.0776182&lon=-92.5296981
TOS can be found here
Solution 7 - Reverse Geocoding
Take a look at Geocoda - free for up to 1K forward or reverse geocoding calls per month, reasonably priced for more.
Update Feb. 2019 - Geocoda is now closed.