问题是这样的:我们设置
var bounds = new google.maps.LatLngBounds();
以便我们以后可以将标记拟合到地图上的有界区域。GMaps 将始终相应地异步缩小到 fitBounds() ,但不会放大以实现相同的效果(如@broady 之前所述)。这对于许多应用程序来说并不理想,因为一旦您在地图上显示了一系列导致地图缩小(可能 <10)的标记,如果没有用户手动操作,它将不会重新放大。
GMaps 将继续使用(缺少更好的词)最缩小标记集合状态的边界(对不起)。在每次调用新标记之前设置为“null”,可以为您提供一个新的地图来使用。
要自动放大,只需设置 LatLngBounds(); 像这样'null'(请参见下面的伪示例以查看其位置):
bounds = new google.maps.LatLngBounds(null);
伪示例:
// map stuff/initiation
...
var bounds = new google.maps.LatLngBounds();
var gmarkers = [];
function CreateMarker (obj) {
myLatLng = new google.maps.LatLng(obj['latitude'], obj['longitude']);
marker = new google.maps.Marker({
position: myLatLng,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(obj['job']);
infowindow.open(map, marker);
}
})(marker, i));
bounds.extend(myLatLng);
gmarkers.push(marker);
}
....
// here's an AJAX method I use to grab marker coords from a database:
$.ajax({
beforeSend: function() {
clear_markers(gmarkers); // see below for clear_markers() function declaration
},
cache: false,
data: params,
dataType: 'json',
timeout: 0,
type: 'POST',
url: '/map/get_markers.php?_=<?php echo md5(session_id() . time() . mt_rand(1,9999)); ?>',
success: function(data) {
if (data) {
if (data['count'] > 0) {
var obj;
var results = data['results'];
// Plot the markers
for (r in results) {
if (r < (data['count'])) {
CreateMarker(results[r]);
}
}
}
}
},
complete: function() {
map.fitBounds(bounds);
}
});
// clear_markers()
function clear_markers(a) {
if (a) {
for (i in a) {
a[i].setMap(null);
}
a.length = 0;
}
bounds = new google.maps.LatLngBounds(null); // this is where the magic happens; setting LatLngBounds to null resets the current bounds and allows the new call for zoom in/out to be made directly against the latest markers to be plotted on the map
}