2016-10-20 7 views
0

OpenLayers 3.18.2를 사용하고 있습니다. 지도가 olMap이고 내보기가 olView입니다. 화면에 표시되는지도의 범위를 가져오고 싶습니다.view.calculateExtent returning [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

다음은 OSM을 기본 맵으로 사용하는 것과 비슷한 맵의 jsFiddle입니다. 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())); 
}