Openlayers 3 Max Extent

15

Quero restringir onde o usuário pode se deslocar no mapa, mas não consigo encontrar recursos que definam a extensão máxima de uma visualização de mapa no OpenLayers 3. Sei que havia uma solução no OpenLayers 2. É possível na nova versão?

CaitlinW
fonte

Respostas:

18

Isso pode ser feito simplesmente definindo extentno objeto View. por exemplo

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
fonte
Mas, em openlayers.org/en/v3.0.0/apidoc/ol.View.html não existe tal opção
Daviddd
Um lote não está documentada, ou experimental e só visível quando estável não é verificado
CJStuart
4
Esta não é uma extensão real. Ele apenas mantém as extensões à vista, o que significa que há um espaço em branco feio em toda a extensão.
Mitchell Ingram
Enquanto isso, extenttornou-se um recurso adequado e documentado: openlayers.org/en/latest/apidoc/module-ol_View-View.html (até o momento em que escrevemos, "latest" = v5.3.0) #
Christallkeks
3

Outra opção é:

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

Como Ragnagord já apontou, é necessário definir o extentseu ol.view.

Dependendo do que você deseja consultar, a maneira mais fácil é obter a extensão diretamente da sua projeção ( ol.proj.Projection) ou camada (qualquer classe de ol.layer) desejada, usando a getExtent()função No caso do EPSG: 3857, isso funciona:

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

Devo salientar que se considerarmos a projeção do mapa, no meu caso entre WGS84 e Spherical Mercator, existe uma alternativa ol.proj.transformExtent. Uma resposta foi encontrada aqui . A extensão é atribuída da seguinte forma:

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