2016-07-10 68 views
0

我需要縮放我的OpenLayers地圖(使用Google Maps基礎圖層)以將所有給定的座標列表放入視圖中。OpenLayers 3:將地圖縮放到陣列中的座標

我已經存儲的座標在名爲pointsDecimal經度和緯度對的陣列,其看起來像這樣:

pointsDecimal: Array[50] 
    0: 148.77638 
    1: -34.491728 
    2: 148.77896 
    3: -34.492302 
    4: 148.778090711323 
    ... 

偶數索引(0,2,4等)是經度和奇數編號索引(1,3,5等)是緯度。

這是我想要使用的代碼:

map.getView().fit(pointsDecimal, map.getSize()); 

但出於某種原因,這使我在最大變焦水平的座標爲[0,0] - 在幾內亞灣,而不是在新南威爾士州東南部,我想成爲!

我知道如果我使用OpenLayers源代碼(例如source.getExtent())代替我的pointsDecimal數組,那麼這樣做會容易得多,但由於我現在無法進入的原因,這不是一種選擇 - 我只能使用數組。

任何人都可以給我提示嗎?

編輯:我想我快到了,多虧了Anupam。這是我現在有:

var extent = [pointsLongMin,pointsLatMin,pointsLongMax,pointsLatMax]; 
map.getView().fit(extent,map.getSize()); 

我傳遞給數組中的值如下:

pointsLongMin: 148.771162 
pointsLatMin: -34.5029736405108 
pointsLongMax: 148.77896 
pointsLatMax: -34.491728 

但我還在適應於洋在[0,0傾倒出來]。我在這裏做錯了什麼?

回答

2

爲了使用map.getView()。fit(extent,size)。 範圍表示四點[minx,miny,maxx,maxy]。

它實際上是一個矩形。嘗試

var extent=[148.77638,-34.491728,148.77896,-34.492302]; 

map.getView().fit(extent,map.getSize()); 
+0

我敢肯定這讓我更加親近,但它仍然將我拋棄在海洋中的同一個地方。我剛剛複製了上面的代碼......你能想到這可能不起作用的任何原因嗎?謝謝你的幫助。 –

+0

原因實際上我只是從你共享的數組中挑選出來的。你只需要通過正確的範圍。 –

+0

仍然無法正常工作 - 請參閱上面的編輯。我無法弄清楚我做錯了什麼。有任何想法嗎?感謝您的幫助... –

1

最propable原因是你的地圖投射在EPSG:3857,而你的程度EPSG:4326。所以你需要把你的範圍轉換成你的地圖投影。

var coordMin = ol.proj.fromLonLat([148.77638,-34.491728], 'EPSG:3857'); 
var coordMax = ol.proj.fromLonLat([148.77896,-34.492302], 'EPSG:3857'); 
var extent=[coordMin[0],coordMin[1],coordMax[0],coordMax[1]]; 
map.getView().fit(extent,map.getSize()); 

您可能會發現更多的elegand方式來進行範圍轉換。除非你提供完整的代碼,否則我們只能猜測你的地圖投影是什麼。我只是猜測是EPSG:3857因爲這是默認的ol3使用。

+0

輝煌!完美的作品。不能相信我沒有想到這一點 - 我一直在糾正我的代碼的所有其他部分的投影差異,不知道爲什麼我不認爲這部分做它。除了我使用變量名稱替換代碼中的座標外,我的代碼與上面的代碼相同,例如, 'var coordMin = ol.proj。fromLonLat([pointsLongMin,pointsLatMin],'EPSG:3857');'感謝一百萬。 –

+0

no prombs amigo。樂意效勞!!! – pavlos