2017-02-22 1 views
0

Bing과 함께 OpenLayers2를 사용하고 있습니다. 고객은지도와 상호 작용하려면 더 높은 확대/축소 수준이 필요합니다. 현재 얻을 수있는 최대 줌 레벨은 getZoom() 함수로 테스트 한 19입니다. 지도 생성자에서 "numZoomLevels"를 더 높은 숫자로 설정하려고 시도했지만 Bing/OL은 무시합니다. 타일을 더 낮은 줌 레벨로 설정하는 방법이 있는지 또는 기존 타일을 단순히 확대하여 세부 사항이 약간 흐릿한 경우에도 더 큰 이미지를 볼 수 있는지 궁금합니다. 그러나 정확한 lat/lon 값을 갖는 것이 고객의 기능에 중요하기 때문에 프로젝션을 수정하지 않는 것이 중요합니다.OpenLayers 2에서 타일 확대 또는 왜곡없는 프로젝션없이 MaxZoom 확대

map = new OpenLayers.Map('map', { 
    allOverlays: false, 
    numZoomLevels: 20, 
    controls: [ 
     new OpenLayers.Control.Navigation({ 
      dragPanOptions: { 
       enableKinetic: true 
      } 
     }), 
     new OpenLayers.Control.LayerSwitcher(), 
     new OpenLayers.Control.Zoom({ 
      zoomInId: "customZoomIn", 
      zoomOutId: "customZoomOut" 
     }) 
    ]}); 

var aerial = new OpenLayers.Layer.Bing({ 
    name: "Aerial", 
    key: apiKey, 
    type: "Aerial" 
}); 

내가 OL3 magnify example 우연히 발견 않았다, 그러나 OL3 위해 작성 내가가 확대 옵션이 필요하기 때문에 내가 변환 할 수있는 것 이상의 비트가 줌 레벨뿐만 아니라 상황에 맞는 오버레이로 삽입 할 수 있습니다. 또한 나는 캔버스에 대한 많은 경험이 없다. 어떤 도움을 주셔서 감사합니다!

답변

0

나는 그것을 알아 냈고 실제로는 아주 간단합니다. 첫째, numZoomLevels은지도 수준이 아니라 레이어 수준에 있어야합니다. 당신이 빙을 제공하는 것 이상으로 확대 할 수있게하려면 다음과 같이 true로 fractionalZoom를 설정해야합니다

map = new OpenLayers.Map('map', { 
    allOverlays: false, 
    fractionalZoom: true, 
    controls: [ 
     new OpenLayers.Control.Navigation({ 
      dragPanOptions: { 
       enableKinetic: true 
      } 
     }), 
     new OpenLayers.Control.LayerSwitcher(), 
     new OpenLayers.Control.Zoom({ 
      zoomInId: "customZoomIn", 
      zoomOutId: "customZoomOut" 
     }) 
    ]}); 

그런 다음, 각 층에, 당신은 해상도의 배열을 설정해야합니다. numZoomLevels 아래에 나열된 각 확대/축소 수준에 대한 값을 만들어야합니다. 22 단계의 확대가 필요했습니다. https://msdn.microsoft.com/en-us/library/aa940990.aspx

var bingResolutions = [156543.03390625, 78271.516953125, 39135.7584765625, 
19567.87923828125, 9783.939619140625, 4891.9698095703125, 
2445.9849047851562, 1222.9924523925781, 611.4962261962891, 
305.74811309814453, 152.87405654907226, 76.43702827453613, 
38.218514137268066, 19.109257068634033, 9.554628534317017, 
4.777314267158508, 2.388657133579254, 1.194328566789627, 
0.5971642833948135, 0.29858214169740677, 0.14929107084870338, 
0.07464553542435169]; 

var bingServerResolutions = [156543.03390625, 78271.516953125, 39135.7584765625, 
19567.87923828125, 9783.939619140625, 4891.9698095703125, 
2445.9849047851562, 1222.9924523925781, 611.4962261962891, 
305.74811309814453, 152.87405654907226, 76.43702827453613, 
38.218514137268066, 19.109257068634033, 9.554628534317017, 
4.777314267158508, 2.388657133579254, 1.194328566789627, 
0.5971642833948135]; 

서버 해상도 빙 자체에서 타일 해상도입니다 OpenLayers.Layer.Bing의 소스 코드에서

var aerial = new OpenLayers.Layer.Bing({ 
     name: "Aerial", 
     key: apiKey, 
     type: "Aerial", 
     numZoomLevels: 22, 
     resolutions: bingResolutions, 
     serverResolutions: bingServerResolutions, 
     transitionEffect: 'resize' 
    }); 

이미 그들의 값에 매핑 정의 해상도 블록을했다. 추가 해상도 인 (0.29858214169740677, 0.14929107084870338, 0.07464553542435169)은 계층 19 타일을 확대하는 부분 줌 레벨입니다.

Here은 OSM 계층 용 OpenLayers의 작업 예제입니다.

희망이 있으면 다른 사람에게 도움이됩니다.

관련 문제