使用 JSON、WCF 等。使用谷歌地理编码 - 真的有必要吗?

发布于 2024-09-24 22:16:41 字数 687 浏览 9 评论 0原文

我需要使用 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 等非常满意,但我看不出它们会带来什么......

I have a requirement to geocode data using Google's geocoding service. Google's geocoding services aren't as friendly to consumption via .NET as, say Bing's (no surprise there) so while I could go all out with ContractDataSerializers, WCF, JSON and a whole other pile of acronyms is there anything wrong with something like the below if all I need is, say, latitude and longitude viz.

string url = String.Format("http://maps.google.com/maps/api/geocode/xml?address=blah®ion=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
}

Other than a lot of upfront development effort what precisely will the other approach buy? I am very comfortable with WCF, DataContracts, ServiceContracts etc. but I can't see what they'll bring to the table here...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盛夏已如深秋| 2024-10-01 22:16:41

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

它具有用于进行地理编码的类与 Google 合作:http://googlemap.codeplex.com/wikipage?title= Google%20Geocoder&referringTitle=文档

Use the GoogleMap Control project on codeplex : http://googlemap.codeplex.com/

It has class for doing geocoding with Google : http://googlemap.codeplex.com/wikipage?title=Google%20Geocoder&referringTitle=Documentation .

青衫负雪 2024-10-01 22:16:41

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

I'd use XDocument with WebRequest. Following example might help.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文