2016-10-20 10 views
0

私はOpenLayers 3.18.2を使用しています。 私のマップはolMapで、私のビューはolViewです。 画面上に表示されている地図の範囲を取得したいと考えています。view.calculateExtent returns [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

実際には、コードが正しいようにマップの範囲を取得することに問題はありません。私のマップはmapとmap.getView()。calculateExtent(map.getSize())として定義されています。エクステントを取得する。私はある程度自分で計算ジョブに乗るの金利で

+0

IE11、FireFox、およびChromeでカスタムビルドとOL3.18.2のフルビルドの両方を使用してテストして、同じ結果が得られました。 NaN – Derek

0

You can see from the screenshot

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())); 
}