2012-09-28 35 views
0

我正在通過excel中的緯度和經度列表進行迭代。這很好,我想讓我的codeLatLng函數在循環中調用它時返回街道地址。獲取反向地理編碼的返回值

評論的代碼是我正在codeLatLng()內想要做的。我知道我每秒只能打10個電話,如何設置我的循環來做到這一點?

謝謝!

 function codeLatLng(input) { 
      var latlngStr = input.split(",", 2); 
      var lat = parseFloat(latlngStr[0]); 
      var lng = parseFloat(latlngStr[1]); 
      var latlng = new google.maps.LatLng(lat, lng); 
      geocoder.geocode({ 
       'latLng' : latlng 
      }, function(results, status) { 
       document.getElementById("test").innerHTML = results[0].formatted_address + "<br />"; 
       //return results[0].formatted_address; 
      }); 
     } 

     function initialize() { 
      geocoder = new google.maps.Geocoder();    
     } 

     function showmethemoney(){ 
      var lat, lng, latlng, loc; 
      var Excel = new ActiveXObject("Excel.Application"); 
      Excel.Visible = false; 
      Excel.Workbooks.Open($("#file").val()); 
      Excel.Active 
      //Excel.ActiveSheet.UsedRange.Rows.Count 
      $("#test").append("<b> " + Excel.ActiveSheet.UsedRange.Rows.Count + " rows in file</b><br/>"); 
      //10 for testing purposes. I will be going through the entire document 
      for (var i=1; i <= 10; i++) {     
       lat = Excel.ActiveSheet.Cells(i,17).Value; 
       lng = Excel.ActiveSheet.Cells(i,18).Value; 
       latlng = lat + "," + lng; 
       //loc = codeLatLng(latlng);   
       $("#test").append(i + ") " + latlng + " " + loc + "<br/>");          
      }; 
      Excel.Quit(); 
     } 

回答

1

您需要提供回調方法。您提供的方法將被調用有兩個參數:

內回調,您可以處理數據地址解析器返回你所需要的。

見地理編碼文件here

更詳細信息,地理編碼方法將一個AJAX調用谷歌的服務。這是異步的。在調用地理編碼方法時,您的函數的其餘部分將繼續執行。一旦服務響應,您的回調將被調用,結果和狀態將通過參數傳遞。如果你想存儲結果,你可以簡單地將它添加到任何容器,這些容器可供外部使用。

+0

您能否提供一個小代碼示例?我理解你在理論上說的是什麼,但對於js我還是一個新手,並且正在努力掌握回調。 – FunkyMonk91

1

提供一個回調codeLatLng,將成功調用。修改後的代碼
在代碼中添加循環我正在使用setTimeout循環在一堆10個項目。

function codeLatLng(input, i, cb) { 
       var latlngStr = input.split(",", 2); 
       var lat = parseFloat(latlngStr[0]); 
       var lng = parseFloat(latlngStr[1]); 
       var latlng = new google.maps.LatLng(lat, lng); 
       geocoder.geocode({ 
        'latLng' : latlng 
       }, function(results, status) { 
        document.getElementById("test").innerHTML = results[0].formatted_address + "<br />"; 
        cb(results[0].formatted_address, i, input); 
       }); 
      } 
    function showmethemoney(){ 
//your code 
      var i = 1; 
      function repeat10(i, max){ 
       for (; i <= max; i++) {     
        lat = Excel.ActiveSheet.Cells(i,17).Value; 
        lng = Excel.ActiveSheet.Cells(i,18).Value; 
        latlng = lat + "," + lng; 
        codeLatLng(latlng, i, function (loc, i, latlng){ 
          $("#test").append(i + ") " + latlng + " " + loc + "<br/>"); 
        });   

       } 
      setTimeout(function(){ 
        if(i >= maxexcelsize){ return }; 
        repeat10(i, i+10); 
       }, 100); 
      } 
      repeat10(i, i+10); 
      Excel.Quit(); 
     }