Openlayers 3 Max Extensión

15

Quiero restringir dónde puede desplazarse el usuario en el mapa, pero parece que no puedo encontrar ningún recurso que indique cómo establecer la extensión máxima de una vista de mapa en OpenLayers 3. Sé que hubo una solución en OpenLayers 2. Es Es posible en la nueva versión?

CaitlinW
fuente

Respuestas:

18

Esto se puede hacer simplemente definiendo extenten el objeto Ver. p.ej

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
fuente
Pero en openlayers.org/en/v3.0.0/apidoc/ol.View.html no existe esa opción
Daviddd
Mucho no está documentado, o es experimental y solo es visible cuando no se verifica la
estabilidad
44
Esto no es una medida real. Simplemente mantiene las extensiones a la vista, lo que significa que hay un espacio en blanco feo alrededor de la extensión.
Mitchell Ingram
Mientras tanto, se extentha convertido en una característica documentada adecuada: openlayers.org/en/latest/apidoc/module-ol_View-View.html (al momento de escribir, "latest" = v5.3.0)
Christallkeks
3

Otra opción es:

...
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
fuente
1

Como Ragnagord ya señaló, es necesario configurarlo extenten su ol.view.

Dependiendo de lo que quiera referirse, la forma más fácil es obtener la extensión directamente de su proyección deseada ( ol.proj.Projection) o capa (cualquier clase de ol.layer) usando la getExtent()función. En el caso de EPSG: 3857 esto funciona:

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

Tengo que señalar si consideramos la proyección del mapa, en mi caso entre WGS84 y Spherical Mercator, hay una alternativa con ol.proj.transformExtent. Aquí se encontró una respuesta . La extensión se asigna de la siguiente manera:

var map = new ol.Map({
   .
   .
   .
   view: new ol.View({
        extent:  ol.proj.transformExtent([minx, miny, maxx, maxy], 'EPSG:4326', 'EPSG:3857');
         .
         .
         .
        )}
)}
Dejan P.
fuente