Используя JSON, WCF и соавт.с геокодированием Google - действительно ли это необходимо? - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть требование геокодировать данные, используя сервис геокодирования Google.Службы геокодирования Google не так дружественны к потреблению через .NET, как, скажем, Bing (что неудивительно), поэтому, хотя я мог бы приложить все усилия с ContractDataSerializers, WCF, JSON и целой кучей сокращений, есть что-то не так с чем-токак показано ниже, если все, что мне нужно, это, скажем, широта и долгота, а именно:

string url = String.Format("http://maps.google.com/maps/api/geocode/xml?address=blah&region=ie&sensor=false", HttpUtility.UrlEncode(address));

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(url);
XmlNodeList xmlNodeList = xmlDocument.SelectNodes("/GeocodeResponse/result");

if (xmlNodeList != null)
{
   // Do something here with the information
}

Кроме больших предварительных усилий по разработке, что именно купит другой подход?Мне очень комфортно с WCF, DataContracts, ServiceContracts и т. Д., Но я не вижу, что они приведут здесь ...

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Я бы использовал XDocument с WebRequest.Следующий пример может помочь.

public static GeocoderLocation Locate(string query)
{
    WebRequest request = WebRequest.Create("http://maps.google.com/maps?output=kml&q="
        + HttpUtility.UrlEncode(query));

    using (WebResponse response = request.GetResponse())
    {
        using (Stream stream = response.GetResponseStream())
        {
            XDocument document = XDocument.Load(new StreamReader(stream));

            XNamespace ns = "http://earth.google.com/kml/2.0";

            XElement longitudeElement = document.Descendants(ns + "longitude").FirstOrDefault();
            XElement latitudeElement = document.Descendants(ns + "latitude").FirstOrDefault();

            if (longitudeElement != null && latitudeElement != null)
            {
                return new GeocoderLocation
                {
                    Longitude = Double.Parse(longitudeElement.Value, CultureInfo.InvariantCulture),
                    Latitude = Double.Parse(latitudeElement.Value, CultureInfo.InvariantCulture)
                };
            }
        }
    }

    return null;
}
1 голос
/ 24 сентября 2010

Использование проекта GoogleMap Control на codeplex: http://googlemap.codeplex.com/

У него есть класс для выполнения геокодирования с Google: http://googlemap.codeplex.com/wikipage?title=Google%20Geocoder&referringTitle=Documentation.

...