我想要做的是加載了一堆使用AJAX和JSON的地址,找出每個地址的經度和緯度,把標記在地圖上,然後用fitBounds()
放大以便所有標記都可見。聽起來很簡單。谷歌地圖API V3 - 多個地理編碼後fitBounds請求
我已經得到了大部分的打包,但我的問題是fitBounds()
部分。
基本上看來,發生的事情是在循環每個地址並查找經度和緯度的同時,似乎在循環下面加載了fitBounds()
函數。
所以它調用fitBounds()
,但不具備marker_bounds
陣列中的任何東西。我以爲它會在完成fitBounds()
函數之前完成循環,但我認爲geocoder.geocode()
函數必須使它在繼續加載其餘的JavaScript代碼時確定經度和緯度。
我的代碼如下:
var geocoder;
var map;
var marker_bounds = [];
var myOptions = {
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
$.post('addresses.php', function(data) {
var next_filter = '';
for(var x=0;x<data.addresses.length;x++) {
geocoder.geocode({ 'address': data.addresses[x].address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
var latLng = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
marker_bounds.push(latLng);
}
});
}
var latlngbounds = new google.maps.LatLngBounds();
for (var i = 0; i < marker_bounds.length; i++) {
latlngbounds.extend(marker_bounds[i]);
}
map.setCenter(latlngbounds.getCenter());
map.fitBounds(latlngbounds);
}, 'json');
是否有所有地理編碼完成後,我可以調用一個函數?
我一直在做更多的挖掘,似乎地理編碼方法使一個asynchonous調用,它可以解釋爲什麼我的功能是整理和地理編碼完成之前返回長。有沒有辦法確定所有地理編碼方法何時完成? –