【发布时间】: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)
【问题讨论】:
-
你知道它在什么条件下抛出异常吗?失败时
i、latitude[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