2016-05-17 11 views
0

Я создал программу, которая принимает долготу и широту из нескольких свойств на лондонском портале свойств.Исключение для нулевой ссылки Google Geocode

То, что я должен сделать дальше, отправить эти длинные + латы в геокодирование и вернуть полный отформатированный адрес. Нижеприведенный код работает для большинства URL-адресов, которые у меня есть в моем списке geocodeURL, но иногда он возвращает исключение нулевой ссылки.

Когда я проверяю 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, кажется, хорошо, но он бросает исключение независимо ... (I закрасил ключ FYI)

enter image description here

+0

Знаете ли вы, по каким критериям он выдает исключение? Каково значение 'i',' latitude [i] 'и' longitude [i] ', когда он терпит неудачу? – user1666620

+0

Я только что отредактировал, чтобы включить скриншот. Значение i - это URL-адрес, который вы можете видеть (я зачеркнул ключ). –

+0

Итак, в приведенном выше исключении значение широты было 51.442276, а долгота -0.065837 –

ответ

1

Google есть ограничение на сколько результатов вы можете отправить в определенном промежутке времени. Поскольку вы отправляете сотни запросов одновременно, вы, вероятно, сталкиваетесь с этим лимитом, и ошибка - это способ Google сообщить вам, что вы либо кашляете наличные, либо gtfo.

Если вы не хотите платить, вы можете поставить Thread.Sleep(2000) (или какой-либо другой период ожидания) каждые несколько запросов, чтобы обойти предел.

+0

Вы были верны. Спасибо. –

+0

Я использовал http, а не https. Ваше решение сна выполнило трюк. –

 Смежные вопросы

  • Нет связанных вопросов^_^