Google 地理编码空引用异常
Google Geocode null reference exception
我制作了一个程序,它从伦敦 属性 门户网站上的几个属性中获取经度和纬度。
我接下来要做的是将那些 long+lat 发送到地理编码和 return 完整格式的地址。下面的代码适用于我的地理编码 URL 列表中的大多数 URL,但偶尔它 return 是空引用异常。
当我检查失败的 URL 并在浏览器中手动 returned 异常时,它工作正常。
如果是这样,我做错了什么?
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似乎没问题,但无论如何它都会抛出一个异常......(我已经把钥匙涂黑了)
Google 对在一定时间内可以发送的结果数量有限制。由于您一次发送数百个请求,您可能 运行 超出了此限制,错误是 google 告诉您支付一些现金或 gtfo 的方式。
如果您不想付款,您可以每隔几次请求设置一个 Thread.Sleep(2000)
(或其他等待时间)以绕过限额。
我制作了一个程序,它从伦敦 属性 门户网站上的几个属性中获取经度和纬度。
我接下来要做的是将那些 long+lat 发送到地理编码和 return 完整格式的地址。下面的代码适用于我的地理编码 URL 列表中的大多数 URL,但偶尔它 return 是空引用异常。
当我检查失败的 URL 并在浏览器中手动 returned 异常时,它工作正常。
如果是这样,我做错了什么?
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似乎没问题,但无论如何它都会抛出一个异常......(我已经把钥匙涂黑了)
Google 对在一定时间内可以发送的结果数量有限制。由于您一次发送数百个请求,您可能 运行 超出了此限制,错误是 google 告诉您支付一些现金或 gtfo 的方式。
如果您不想付款,您可以每隔几次请求设置一个 Thread.Sleep(2000)
(或其他等待时间)以绕过限额。