Mit der Google Maps API kann sehr einfach der Längen- und Breitengrad zu einer belieben Position abgefragt werden.
Dabei ist es egal, ob man nach „Deutschland“, „München“, „Berlin Alexanderplatz 1“ oder nach einer Postleitzahl sucht.
Für den Aufruf der Methode wird ein Google Maps API Key benötigt, dieser kann hier kostenlos beantragt werden: http://code.google.com/apis/maps/signup.html
Sollen mehrere Koordinaten abgefragt werden, ist darauf zu achten, dass eine Pause von ca. 100ms zwischen den Abfragen eingehalten wird, sonst erkennt Google einen DOS Angriff und sperrt die IP für einige Minuten.
Folgende Usings werden benötigt:
using System.Net;
using System.IO;
using System.Text;
/// <summary>
/// Gets the geo data.
/// </summary>
/// <param name="location">The location.</param>
/// <param name="googleKey">The google key.</param>
/// <returns></returns>
public static LatLong GetGeoData(string location, string googleKey)
{
LatLong myLatLong = new LatLong();
if (!string.IsNullOrEmpty(googleKey))
{
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://maps.google.com/maps/geo?q=" + location.Trim() + "&output=csv&key=" + googleKey);
HttpWebResponse webResponse;
try
{
webResponse = myReq.GetResponse() as HttpWebResponse;
}
catch
{
return myLatLong;
}
if (webResponse != null)
if (webResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII);
string responseString = streamReader.ReadToEnd();
if (!string.IsNullOrEmpty(responseString))
{
string[] arrayResponse = responseString.Split(',');
if (arrayResponse.Length == 4)
{
myLatLong.Latitude = arrayResponse[2];
myLatLong.Longitude = arrayResponse[3];
}
}
}
}
return myLatLong;
}
public class LatLong
{
private string _latitude;
private string _longitude;
public string Latitude
{
get { return _latitude; }
set { _latitude = value; }
}
public string Longitude
{
get { return _longitude; }
set { _longitude = value; }
}
}
4 Kommentare zum Snippet