使用JSON,WCF等。使用Google地理编码 - 真的有必要吗?

时间:2010-09-24 11:14:03

标签: c# xml wcf geocode

我要求使用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 个答案:

答案 0 :(得分:1)

在codeplex上使用GoogleMap Control项目:http://googlemap.codeplex.com/

它有与Google进行地理编码的课程:http://googlemap.codeplex.com/wikipage?title=Google%20Geocoder&referringTitle=Documentation

答案 1 :(得分:1)

我将XDocument与WebRequest一起使用。关注example可能有所帮助。

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;
}