2010-10-06 35 views
6

Tôi vừa bắt đầu sử dụng API Google Maps (v3.0) và đã có nhiều thành công cho đến nay. Tôi đang tải một tập hợp các đối tượng có giá trị Kinh độ & Giá trị kinh độ từ cơ sở dữ liệu, chuyển chúng vào tập lệnh của tôi và lặp lại chúng trong tập lệnh để thêm chúng vào bản đồ.Gọi bản đồ.fitBounds() Nhiều lần trong Google Maps API v3.0

Tôi đang sử dụng phương pháp "bounds.extend()/map.fitBounds()" của thiết lập tỷ lệ thu phóng của bản đồ & giới hạn (xem mã bên dưới), hoạt động như dự kiến ​​lần đầu tiên xung quanh; tuy nhiên, nếu tôi xóa các dấu hiện có, hãy tìm một tập hợp các đối tượng khác và thực hiện tương tự trên cùng một bản đồ, nó đặt giới hạn không chính xác, thường dẫn đến thu phóng tối thiểu (chế độ xem của một phi hành gia).

Nghi ngờ của tôi là đối tượng bản đồ của tôi có bộ nhớ của tập hợp giới hạn trước đó mà tôi đã đưa ra và tôi cần tìm cách xóa các giới hạn này trước khi chỉ định những giới hạn mới của mình, nhưng tôi thực sự không thể quá chắc chắn.

Bất kỳ trợ giúp nào được đánh giá cao!

var locationList = []; 
for (var i = 0; i < mapPoints.length; i++) { // mapPoints is a collection of DTOs 
    var mapPoint = mapPoints[i]; 
    var location = new google.maps.LatLng(mapPoint.Latitude, mapPoint.Longitude); 
    locationList.push(location); 

    var marker = new google.maps.Marker({ 
     map: map, 
     icon: '/Content/images/map/' + mapPoint.Status.Icon, 
     shadow: '/Content/images/map/shadow.png', 
     position: location 
    }); 
    markers.push(marker); // markers is an Array that is managed outside this loop 
} 

var bounds = new google.maps.LatLngBounds(); 
for (var j = 0; j < locationList.length; j++) 
    bounds.extend(locationList[j]); 
map.fitBounds(bounds); 
+0

Bạn có xóa biến 'locationList' khi bạn tải một bộ đánh dấu mới không? –

+0

'locationList' được khởi tạo mỗi lần (dòng đầu tiên trong mẫu mã) và vì vậy trống trước khi bắt đầu vòng lặp. – egoodberry

Trả lời

12

Đây không phải là câu trả lời, vì vậy để nói chuyện, nhưng một (hơi hacky) workaround mà tôi phát hiện trên một thread trong nhóm API v3 Google Maps Javascript:

//map.fitBounds(bounds); 
setTimeout(function() { map.fitBounds(bounds); }, 1); 
+0

Công trình này hoạt động! Nhưng tôi rất muốn biết lý do tại sao ... – coderama

+0

Thời gian chờ của setTimeout hoặc $ timeout chờ đợi chu kỳ tiêu hóa hiện tại hoàn thành trước khi thực thi, trong khi tôi không chắc chắn lý do tại sao nó hoạt động, tôi đoán rằng một số quá trình khác xung đột fitBounds vẫn chưa hoàn thành. Một lựa chọn tốt hơn có thể là lắng nghe sự kiện hoàn thành của quá trình đó, đó là nếu bạn biết nó là gì. – Sev

+0

Làm việc cho tôi. Kỳ dị. –

0

nếu ở trên câu trả lời không làm việc cho bạn (nó không cho tôi), vấn đề có thể nằm trong bootstrap (giả sử bạn đang sử dụng nó). bootstrap modals đặc biệt tạo ra tất cả các loại hành vi chiến thắng khi tôi nhúng một đối tượng bản đồ vào nó .. tò mò sửa chữa chính nó nếu/khi tôi thả một 'cảnh báo' trong đó .. trong mọi trường hợp, tôi giải quyết tất cả các vấn đề của tôi bằng cách chỉ xây dựng phương thức của riêng tôi (nghĩa là, không sử dụng các phương thức bootstraps).

Các vấn đề liên quan