ローカリゼーション (「通り、都市、郵便番号、州、国」) の配列があります。このように、ローカリゼーションごとにすべての緯度と経度の値を含む文字列が必要です (「#lat.value|lng.value#lat2.value|lng2.value ..」など)。この Google API Geocoder に使用します。しかし、Geocoder には 10 ~ 11 回のローカリゼーションという面倒な制限があります。100 個のローカリゼーションに対して約 100 個の緯度経度値を取得するにはどうすればよいですか? 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
次に、結果はたとえば次のとおりです。
er|er#34.42342|16.4323#23.32131|43.54545# など.
常に最初のローカリゼーションはデコード時にエラーになります (配列内の場所が 10 を超える場合)。なんで?最後にローカライズしないのはなぜですか?
再開: このループを使用して、この攪拌で 10 を超える lat|lng 値を取得するにはどうすればよいですか?
ありがとう!
編集ありがとう、うまくいきました!
しかし、別の問題があります。string 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);
アップデート
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 が定義されていません
なにが問題ですか?