Openlayers 3最大范围


15

我想限制用户可以在地图上平移的位置,但是我似乎找不到任何资源来说明如何在OpenLayers 3中设置地图视图的最大范围。我知道OpenLayers 2中有一个解决方案。有可能在新版本中?

Answers:


18

只需extent在View对象中定义即可。例如

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


很多没有记录,也没有实验性的,只有在未选中稳定状态时才可见
CJStuart 2014年

4
这不是一个真正的范围。它只是将范围保持在可见范围内,这意味着范围周围到处都是丑陋的空白。
米切尔·英格拉姆

同时,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');
         .
         .
         .
        )}
)}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.