2010-07-23 82 views
20

我有一個從用戶數據動態生成的覆蓋圖,所以我需要知道如何找到該覆蓋圖的中心。Google Maps API:計算折線的中心/縮放

目前,我只是使用覆蓋圖中的第一個座標,但這並不代表覆蓋圖的中心。因此,當我加載地圖時,它不在疊加層上居中。

有沒有人有一個很好的方法,通過計算中心,而不是硬編碼它在疊加地圖上居中的地圖?

var latlng = new google.maps.LatLng(38.269239, -122.276010); 
    var myOptions = { 
     zoom: 15,//Calculate this somehow? 
     center: latlng,// Calculate value from array of coordinates? 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

回答

78

如果你有一個座標列表,你可以遍歷它們並將它們添加到一個LatLngBounds對象。下面是V3 API一個例子,但在V2的概念是相似的:

var bounds = new google.maps.LatLngBounds(); 
for (var i = 0; i < coordinates.length; i++) { 
    bounds.extend(coordinates[i]); 
} 

之後,你可以得到中心與:

bounds.getCenter(); 

或者,你可以直接調用map.fitBounds(),它將圍繞邊界中心的地圖居中並調整縮放,以便整個邊界將完全適合視圖端口。

map.fitBounds(bounds); 
+0

你是真棒!謝謝,這只是我需要的! – 2010-07-23 18:12:48

+0

這個方法可以用來計算縮放嗎? – 2010-07-23 18:13:29

+0

只需在初始化過程中使用任何位置和縮放級別,然後如上所述調用'map.fitBounds(bounds);'。如果你想強制執行一些最大縮放級別,你需要暫時註冊一個'zoomChangeBoundsListener'。告訴我你是否也需要一個例子。 – tux21b 2010-07-23 18:20:16

2

LatLngBounds的getCenter函數並不總是在折線內提供一個點。看來使用的算法很簡單。我試圖找到一個解決方案,並將發佈在這裏,如果找到一個。

10

基於@ tux21b,

 var bounds = new google.maps.LatLngBounds(); 
     polyline.getPath().forEach(function(e){//can't do polyline.getPath()[i] because it's a MVCArray 
      bounds.extend(e); 
     })   
     _map.fitBounds(bounds); 
相關問題