13 October 2011 Geo, Google, Google Maps, HowTo Robert Muehsig

Um die genauen Geo-Koordinaten einer Adresse rauszubekommen gibt es dutzende Dienste. Einige Wege führen über Javascript und dem Google Maps “Plugin”, andere können auch über eine Schnittstelle angesprochen werden. Die “cleverste” (und kostenlose) Variante ist über die Google Maps Geocoding API.

Request / Response

Der Aufbau des Requests ist ziemlich einfach – einfach via Http GET:

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true

Die Adresse sollte Url-Encoded sein.

Bei diesem Aufruf kommt ein JSON zurück. Es gibt auch die Variante mit XML. Ich hab mich aber in meinem Fall für JSON entschieden und parse die ganze Sache über die Bibliothek JSON.NET, welche ein “LINQ-to-JSON” (oder sowas ähnliches) hat.

Wenn etwas gefunden wurde (und Google findet meistens etwas – egal wie seltsam die gesuchten Orte formatiert sind!), dann kommt sowas zurück:

image

Zum Code:

    	public class GeoCoordinates
    	{
        	public string Lat { get; set; }
        	public string Lng { get; set; }
        	public string Name { get; set; }	
		}

		public GeoCoordinates GetCoordinates(string location)
        {
            string url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + HttpUtility.UrlEncode(location) +
                         "&sensor=true";
            WebClient client = new WebClient();
            JObject result = JObject.Parse(client.DownloadString(url));
            JToken status;
            result.TryGetValue("status", out status);

            if(status.ToString() == "ZERO_RESULTS") 
                return new GeoCoordinates();

            var geoCood = result.SelectToken("results[0].geometry.location");

            string lat = geoCood.SelectToken("lat").ToString();
            string lng = geoCood.SelectToken("lng").ToString();
            return new GeoCoordinates() { Name = location,  Lat = lat, Lng = lng };
        }

 

Alles in allem recht einfach.

Was gibt es für Restriktionen?

Pro Tag können nur 2500 Adressen geocodiert werden. Desweiteren ist es laut den Terms of Service auch nur erlaubt, wenn man eine Google Map im UI einsetzt bzw. mit der API “kein” Schindluder treibt (massenhaft Daten abziehen ohne das es Sinn macht).Alles weitere bei Google.


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de