2012-07-07 41 views
0

我有一個包含本地化(「街道,城市,郵編,省,國家」)的數組。 我想要一個字符串,每個本地化都有Lat和Lng值,就像這樣(「#lat.value | lng.value#lat2.value | lng2.value ..」等)。我用這個Google API Geocoder。但Geocoder有一次令人討厭的10〜11次定位。我怎樣才能獲得大約100個本地化100個值?我試過sleep()funcion,但這不起作用。這是我在js中的功能。如何從標記獲得更多的+10/11 LatLng值

   function sleep(time){ 
        time = time * 1000; 
        var start = (new Date()).getTime(); 
        while(true){ 
         alarm = (new Date()).getTime(); 
         if(alarm - start > time){ break; } 
        } 
       } 

(..) 
       var mystring = ""; 
       var address = <%=testing %> 
       var arrayaddress = address.split("%"); 

       for (var i = 0; i < arrayaddress.length-1; i++) { 
        sleep(0); 
        geocoder = new google.maps.Geocoder(); 
        geocoder.geocode({ 'address': arrayaddress[i]}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         map: map, 
         position: results[0].geometry.location 
         }); 
         var zmiennalat = marker.getPosition().lat(); 
         var zmiennalng = marker.getPosition().lng(); 
         mystring = mystring + "#" + zmiennalat + "|" + zmiennalng; 
        } 
        else 
        { 
         mystring = mystring + "#" + "er" + "|" + "er"; 
         //alert("Geocode was not successful for the following reason: " + status); 
        } 
        if (i == arrayaddress.length-1) { 
         var dsa = mystring; 
         document.getElementById("<%=hfWysokosc.ClientID%>").value = mystring; 
         document.getElementById("<%=hfSzerokosc.ClientID%>").value = dsa; 
         document.getElementById("<%=UpdateButton1.ClientID %>").click(); 
        } 

        }); 
       } // for 

然後,結果是例如:

兒|呃#34.42342 | 16.4323#23.32131 | 43.54545#等。

總是第一個本地化的錯誤與解碼(如果超過10個陣列的話)。爲什麼? 爲什麼不在最後的本地化?

恢復:如何在此循環中獲得超過10個經緯度值?

謝謝!

編輯

謝謝,那工作很好!

但還有另一個問題。字符串Mystring顯示得非常緩慢..如何修復它?當標記設置在地圖上時它會令人耳目一新 - 也許這不是問題,但對於100-150標記,我必須等待幾分鐘才能獲得Mystring值。是否有任何可能性顯示更快的Mystring值?

     var mystring = ""; 
        var address = <%=testing %> 
        alert(address); 
        var arrayaddress = address.split("%"); 

        (function nextStep(i){ 
        if(i >= arrayaddress.length-1){ 
         return; 
        } 
        geocoder = new google.maps.Geocoder(); 
        geocoder.geocode({ 'address': arrayaddress[i]}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         map: map, 
         position: results[0].geometry.location 
         }); 
         var zmiennalat = marker.getPosition().lat(); 
         var zmiennalng = marker.getPosition().lng(); 
         mystring = mystring + zmiennalat + "|" + zmiennalng + "#"; 
        } 
        else 
        { 
         mystring = mystring + "er" + "|" + "er" + "#"; 
         //alert("Geocode was not successful for the following reason: " + status); 
        } 
        }); 
        setTimeout(function(){ nextStep(i+1); }, 800); 
         var dsa = mystring; 
         document.getElementById("<%=hfSzerokosc.ClientID%>").value = dsa; 
         document.getElementById("<%=UpdateButton1.ClientID %>").click();  
       })(0); 

UPDATE

    function nextStep(i){ 
        if(i >= arrayaddress.length-1){ 
         return; 
        } 

        // code 

        }); 
        setTimeout(function(){ nextStep(i+1); }, 1000);  
       }; 

然後

<button type="button" onclick="nextStep(0)">Click Me!</button> 

和錯誤是:未定義

NEXTSTEP

有什麼不對?

+3

「睡眠()」功能是對人類的犯罪。 – Pointy 2012-07-07 13:43:24

+0

早些時候,我有setTimeout功能,我嘗試了一切,但..好吧,好吧,我的壞:D – whoah 2012-07-07 13:52:13

回答

0

相反的for循環,試試這個:

//............... 
//............... 

var mystring = ""; 
var address = <%=testing %> 
var arrayaddress = address.split("%"); 

//Modification-----BEGIN 
(function nextStep(i){ 
    if(i >= arrayaddress.length-1){ 
     return; 
    } 

    //----------------- 
    //for-loop body here 
    //------------------ 

    // 
    setTimeout(function(){ nextStep(i+1); }, 500);  
})(0); 
//Modification-----END 

//............... 
//............... 

UPDATE:如果你想運行nextStep功能,只有當按鈕被點擊,然後修改上面的代碼是這樣的:

function nextStep(i){ 
    ///// 
}; 

然後,當onclick將被觸發,只需撥打nextStep(0)

+0

謝謝,這工作非常好!但還有另一個問題 - 請在「編輯」後的第一篇文章中查看。問候 ! – whoah 2012-07-07 15:31:34

+0

@whoah您可以通過更改'setTimeout'方法的延遲來配置請求速度。爲了加速,延遲,例如,設置爲'100',等等...... – Engineer 2012-07-07 15:45:23

+0

是的,我知道。但是,例如 - 這100個標記在地圖上,但我必須等待幾分鐘,直到Mystring顯示值。 – whoah 2012-07-07 15:48:16