2012-04-22 39 views
52

Tôi có mã này hiển thị bản đồ.Google Maps API V3 phương thức fitBounds()

function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(45.4555729, 9.169236), 
     zoom: 13, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 

panControl: true, 
mapTypeControl: false, 
panControlOptions: { 
      position: google.maps.ControlPosition.RIGHT_CENTER 
     }, 
zoomControl: true, 
zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.LARGE, 
    position: google.maps.ControlPosition.RIGHT_CENTER 
}, 
scaleControl: false, 
streetViewControl: false, 
streetViewControlOptions: { 
    position: google.maps.ControlPosition.RIGHT_CENTER 
      } 
     }; 
    var map = new google.maps.Map(document.getElementById("mapCanvas"), 
     myOptions); 



var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776); 

var myPlace = new google.maps.LatLng(45.4555729, 9.169236); 

var marker = new google.maps.Marker({ 
    position: Item_1, 
    map: map}); 

var marker = new google.maps.Marker({ 
    position: myPlace, 
    map: map}); 

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
map.fitBounds(bounds); 

    } 

Ngay cả khi hai điểm được tách ra từ 25 km tôi nhận được kết quả này:

enter image description here

Trong khi tôi muốn làm cho một mức độ zoom cao hơn.

Như thế này

enter image description here

tôi sử dụng phương pháp fitBounds()

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
    map.fitBounds(bounds); 

Cám ơn sự ủng hộ của bạn

Trả lời

119

Điều này xảy ra bởi vì LatLngBounds() không mất hai điểm tùy ý như thông số, nhưng điểm SW và NE

sử dụng phương pháp .extend() trên một giới hạn đối tượng rỗng

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

Demo tại http://jsfiddle.net/gaby/22qte/

29

LatLngBounds phải được xác định với các điểm trong (phía tây nam, đông bắc) theo thứ tự. Điểm của bạn không theo thứ tự đó.

Việc sửa chữa chung, đặc biệt là nếu bạn không biết những điểm chắc chắn sẽ được theo thứ tự đó, là mở rộng một giới hạn rỗng:

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

API sẽ sắp xếp ra các giới hạn.

+7

Hah! Chỉ cần đánh bại nó. Bàn phím iPad không thực hiện gõ nhanh dễ dàng. –

18

Tôi có cùng một vấn đề mà bạn mô tả mặc dù tôi đang xây dựng LatLngBounds của tôi theo đề xuất ở trên. Vấn đề là mọi việc async và gọi map.fitBounds() không đúng lúc có thể để lại cho bạn một kết quả như trong Q. Cách tốt nhất tôi thấy là đặt cuộc gọi trong một trình xử lý nhàn rỗi như thế này:

google.maps.event.addListenerOnce(map, 'idle', function() { 
    map.fitBounds(markerBounds); 
}); 
+1

Cảm ơn, đây là một trợ giúp lớn cho tôi bởi vì tôi đã mã hóa địa chỉ cho coords, và sau đó lập bản đồ cho các coords đó, nhưng nó không hoạt động – andrewtweber

+0

Tôi gặp phải sự cố tương tự do HTML chứa chưa được hiển thị trong khi gọi 'fitBounds()', vì vậy rõ ràng việc thu phóng không thể tự tìm ra. Đảm bảo bản đồ được hiển thị đầu tiên trước khi cố gắng thu phóng bản đồ đã giúp tôi. – stevo

+1

HUUUGE giúp đỡ, cảm ơn cho câu trả lời này –

6
var map = new google.maps.Map(document.getElementById("map"),{ 
       mapTypeId: google.maps.MapTypeId.ROADMAP 

      }); 
var bounds = new google.maps.LatLngBounds(); 

for (i = 0; i < locations.length; i++){ 
     marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
      map: map 
     }); 
bounds.extend(marker.position); 
} 
map.fitBounds(bounds); 
+2

Cool nó hoạt động cho tôi. Cảm ơn @MAMASSi –

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