2010-08-17 34 views
5

Tôi gọi getBounds() ngay sau khi gọi hàm fitBounds() và tôi nghĩ rằng tôi sẽ nhận được một ràng buộc hợp lệ khi người bản đồ gần đây và zoom để phù hợp với giới hạn. Thật không may, getBounds() là trở về nil.Bản đồ Google Maps.getBounds() ngay lập tức sau khi gọi đến bản đồ.fitBounds

Các mã để tái sản xuất này là như sau:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> 

     <style> 
      #map { 
       width: 800px; 
       height: 400px; 
      } 
     </style> 

    </head> 
    <body> 
     <div id='map'></div> 

     <script> 
      var myLatlng1 = new google.maps.LatLng(-38.397, 150.644); 
      var myLatlng2 = new google.maps.LatLng(-34.897, 150.844); 
      var myLatLngBounds = new google.maps.LatLngBounds(myLatlng1, myLatlng2); 

      var myOptions = { 
        mapTypeId: google.maps.MapTypeId.ROADMAP, 
        center: new google.maps.LatLng(0, 0), 
        zoom: 0 
      } 

      var map = new google.maps.Map(document.getElementById("map"), myOptions); 

      map.fitBounds(myLatLngBounds); 

      console.log(map.getMapTypeId()); 
      console.log(map.getZoom()); 
      console.log(map.getBounds()); 
     </script> 
    </body> 
</html> 

Có cái gì tôi đang thiếu? Tôi đã không thể tìm thấy bất cứ điều gì trong các tài liệu về tình trạng này. Tôi nhận được gần nhất là một lưu ý trên getBounds nói rằng:

Nếu bản đồ chưa được khởi tạo (tức là loại bản đồ vẫn là rỗng), hoặc trung tâm và thu phóng chưa được đặt thì kết quả là rỗng.

Lưu ý rằng getZoom cũng trả về không xác định. FitBounds() không đặt giá trị này?

EDIT Tôi đã cập nhật mã có thu phóng và trung tâm mặc định, theo đề xuất của Marcelo.

+0

Thiếu dấu phẩy sau LỘ TRÌNH – Marcelo

+0

Cố định các dấu phẩy. –

Trả lời

7

Bạn sẽ phải nhận giới hạn sau sự kiện bounds_changed.

-1

Câu trả lời nằm trong báo giá của riêng bạn. Bạn phải đặt trung tâm và thu phóng để bản đồ được khởi tạo.

Lưu ý rằng trong các tài liệu cho mapTùy chọn đối tượng đặc điểm kỹ thuật, các giá trị của trung tâm và zoom được đánh dấu là cần:

http://code.google.com/apis/maps/documentation/javascript/reference.html#MapOptions

+0

Điều đó không giải quyết được sự cố - Tôi đã cập nhật mã theo đề xuất của bạn. – Codebeef

+0

Trong mã bạn đã đăng, bạn thiếu dấu phẩy sau mapTypeId: google.maps.MapTypeId.ROADMAP Bản đồ PHẢI được khởi tạo với trung tâm và thu phóng. – Marcelo

+0

Vâng - đó là lỗi đánh máy khi tôi cập nhật mã trong câu hỏi. Nếu bạn thực sự chạy đúng mã, hành vi không thay đổi. – Codebeef

8

Như @CrazyEnigma suggested, bạn có thể nhận được các giới hạn sau sự kiện bounds_changed là kích hoạt:

map.fitBounds(myLatLngBounds); 

google.maps.event.addListener(map, 'bounds_changed', function() { 
    console.log(map.getMapTypeId()); 
    console.log(map.getZoom()); 
    console.log(map.getBounds()); 
}); 

ở trên sẽ in ra sau để điều khiển của bạn:

roadmap 
6 
Object 

Lưu ý rằng nếu bạn chỉ muốn getBounds và làm điều gì đó một lần, bạn nên thay thế addListener với addListenerOnce (Cảm ơn, @Tomas).

+4

bạn nên sử dụng 'addListenerOnce' thay thế! – TMS

0

Sử dụng addListenerOnce khi tilesloaded

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
map.setCenter(myLatLngBounds) 
}); 
Các vấn đề liên quan