Geo-Koordinaten einer Adresse herausfinden–Geocoding mit Google Maps
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:
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.







Ilias
3. November 2011
Hallo,
gibt es noch weitere (kostenlose) Web Services, denen man eine Adresse übergibt und die die Koordinaten zurückliefern? Wie oben beschrieben, kann googles Dienst nur dann verwendet werden, wenn eine google map im UI verwendet wird, was in meinerm Fall aber nicht zutrifft…
Danke im Voraus
Robert Mühsig
4. November 2011
Evtl. bietet Microsoft mit Bing Maps auch einen Webservice an, welcher von den Lizenzbestimmungen her besser für dich geeignet ist. Als Idee würde mir noch das OpenStreetmap Projekt einfallen.
Ansonsten muss man vermutlich auf kostenpflichtige Angebote zurückgreifen (das hab ich z.B. gerade noch gefunden http://www.geocode.com/)
Robert Mühsig
14. November 2011
Ich hab gerade noch etwas zum Thema Geocoding gefunden: Nokia Maps. Unterstützt z.B. auch Reverse Geocode. Wie es da mit den Terms of use aussieht, kann ich aber auch nicht sagen:
http://api.maps.nokia.com/places/HeadlessApiExample.html