Vấn đề là thế này: chúng tôi đặt
var bounds = new google.maps.LatLngBounds();
để chúng ta sau này có thể phù hợp với các dấu hiệu của chúng tôi đến một khu vực bị chặn trên bản đồ. GMaps sẽ luôn thu nhỏ không đồng bộ thành fitBounds() tương ứng, nhưng sẽ không phóng to để đạt được như cũ (như đã lưu ý trước đây bởi @broady). Đây không phải là lý tưởng cho nhiều ứng dụng khi bạn đã đi và hiển thị một loạt các điểm đánh dấu trên bản đồ khiến bản đồ thu nhỏ (có thể là < 10), nó sẽ không phóng to lại mà không cần người dùng tự làm như vậy.
GMaps sẽ tiếp tục sử dụng giới hạn của (thiếu từ tốt hơn) thu nhỏ nhất trạng thái thu thập điểm đánh dấu (xin lỗi). Đặt thành 'null' trước mỗi cuộc gọi cho các điểm đánh dấu mới cung cấp cho bạn bản đồ mới để làm việc.
Để tự động phóng to, chỉ cần đặt LatLngBounds(); để 'null' như vậy (xem ví dụ giả bên dưới để xem vị trí của nó):
bounds = new google.maps.LatLngBounds(null);
Pseudo dụ:
// 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
}
Nguồn
2012-04-24 16:13:18
Điều này dường như hoạt động. Tôi tự hỏi những gì 'panToBounds' là nghĩa vụ phải làm mà không có' fitBounds'. – dbkaplun