Feedback

C# - Geografische Koordinaten mit der Google Maps API abfragen

Veröffentlicht von am 4/14/2008
(7 Bewertungen)
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

Timo Boehme schrieb am 11/25/2008:
Hi. Arbeite gerade an einer GPS Software für unseren FlighTimer. Dabei habe ich GoogleEarth integriert und fahre den Flug in Echtzeit mittels NMEA stream ab. Das mit den 100ms ist interessant. Ich hatte 500ms zur Sicherheit eingefügt gehabt. Gut zu wissen, dass es nur 100ms sein müssen ;-)
Gruss

Timo

www.goldengel.ch
SoftIl schrieb am 12/12/2008:
Hi Jan,
wie kann ich die ermittelten Werte in "normale" Geodaten also so, wie man sie für Googleearth z.Bsp. benötigt umwandeln?
Beispiel:
Werte, die die Methode zurückliefert:
37.4219720, -122.0841430
Werte wie sie für Googleearth benötigt werden:
37°25'23.12"N 122° 5'6.44"W

Vielen Dank für die Hilfe
Carsten
Jan Welker schrieb am 12/13/2008:
Hallo,
habs gerade veröffentlicht: http://dotnet-snippets.de/dns/geodaten-in-sexagesimal-format-umrechnen-SID1046.aspx

Jan
andyhirt schrieb am 3/31/2009:
Hallo.
Für ein Schulprojekt wäre diese API für mich sehr nützlich (allerdings Java). Habt ihr zufällig eine Ahnung ob sich für die Koordinaten auch die Höhenangaben abrufen lassen? Hab nur kurz mal reingeschaut und nichts gefunden.

Gruss und Danke

Andy
 

Logge dich ein, um hier zu kommentieren!