2008-11-27 25 views
8

Tôi muốn chuyển một lượng vị trí địa lý x vào API Google Maps và đặt nó ở giữa các vị trí này và đặt mức thu phóng thích hợp để tất cả các vị trí hiển thị trên bản đồ. I E. hiển thị tất cả các điểm đánh dấu hiện đang có trên bản đồ.Google map tập trung vào các vị trí địa lý và phóng to một cách thích hợp

Điều này có thể thực hiện với những gì API Google Maps cung cấp theo mặc định hoặc tôi có cần giải quyết để tự xây dựng bản thân này không?

Trả lời

3

Có một số cách để thực hiện việc này nhưng rất dễ dàng nếu bạn đang sử dụng API V2. Xem này post for an example, this group post hoặc this post.

+0

Lưu ý rằng liên kết đầu tiên đề cập rằng getBoundsZoomLevel() được cung cấp tài liệu - điều này không còn đúng nữa. Tôi thực hiện một cái gì đó tương tự cho một dự án của tôi, nó hoạt động tốt - ngoại trừ tôi muốn tôi biết về GBounds.extend() sau đó! –

9

tôi đã sử dụng fitBounds (API V3) cho mỗi điểm:

  1. Khai báo biến.

    var bounds = new google.maps.LatLngBounds(); 
    
  2. Đi qua mỗi điểm đánh dấu với FOR loop

    for (i = 0; i < markers.length; i++) { 
        var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng); 
        bounds.extend(latlng); 
    } 
    
  3. Cuối cùng gọi

    map.fitBounds(bounds); 
    
+0

ví dụ này không thực sự rõ ràng – Francesco

+2

@camelCase: phụ thuộc vào kỹ năng của bạn, +1 chính xác những gì tôi đang tìm kiếm – Moak

+0

@Moak bạn có thể muốn thêm maxZoom vào đối tượng bản đồ để tránh phóng to quá gần! – joetsuihk

1

Idea Gray là rất tốt nhưng không làm việc như vậy. Tôi đã phải làm việc ra một hack cho một zoomToMarkers API V3:

function zoomToMarkers(map, markers) 
{ 
    if(markers[0]) // make sure at least one marker is there 
    { 
     // Get LatLng of the first marker 
     var tempmark =markers[0].getPosition(); 

     // LatLngBounds needs two LatLng objects to be constructed 
     var bounds = new google.maps.LatLngBounds(tempmark,tempmark); 

     // loop thru all markers and extend the LatLngBounds object 
     for (var i = 0; i < markers.length; i++) 
     { 
      bounds.extend(markers[i].getPosition()); 
     } 

     // Set the map viewport 
     map.fitBounds(bounds); 
    } 

} 
+0

Cảm ơn bạn rất nhiều! –

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