Openlayers 3 최대 범위


15

사용자가 맵에서 패닝 할 수있는 위치를 제한하고 싶지만 OpenLayers 3에서 맵 뷰의 최대 범위를 설정하는 방법을 알려주는 리소스를 찾을 수 없습니다. OpenLayers 2에 솔루션이 있다는 것을 알고 있습니다. 새 버전에서 가능합니까?

답변:


18

extentView 객체에서 정의 하면됩니다. 예 :

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});

그러나 openlayers.org/en/v3.0.0/apidoc/ol.View.html 에는 그러한 옵션이 없습니다
Daviddd


4
이것은 실제 범위가 아닙니다. 그것은 단지 범위 내에서 범위를 유지합니다. 즉, 범위 전체에 못생긴 공백이 있음을 의미합니다.
Mitchell Ingram

한편, extent적절한 문서화 된 기능이되었습니다 : openlayers.org/en/latest/apidoc/module-ol_View-View.html (작성 당시 "최신"= v5.3.0)
Christallkeks

3

다른 옵션은 다음과 같습니다.

...
var map = new ol.Map({
          layers: [...],
          overlays: [...],
          target: document.getElementById('map'),
          view: new ol.View({
             center: ol.proj.transform([minx,miny,maxx,maxy], 
                     'EPSG:4326', 'EPSG:3857'),
             zoom: ...,    
             maxZoom: ..., 
             minZoom: ..., 
             extent: ol.proj.transform([minx-n,miny-n,maxx+n,maxy+n], 
                     'EPSG:4326', 'EPSG:3857')
             })
        });
...

1

Ragnagord가 이미 지적했듯이에를 설정해야 extent합니다 ol.view.

가장 쉬운 방법을 참조하려는 것에 따라 함수를 사용 하여 원하는 투영 ( ol.proj.Projection) 또는 레이어 (모든 클래스) 에서 직접 범위를 얻는 ol.layer것이 getExtent()있습니다. EPSG : 3857의 경우 다음과 같이 작동합니다.

var map = new ol.Map({
    ...
    view: new ol.View({
        ...
        extent: ol.proj.get("EPSG:3857").getExtent()
  })
});

1

WGS84와 Spherical Mercator 사이에지도 투영법을 고려할 경우 지적해야 할 점이 ol.proj.transformExtent있습니다. 여기에 답변이 있습니다 . 범위는 다음과 같이 지정됩니다.

var map = new ol.Map({
   .
   .
   .
   view: new ol.View({
        extent:  ol.proj.transformExtent([minx, miny, maxx, maxy], 'EPSG:4326', 'EPSG:3857');
         .
         .
         .
        )}
)}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.