Openlayers 3 Max Extent


15

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

Ответы:


18

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

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 такой опции нет
Дэвидд

Многое не документировано или не экспериментально и видимо только тогда, когда стабильная не проверена
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')
             })
        });
...

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()
  })
});

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');
         .
         .
         .
        )}
)}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.