[英]Get return value of reverse geocode
我正在迭代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();
}
您需要提供回調方法。 您提供的方法將使用兩個參數調用:
在回調中,您可以根據需要處理從地理編碼器返回的數據。
請參閱此處的 Geocoder文檔
更詳細地說,地理編碼方法將對google服務進行ajax調用。 這是異步的。 調用地理編碼方法時,將繼續執行其余功能。 服務響應后,將調用您的回調,結果和狀態將在參數中傳遞。 如果要存儲結果,只需將其添加到任何可供您在外部使用的容器中。
提供對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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.