問題是這樣的:我們設置
var bounds = new google.maps.LatLngBounds();
,使我們可以在以後符合我們的標記在地圖上的邊界區域。 GMaps將總是以相應的方式異步縮小到fitBounds(),但不會放大以達到相同效果(如前面提到的@broady)。這對於許多應用程序來說並不理想,因爲一旦您在地圖上顯示了一系列導致地圖縮小的標記(可能是< 10),它將不會在用戶手動執行縮放時放大。
GMaps將繼續使用(最好沒有更好的單詞)邊界的最縮小的標記收集狀態(對不起)。在每次調用新標記之前將其設置爲「空」,可爲您提供一張全新的地圖。
要自動放大,只需設置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
}
這似乎工作。我不知道'panToBounds'沒有'fitBounds'應該做什麼。 – dbkaplun 2012-08-12 04:13:24