Openlayers 3 Max Extent

15

Je veux restreindre où l'utilisateur peut effectuer un panoramique sur la carte, mais je n'arrive pas à trouver de ressources qui indiquent comment définir l'étendue maximale d'une vue de carte dans OpenLayers 3. Je sais qu'il y avait une solution dans OpenLayers 2. Est -il possible dans la nouvelle version?

CaitlinW
la source

Réponses:

18

Cela peut simplement être fait en définissant extentdans l'objet View. par exemple

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
la source
Mais dans openlayers.org/en/v3.0.0/apidoc/ol.View.html il n'y a pas une telle option
Daviddd
Beaucoup n'est pas documenté ou expérimental et n'est visible que lorsque l'écurie n'est pas vérifiée
CJStuart
4
Ce n'est pas une étendue réelle. Il garde simplement les étendues à portée de vue, ce qui signifie qu'il y a un espace blanc laid tout autour de l'étendue.
Mitchell Ingram
Pendant ce temps, extentest devenu une fonctionnalité documentée appropriée: openlayers.org/en/latest/apidoc/module-ol_View-View.html (au moment de la rédaction, "latest" = v5.3.0)
Christallkeks
3

Une autre option est:

...
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
la source
1

Comme Ragnagord l'a déjà souligné, il est nécessaire de définir le extentdans votre ol.view.

Selon ce que vous voulez faire référence, la manière la plus simple consiste à obtenir l'étendue directement à partir de la projection ( ol.proj.Projection) ou du calque (n'importe quelle classe ol.layer) souhaité à l'aide de la getExtent()fonction. En cas d'EPSG: 3857, cela fonctionne:

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

Je dois souligner que si nous considérons la projection cartographique, dans mon cas entre WGS84 et Spherical Mercator, il existe une alternative avec ol.proj.transformExtent. Une réponse a été trouvée ici . L'étendue est affectée comme suit:

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