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?

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,
    ...
});

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')
             })
        });
...

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

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');
         .
         .
         .
        )}
)}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.