How to convert an address to a latitude/longitude?

GeocodingLatitude LongitudeStreet Address

Geocoding Problem Overview


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.

Geocoding Solutions


Solution 1 - Geocoding

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)

Solution 2 - Geocoding

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.

Solution 3 - Geocoding

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

Solution 4 - Geocoding

Solution 5 - 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

Solution 6 - Geocoding

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!

Solution 7 - Geocoding

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.

Solution 8 - Geocoding

You want a geocoding application. These are available either online or as an application backend.

Solution 9 - Geocoding

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.

Solution 10 - Geocoding

Virtual Earth does it. There is also a web service at geocoder.us

Solution 11 - Geocoding

You could also try the OpenStreetMap NameFinder (or the current Nominatim), which contains open source, wiki-like street data for (potentially) the entire world.

Solution 12 - Geocoding

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

Solution 13 - Geocoding

Solution 14 - Geocoding

You can use Microsoft's MapPoint Web Services.

I created a blog entry on how to convert an address to a GeoCode (lat/long).

Solution 15 - Geocoding

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.

Solution 16 - Geocoding

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

Solution 17 - Geocoding

The USC WebGIS Geocoder is free and offers several API's, or you can upload a database for online batch processing.

Solution 18 - Geocoding

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionswilc0xView Question on Stackoverflow
Solution 1 - GeocodingmopokeView Answer on Stackoverflow
Solution 2 - GeocodingCMPalmerView Answer on Stackoverflow
Solution 3 - GeocodingDavidView Answer on Stackoverflow
Solution 4 - GeocodingBen DehghanView Answer on Stackoverflow
Solution 5 - GeocodingMichaelView Answer on Stackoverflow
Solution 6 - GeocodingwillasaywhatView Answer on Stackoverflow
Solution 7 - GeocodingMilanNzView Answer on Stackoverflow
Solution 8 - GeocodingChristopher CurrieView Answer on Stackoverflow
Solution 9 - Geocodingian93View Answer on Stackoverflow
Solution 10 - GeocodingCharles GrahamView Answer on Stackoverflow
Solution 11 - GeocodingpeSHIrView Answer on Stackoverflow
Solution 12 - GeocodingBlazenView Answer on Stackoverflow
Solution 13 - GeocodingCristian CiupituView Answer on Stackoverflow
Solution 14 - GeocodingStephen CurialView Answer on Stackoverflow
Solution 15 - GeocodingficuscrView Answer on Stackoverflow
Solution 16 - GeocodingToni Tegar SahidiView Answer on Stackoverflow
Solution 17 - GeocodingdwgoldView Answer on Stackoverflow
Solution 18 - GeocodingAshish AnandView Answer on Stackoverflow