2016-10-20 236 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())); 
}