我有一个带有本地化的数组(“街道,城市,邮政编码,省,国家”)。 我希望每个本地化都有一个包含所有Lat和Lng值的字符串,如下所示(“#lat.value | lng.value#lat2.value | lng2.value ..”等)。我用于此Google API地理编码器。但是Geocoder有一个恼人的限制10~11个本地化一次。如何获得100个本地化的100个lat& lng值?我试过sleep()函数,但这不起作用。这是我在js中的功能。
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#etc ..
始终在第一次本地化时解码时出错(如果数组中超过10个位置)。为什么? 为什么不在最后的本地化?
恢复:如何通过此循环获得超过10个lat | lng值?
谢谢!
编辑谢谢,这工作很好!
但还有另一个问题。字符串Mystring显示得很慢..如何修复它?当标记在地图上设置时它是令人耳目一新的 - 也许这不是问题,但对于100-150个标记我必须等待几分钟才能获得Mystring值..是否有任何可能性来显示更快的Mystring值?< / p>
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);
更新
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
出了什么问题?
答案 0 :(得分:0)
而不是for-loop,试试这个:
//...............
//...............
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
//...............
//...............
更新:如果您想运行nextStep
功能,只有在点击按钮时,才会修改上面的代码:
function nextStep(i){
/////
};
然后,当onclick
被触发时,只需致电nextStep(0)
。