如何獲取地圖上的所有標記,以便用戶可以看到所有標記?OpenLayers在屏幕上顯示所有標記
我有一些標記。我在地圖上顯示它們。 LonLat中心是從我所有標記的lon和lat的最高和最低數字的平均值中獲得的。
map.setCenter(centerLonLat, 8);
8只是隨機縮放級別:
所以我用我的設置映射到我的所有標記的中心點。有什麼辦法可以計算出完美的縮放級別,所有的標記都顯示在地圖上?
如何獲取地圖上的所有標記,以便用戶可以看到所有標記?OpenLayers在屏幕上顯示所有標記
我有一些標記。我在地圖上顯示它們。 LonLat中心是從我所有標記的lon和lat的最高和最低數字的平均值中獲得的。
map.setCenter(centerLonLat, 8);
8只是隨機縮放級別:
所以我用我的設置映射到我的所有標記的中心點。有什麼辦法可以計算出完美的縮放級別,所有的標記都顯示在地圖上?
得到它的工作使用zoomToExtent()
var newBound = OpenLayers.Bounds();
對於每個標記lonlat:
newBound.extend(lonLat);
然後將它傳遞給該函數:
map.zoomToExtent(newBound);
類似的方式做到這一點,從而避免一個循環,由OpenLayers getDataExtent() function here給出。您需要將其應用於包含標記的圖層上:
var newBound = map.myLayer.getDataExtent();
map.zoomToExtent(newBound);
你也可以使用它。但是因爲我已經循環了我的標記,所以最好在該循環中進行。 – Klaasvaak 2013-04-10 10:02:24
這是一箇舊線程,但對OpenLayers進行了更改,我想我會爲此發佈新的解決方案。如果您使用[ol.source.Vector][1]
作爲圖層來源,則可以調用以下行來適應數據周圍的地圖視圖。
map.getView().fit(vectorSource.getExtent());
這同時使地圖居中並設置縮放比例,以便您的所有數據一次可見。
應該是:var newBound = new OpenLayers.Bounds(); – 2014-12-24 00:31:46
我使用了你的解決方案,但不起作用,因爲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
這是爲ol2嗎? ol3解決方案是什麼? – Ries 2015-11-11 14:10:56