【问题标题】:Google Geocode null reference exception谷歌地理编码空引用异常
【发布时间】:2016-05-17 11:11:04
【问题描述】:

我制作了一个程序,它从伦敦房产门户网站上的几个房产中获取经度和纬度。

接下来我要做的是将这些 long+lat 发送到地理编码并返回完整格式的地址。下面的代码适用于我的 geocodeURL 列表中的大多数 URL,但偶尔它会返回空引用异常。

当我在浏览器中检查失败并手动返回异常的 URL 时,它工作正常。

如果是这样,我做错了什么?

for (int i = 0; i < longitude.Count; i++)
        {
            Console.WriteLine(longitude[i]);
            Console.WriteLine(latitude[i]);
            //Console.WriteLine("http://maps.google.com/maps/api/geocode/xml?latlng=" + latitude[i] + "," + longitude[i] + "&sensor=false");
            geocodeURL.Add("https://maps.googleapis.com/maps/api/geocode/xml?latlng=" + latitude[i] + "," + longitude[i] + "&key=0000");
        }

        foreach (string i in geocodeURL)
        {

            try
            {
                var requestUri = string.Format(i);

                var request = WebRequest.Create(requestUri);
                var response = request.GetResponse();
                var xdoc = XDocument.Load(response.GetResponseStream());

                var result = xdoc.Element("GeocodeResponse").Element("result");
                var fullAddy = result.Element("formatted_address").Value;
                address.Add(fullAddy);
                Console.WriteLine(fullAddy);
            }
            catch (Exception e)
            {
                Console.WriteLine(i);
                Console.WriteLine(e);
            }       
        }

XML 响应如下所示:

<GeocodeResponse>
<status>OK</status>
 <result>
  <type>street_address</type>
  <formatted_address>4 Sydenham Ave, London SE26 6UH, UK</formatted_address>

一个这样的异常示例,您可以看到 URL 似乎很好,但无论如何它都会引发异常......(我已经涂黑了键 fyi)

【问题讨论】:

  • 你知道它在什么条件下抛出异常吗?失败时ilatitude[i]longitude[i]的值是多少?
  • 我刚刚编辑了一个截图。 i 的值是你可以看到的 URL(我已经把键涂黑了)。
  • 所以在上述异常中,纬度的值为51.442276,经度为-0.065837
  • 您发送了多少请求? Google 对您在一定时间内可以发送的结果数量有限制。根据您发送的请求数量,您可能会遇到此限制,并且错误是谷歌告诉您要么掏出一些现金或 gtfo 的方式。如果你在每几个请求之间加上一个Thread.Sleep(2000) 会发生什么?
  • 托马斯:var fullAddy = result.Element("formatted_address").Value; User1666620:这是可能的。我发送了大约 300-400,所以肯定可以。让我试试。

标签: c# xml google-geocoding-api


【解决方案1】:

Google 对您在一定时间内可以发送的结果数量有限制。由于您一次发送数百个请求,因此您可能会遇到此限制,并且错误是谷歌告诉您要么掏出一些现金或 gtfo 的方式。

如果您不想付款,可以每隔几个请求设置一个Thread.Sleep(2000)(或其他一些等待期)以绕过限制。

【讨论】:

  • 我也使用了 http 而不是 https。您的睡眠解决方案成功了。
猜你喜欢
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多