2013-04-09 52 views
8

如何獲取地圖上的所有標記,以便用戶可以看到所有標記?OpenLayers在屏幕上顯示所有標記

我有一些標記。我在地圖上顯示它們。 LonLat中心是從我所有標記的lon和lat的最高和最低數字的平均值中獲得的。

map.setCenter(centerLonLat, 8); 

8只是隨機縮放級別:

所以我用我的設置映射到我的所有標記的中心點。有什麼辦法可以計算出完美的縮放級別,所有的標記都顯示在地圖上?

回答

3

得到它的工作使用zoomToExtent()

var newBound = OpenLayers.Bounds(); 

對於每個標記lonlat:

newBound.extend(lonLat); 

然後將它傳遞給該函數:

map.zoomToExtent(newBound); 
+0

應該是:var newBound = new OpenLayers.Bounds(); – 2014-12-24 00:31:46

+0

我使用了你的解決方案,但不起作用,因爲marker上的lonLat爲null。但是我使用'getCoords()'並像這樣工作:'bounds.extend(new OpenLayers.Geometry.Point(marker.getCoords()。lon,marker.getCoords()。lat).transform(fromProjection,toProjection)); ' – IgniteCoders 2015-06-25 18:19:07

+0

這是爲ol2嗎? ol3解決方案是什麼? – Ries 2015-11-11 14:10:56

8

類似的方式做到這一點,從而避免一個循環,由OpenLayers getDataExtent() function here給出。您需要將其應用於包含標記的圖層上:

var newBound = map.myLayer.getDataExtent(); 
map.zoomToExtent(newBound); 
+1

你也可以使用它。但是因爲我已經循環了我的標記,所以最好在該循環中進行。 – Klaasvaak 2013-04-10 10:02:24

1

這是一箇舊線程,但對OpenLayers進行了更改,我想我會爲此發佈新的解決方案。如果您使用[ol.source.Vector][1]作爲圖層來源,則可以調用以下行來適應數據周圍的地圖視圖。

map.getView().fit(vectorSource.getExtent()); 

這同時使地圖居中並設置縮放比例,以便您的所有數據一次可見。