2017-12-12 43 views
0

주어진 경계 상자로지도를 가운데에 놓으려고합니다. OpenLayers FAQ에 그것의 예 (심지어 swissProjection)하지만 그냥 작동하지 않습니다. 일부 포럼에서 주위를 둘러 보았지만 제대로 작동시키는 법을 알 수 없었습니다.openlayers - 경계 상자로지도를 가운데에 맞추는 법

누가 알 수 있습니다.

var extent = [-9022321.0707,3022167.2243,-8849726.2608,3148441.1951]; 

var projection = new ol.proj.Projection({ 
    code: 'EPSG:3857', 
    extent: extent, 
    units: 'm' 
}); 
ol.proj.addProjection(projection); 

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

답변

1

귀하의 코드가 올바르지 만 중심이 범위에서 범위를 벗어 : 여기

는 코드입니다. 문제를 해결하는 방법은 두 가지가 있습니다.

먼저 유효한 뷰 센터 및 레벨을 설정하십시오.

예)

view: new ol.View({ 
    projection: projection, 
    center: [-8936023.66575, 3085304.2097], // guess it's the center of extent 
    zoom: 8 // whatever you want. 
}) 

둘째, 대신에 ProjectionextentView.fit 설정을 사용한다.

var projection = new ol.proj.Projection({ 
    code: 'EPSG:3857', 
    //extent: extent, 
    units: 'm' 
}); 
... 
map.getView().fit(extent); 
+0

문제를 해결하고 확장 옵션을 투영에서 제거하는 것은 단지 line map.getView(). fit (extent)입니다. 테스트 한 결과, 뷰의 새로운 적합성이 경계 상자에 의해 완전히 정의 되었기 때문에 줌 및 중심 옵션을 설정할 필요가 없습니다. 그게 내가 처음에 0으로 설정 한 이유입니다. 답변의 상단 부분을 제거하거나 수정하면 해결 된 것으로 표시됩니다. 고맙습니다! – krashennikov

+0

그 중 하나를 선택할 수 있습니다. 첫 번째 및 두 번째 해결 방법을 모두 수행 할 필요가 없습니다. –