Openlayers 3 Max Extent

15

Я хочу ограничить область, в которой пользователь может выполнять панорамирование на карте, но я не могу найти никаких ресурсов, которые бы указывали, как установить максимальный экстент вида карты в OpenLayers 3. Я знаю, что в OpenLayers 2 было решение. это возможно в новой версии?

CaitlinW
источник

Ответы:

18

Это можно просто сделать, определив extentобъект View. например

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
источник
Но в openlayers.org/en/v3.0.0/apidoc/ol.View.html такой опции нет
Дэвидд
Многое не документировано или не экспериментально и видимо только тогда, когда стабильная не проверена
CJStuart
4
Это не настоящая степень. Он просто держит экстенты в пределах видимости, а это означает, что вокруг экстента есть уродливое белое пространство.
Митчелл Ингрэм
Между тем, extentстала надлежащей документированной функцией: openlayers.org/en/latest/apidoc/module-ol_View-View.html (на момент написания "latest" = 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')
             })
        });
...
URI
источник
1

Как Рагнагорд уже указывал, необходимо установить 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()
  })
});
Lars
источник
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');
         .
         .
         .
        )}
)}
Деян П.
источник