OpenStreetMap reverse geocoding zip codes? - web-services

I'm working on a blackberry application and would like to use the OpenStreetMap reverse geo-coding to get an address and/or a street corner.
I found Nominatim but it doesn't seem to do zip codes in the US (it has UK postal codes though), is there a OpenStreetMap API to get zipcodes, or some other free/open licensed reverse geocoding or address to zipcode data/API
note: this is for a final school project(but as this is a API/data source question I feel its fair to ask)
note2: another person has already done a google maps version, I'm looking for something w/ a Creative Commons type license, please don't mention google maps
-be careful, I found at least one API that claims to be open but seems to be based around both OSM , google, and other data (ie, it didn't have the rights to give away to its data).

I use Geonames.org. It offers different webservices around geocoding.
The Postcode WS will help you:
Postcode for Washington, USA:
Via HTML page
Via Webservice (XML response)
There's a commercial offer but I don't know if the service is totally free. There's a limit of 3000 requests per day and ip.

You can reverse-geocode US ZIP codes with geocoder.us. Their geocoder is open source (GPLv2 or Perl Artistic License) and they encourage writing code using their web services API for non-commercial purposes. This is in fact the service OpenStreetMap.org is using for US ZIP codes.
Also have a look at this overview of geocoders.

I found an opensource geocoder and have started to work on the autotooling.
on extendthereach dot com slash products OpenSourceGeocoder
Here is my github, but it is not ready yet:
http://github.com/h4ck3rm1k3/AutoToolsGeocoder
In theory we could use osm data with this, but I will have to look into it more.

Related

Is there a Software package or API available for street address completion?

Does anyone know of a service (free or paid) or software that I can host for street address completion? I'm interested in providing a list of possible completions for an address string, not geocoding an address.
For example, if a user types "120 An", the service might provide 10 possible completions for that address string (i.e. "120 Anne Way NYC NY, 120 Anteater St. Seattle WA... etc.")
Ideally I would be able to constrain the list of returned addresses to a particular region.
Openstreetmaps had "Name finder" a while ago but it doesn't look like it exists anymore.
I should mention I'm open to hosting the service myself. I believe I can extract the list of region specific addresses from Openstreetmap data, I need an API to put them in though...
There is a Google Places autocomplete API .
SmartyStreets just finished a new autocomplete feature, and it's totally free with an API subscription (which is also free, to a point). I work at SmartyStreets and helped to develop it.
You can put it on your website with the jQuery plugin. It works very well for US addresses. For international, Google might be your best bet, where license restrictions don't get in the way.

How can I use Google's Geocoding to normalize addresses without violating the terms of service?

I'm working on a API that will accept addresses in searches. We would like to use Google's geocoding service to normalize the addresses before submitting the search criteria to our search engine.
This caught my attention:
http://code.google.com/apis/maps/documentation/geocoding/index.html#Limits
"Note: the Geocoding API may only be used in conjunction with a Google map; geocoding results without displaying them on a map is prohibited. For complete details on allowed usage, consult the Maps API Terms of Service License Restrictions."
Does this mean we can't use the Geocoding service for this purpose? Having used libraries that access Google's geocoding service before, I know it's technically possible to do this but it sounds like a violation of the terms of service.
Are there other options for what we're trying to do?
Edit:
It turns out our company does have a license with Google to use the addresses that come back, and they will eventually be displayed on a Google Map to the end user, satisfying the terms of our agreement.
Short answer: You can't. The terms of service seem pretty clear-cut that geocoding using their API is not in line with their terms, unless you display them on a Google Map.
If you need this for other purposes, you should consider licensing a Geocoding library and dataset(s) for your regions of interest. There are quite a few companies which sell these for commercial purposes.
Update on this really old post:
#Cerin pointed out something important on this answer.
USPS Web Tools API are only free if you're using them to ship
via USPS
So be legal.
You are correct: you can't use the Google Geocoder for address cleaning.
You can use this wrapper to access USPS's Web Tools.
Another inexpensive solution is Semaphore, but you'll have to write your own wrapper class to call the DLLs.
The USPS has a free service to validate addresses. It's in a fairly easy-to-use API that you can curl information to and receive a valid response back. The only rub is that they're a little slow when it comes to registering, and they require you to run several tests before they'll open it up. Regardless, once you've jumped through the hoops, it does a great job. It's been keeping addresses in my app clean for quite a while now without any hiccups.

Web service to get the GPS Coordinates

I'm developing an web application (jsp/strtus2) which requires the GPS coordinates of a place. What I want to know is, whether there are any free web services that I can get GPS coordinates of a place by passing address or zip code to the server.
Thanks in advance,
Nuwan
Yahoo's Geocoder is easy to use. Basically change a few query strings and it outputs an easy to parse xml file.
Google's had a few issues in our area with the coordinates being returned being incredibly inaccurate at times. Yahoo tends to actually land on the street in question, but probably wont hit the parcel itself.
That said, just note these services aren't going to be the most accurate.
You can use Bing Maps or Google Geolocation to do this. Bing has the pleasant ability to tie into native .NET namespaces.
http://code.google.com/apis/maps/documentation/geocoding/index.html
this is the link to the geocoding service by google

How to convert an address to a latitude/longitude?

How would I go about converting an address or city to a latitude/longitude? Are there commercial outfits I can "rent" this service from? This would be used in a commercial desktop application on a Windows PC with fulltime internet access.
Google has a geocoding API which seems to work pretty well for most of the locations that they have Google Maps data for.
http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html
They provide online geocoding (via JavaScript):
http://code.google.com/apis/maps/documentation/services.html#Geocoding
Or backend geocoding (via an HTTP request):
http://code.google.com/apis/maps/documentation/services.html#Geocoding_Direct
The data is usually the same used by Google Maps itself. (note that there are some exceptions to this, such as the UK or Israel, where the data is from a different source and of slightly reduced quality)
Nothing much new to add, but I have had a lot of real-world experience in GIS and geocoding from a previous job. Here is what I remember:
If it is a "every once in a while" need in your application, I would definitely recommend the Google or Yahoo Geocoding APIs, but be careful to read their licensing terms.
I know that the Google Maps API in general is easy to license for even commercial web pages, but can't be used in a pay-to-access situation. In other words you can use it to advertise or provide a service that drives ad revenue, but you can't charge people to acess your site or even put it behind a password system.
Despite these restrictions, they are both excellent choices because they frequently update their street databases. Most of the free backend tools and libraries use Census and TIGER road data that is updated infrequently, so you are less likely to successfully geocode addresses in rapidly growing areas or new subdivisions.
Most of the services also restrict the number of geocoding queries you can make per day, so it's OK to look up addresses of, say, new customers who get added to your database, but if you run a batch job that feeds thousands of addresses from your database into the geocoder, you're going to get shutoff.
I don't think this one has been mentioned yet, but ESRI has ArcWeb web services that include geocoding, although they aren't very cheap. Last time I used them it cost around 1.5cents per lookup, but you had to prepay a certain amount to get started. Again the major advantage is that the road data they use is kept up to date in a timely manner and you can use the data in commercial situations that Google doesn't allow. The ArcWeb service will also serve up high-resolution satellite and aerial photos a la Google Maps, again priced per request.
If you want to roll your own or have access to much more accurate data, you can purchase subscriptions to GIS data from companies like TeleAtlas, but that ain't cheap. You can buy only a state or county worth of data if your needs are extremely local. There are several tiers of data - GIS features only, GIS plus detailed streets, all that plus geocode data, all of that plus traffic flow/direction/speed limits for routing. Of course, the price goes up as you go up the tiers.
Finally, the Wikipedia article on Geocoding has some good information on the algorithms and techniques. Even if you aren't doing it in your own code, it's useful to know what kind of errors and accuracy you can expect from various kinds of data sources.
Yahoo! Maps Web Services - Geocoding API accurately geocodes UK postcodes, unlike Google's API.
Unfortunately yahoo has deprecated this service, you could visit http://developer.yahoo.com/geo/placefinder/ for yahoo's service
Try this: http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false
more info here: http://code.google.com/apis/maps/documentation/geocoding/
When you convert an address or object to a lat/long it is called Geocoding.
There are a lot geocoding solutions around. The solution right for your project will depend on the acceptability of the licensing terms of each geocoding solution. Both Microsoft Virtual Earth and Google Maps offer solutions which are free to use under a very restrictive licenses...
https://developers.google.com/maps/documentation/javascript/tutorial
Having rolled my own solution for this before, I can whole heartedly recommend the Geo::Coder::US Perl module for this. Just download all the census data and use the included importer to create the Berkeley DB for your country and point the Perl script at it. Use the module's built in address parsing, and there you have it: An offline geocoding system!
Try with this code, i work like this with addresses:
It is link in which with GET method you will send request and get lat and lng. http://maps.google.com/maps/api/geocode/json?address=YOUR ADDRES&sensor=false
For exemple: http://maps.google.com/maps/api/geocode/json?address=W Main St, Bergenfield, NJ 07621&sensor=false
1. Create your GET method.
public static String GET(String url) throws Exception {//GET Method
String result = null;
InputStream inputStream = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
Log.v("ExecuteGET: ", httpGet.getRequestLine().toString());
HttpResponse httpResponse = httpclient.execute(httpGet);
inputStream = httpResponse.getEntity().getContent();
if (inputStream != null) {
result = convertInputStreamToString(inputStream);
Log.v("Result: ", "result\n" + result);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2. Create method for send request
#SuppressWarnings("deprecation")
public static String getLatLng(String accessToken) throws Exception{
String query=StaticString.gLobalGoogleUrl+"json?address="+URLEncoder.encode(accessToken)+"&sensor=false";
Log.v("GETGoogleGeocoder", query+"");
return GET(query);
}
gLobalGoogleUrl="http://maps.google.com/maps/api/geocode/"
3. Call method getLatLng
String result=getLatLng("W Main St, Bergenfield, NJ 07621");
4. Parse JSONObject
Now result is JSONObject with information about address and lan,lng.
Parse JSONObject (result) with gson().
After that use lat,lng.
If you have question about code , ask.
You want a geocoding application. These are available either online or as an application backend.
Online applications:
Google has a geocoding API
Backend applications:
GeoStan
Maptsraction (http://www.mapstraction.com) lets you choose between any number of geocoding services. This could be helpful if you need to do large quantities, as I know Google has a limit to how many you can do a day.
Virtual Earth does it. There is also a web service at geocoder.us
You could also try the OpenStreetMap NameFinder (or the current Nominatim), which contains open source, wiki-like street data for (potentially) the entire world.
you can use bing maps soap services, where you can reference reverse geocode service to find lat/long from address
here is the link
http://msdn.microsoft.com/en-us/library/cc980922.aspx
Yahoo! Maps Web Services - Geocoding API
You can use Microsoft's MapPoint Web Services.
I created a blog entry on how to convert an address to a GeoCode (lat/long).
Thought I would add one more to the list. Texas A&M has a pretty decently priced service here: http://geoservices.tamu.edu/Services/Geocode/
A good option if you have a pretty large set of addresses to geocode and don't want to pat 10k to Google or Microsoft. We still ended up using the returned data in a Google Map.
you are asking about Geocoder.
Google provide an API for this.
so does another provider for this.
you can see the demo of implementation in My Current Location .net
The USC WebGIS Geocoder is free and offers several API's, or you can upload a database for online batch processing.
If you need a one off solution, you can try: https://addresstolatlong.com/
I've used it for a long time and it has worked pretty well for me.

Where can I get databases of cities/places around the world?

In dopplr [http://www.dopplr.com] there is an option to fill the city of travel and the site will automatically find the city around the world. Is there any web service or database for such a city lookup?
http://www.geonames.org/ is useful - HTML query, download and web service.
Also http://developer.yahoo.com/geo/ - you'll need a Yahoo developer ID.
Google maps API includes a geocoding service and there are plenty of other options
You could download and process this list on wikipedia. If you trust it.
The best free database of world cities I have found is from MaxMind. See http://www.maxmind.com/app/geolitecity It also includes geocoding information and population. Uses ISO standard for country and regions.
There's the OpenStreetMap Name Finder.
I don't know if it's necessarily the most complete resource, but AFAIK OSM is free for any use, which may/may not be the case with other options.