Wie in einem vorherigen Artikel von Jan Welker beschrieben ist es recht einfach mit der Google Maps API Längen- und Breitengrad zu einer belieben Position bzw. Adresse abzufragen.
Siehe Artikel: http://dotnet-snippets.de/dns/geografische-koordinaten-mit-der-google-maps-api-abfragen-SID824.aspx
Dies ist die überarbeitete Fassung mit der Google Maps API V3, diese gibt entweder ein XML- oder ein JSON-Objekt zurück. In diesem Beispiel wird aus dem von Google Maps zurückgelieferten XML-Objekt direkt ein .NET-Objekt mit geografischer Längen- und Breitenangabe erstellt und zurückgegeben.
Die Google Maps API V3 benötigt übrigens keinen Key mehr. Abfragen sind - ohne Google Maps Premier-Account - auf 2500 Geolokalisierungsanforderungen pro Tag begrenzt.
using System;
using System.Net;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Geo
{
public class GeoData
{
public decimal Latitude;
public decimal Longitude;
public GeoData()
{
}
/// <summary>
/// Creates a GeoData object and retrieves the GeoData provided by an address from google maps api v3
/// </summary>
/// <param name="location">complete adress as would be typed in at google maps</param>
/// <returns>GeoData object with latitude and longitude</returns>
public static GeoData CreateGeoData(string location)
{
GeoData geodata = new GeoData();
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://maps.googleapis.com/maps/api/geocode/xml?address=" + location.Trim() + "&sensor=false");
HttpWebResponse webResponse;
try
{
webResponse = myReq.GetResponse() as HttpWebResponse;
}
catch
{
return null;
}
if (webResponse != null)
{
if (webResponse.StatusCode == HttpStatusCode.OK)
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(webResponse.GetResponseStream());
if (doc != null)
{
System.Xml.XmlNode geometry = doc.SelectSingleNode("GeocodeResponse/result/geometry/location");
if (geometry != null)
{
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
geodata.Latitude = Convert.ToDecimal(geometry.SelectSingleNode("lat").InnerText, ci);
geodata.Longitude = Convert.ToDecimal(geometry.SelectSingleNode("lng").InnerText, ci);
}
}
}
}
return geodata;
}
}
}
2 Kommentare zum Snippet