Google Geocode null reference exception

时间:2016-05-17 11:11:04

标签: c# xml google-geocoding-api

I have made a program that takes the longitude and latitude from several properties on a london property portal.

What I am to do next is send those long+lat to geocode and return the full formatted address. The below code works for a majority of URLs that I have in my geocodeURL list, but occasionally it returns a null reference exception.

When I check the URL that failed and returned the exception manually in a browser, it works fine.

If that is the case, what am I doing wrong?

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

The XMl response looks like this:

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

One such example of the exception, and you can see the URL seems to be fine, but it throws an exception regardless... (I have blacked out the key fyi)

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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