2016-05-17 6 views
0

私は、ロンドンのプロパティポータルのいくつかのプロパティから経度と緯度を取得するプログラムを作成しました。Google Geocode null参照例外

私が次に行うことは、これらのlong + latをジオコードに送り、完全にフォーマットされたアドレスを返すことです。以下のコードは、geocodeURLリストにあるほとんどのURLで機能しますが、null参照例外が返されることがあります。

エラーが発生した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> 

例外の1つのそのような例、そしてあなたはURLは大丈夫のようですが、それは関係なく、例外をスロー見ることができます...(私は)FYIキーをブラックアウトしている

enter image description here

+0

あなたは例外をスローする基準を知っていますか?失敗したときの 'i'、' latitude [i] 'と' longitude [i] 'の値は何ですか? – user1666620

+0

スクリーンショットを追加するように編集しました。私の値はあなたが見ることができるURLです(私は鍵を黒くしました)。 –

+0

上記の例外を除いて、緯度の値は51.442276、経度-0.065837 –

答えて

1

Googleは一定の時間に送信することができますどのように多くの結果に制限があります。あなたは一度に何百ものリクエストを送信しているので、おそらくこの限界に遭遇しています。エラーはGoogleにあなたに現金またはgtfoを咳をするよう指示するものです。

お支払いを希望しない場合は、数回のリクエストごとにThread.Sleep(2000)(またはその他の待機期間)を設定して制限を回避することができます。

+0

あなたは正しいです。ありがとうございました。 –

+0

私はhttpsではなくhttpを使いました。あなたの睡眠の解決策は、トリックでした。 –