Openlayers 3 Max Extent

15

Ich möchte einschränken, wo der Benutzer auf der Karte schwenken kann, aber ich kann anscheinend keine Ressourcen finden, die angeben, wie der maximale Umfang einer Kartenansicht in OpenLayers 3 festgelegt werden soll. Ich weiß, dass OpenLayers 2 eine Lösung bietet ist das in der neuen version möglich?

CaitlinW
quelle

Antworten:

18

Dies kann einfach durch Definieren extentim View-Objekt erfolgen. z.B

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
quelle
Aber in openlayers.org/de/v3.0.0/apidoc/ol.View.html gibt es keine solche Option
Daviddd
Eine Menge ist nicht dokumentiert oder experimentell und nur sichtbar, wenn die Stabilität nicht überprüft wird
CJStuart
4
Dies ist kein reales Ausmaß. Es behält nur die Ausmaße im Blick, was bedeutet, dass es überall hässliche weiße Flächen gibt.
Mitchell Ingram
Mittlerweile extentist es ein richtig dokumentiertes Feature geworden: openlayers.org/en/latest/apidoc/module-ol_View-View.html (Stand: "latest" = v5.3.0)
Christallkeks
3

Eine andere Option ist:

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

Wie Ragnagord bereits betont hat, ist es notwendig, die extentin Ihrem ol.view.

Je nachdem, worauf Sie sich beziehen möchten, ist es am einfachsten, die Ausdehnung mithilfe der Funktion direkt von Ihrer gewünschten Projektion ( ol.proj.Projection) oder Ebene (einer beliebigen Klasse von ol.layer) abzurufen getExtent(). Im Falle von EPSG: 3857 funktioniert dies:

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

Ich muss darauf hinweisen, wenn wir die Kartenprojektion berücksichtigen, in meinem Fall zwischen WGS84 und Spherical Mercator gibt es eine Alternative mit ol.proj.transformExtent. Eine Antwort wurde hier gefunden . Der Umfang wird wie folgt zugewiesen:

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