2016-10-20 288 views
0

我正在使用OpenLayers 3.18.2。 我的地圖是olMap,我的視圖是olView。 我想要在屏幕上顯示可見地圖的範圍。view.calculateExtent返回[NaN,NaN,NaN,NaN]

olView.getCenter() = [2142126.3712395,-4085536.2324793] 
olView.getZoom() = 16 
olView.getResolution() = 2.388657133911758 
olMap.getSize() = [1906,904] 
olView.calculateExtent(olMap.getSize()) = [NaN,NaN,NaN,NaN] 

爲什麼這不能正常返回?

回答

2

工作睡在它之後,這裏考慮的反饋和一些實驗,我發現了問題的原因:座標從一個AJAX調用它返回一個字符串來。我打電話

olView.setCenter([x, y]) 

當x和y是字符串時,地圖視圖更改爲正確的中心位置,但之後無法正常工作。將呼叫更改爲

olView.setCenter([parseFloat(x), parseFloat(y)]) 

使地圖正常工作。

0

其實你不應該有任何問題獲得地圖的程度,因爲代碼似乎是correct.My地圖被定義爲地圖和map.getView()。calculateExtent(map.getSize())。我能夠得到程度。 You can see from the screenshot

+0

我已經在IE11,FireFox和Chrome中使用我的自定義構建和OL3.18.2的完整版本進行了測試,並獲得了相同的結果。爲NaN – Derek

0

在獲得關於與I計算的程度自己的作業的興趣:

var center = olView.getCenter(); 
var res = olView.getResolution(); 
var pxSize = olMap.getSize(); 
var cx = parseFloat(center[0]); 
var cy = parseFloat(center[1]); 
var dx = res * pxSize[0]/2; 
var dy = res * pxSize[1]/2; 
var extent = [cx - dx, cy - dy, cx + dx, cy + dy]; 

olView.getCenter()被返回一個字符串數組,因此parseFloat。

0

下面是一張類似於你的地圖的工作jsFiddle(使用OSM作爲底圖)。 calculateExtent()似乎正確http://jsfiddle.net/e969kjro/1/

<div id="map" class="map"></div> 
<button id="myButton" onclick="test()">Click Me</button> 

var view = new ol.View({ 
    center: [2142126.3712395,-4085536.2324793], 
    zoom: 16 
    }) 

var map = new ol.Map({ 
    target: 'map', 
    layers: [ 
     new ol.layer.Tile({ 
      source: new ol.source.OSM() 
     }) 
    ], 
    view: view 
}); 

window.test = function() { 
    alert(view.calculateExtent(map.getSize())); 
}