Openlayers 3 Max Extent

15

Chcę ograniczyć miejsce, w którym użytkownik może przesuwać mapę, ale wydaje się, że nie mogę znaleźć żadnych zasobów, które mówią, jak ustawić maksymalny zasięg widoku mapy w OpenLayers 3. Wiem, że było rozwiązanie w OpenLayers 2. Jest jest to możliwe w nowej wersji?

CaitlinW
źródło

Odpowiedzi:

18

Można to zrobić po prostu poprzez zdefiniowanie extentw obiekcie View. na przykład

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
źródło
Ale w openlayers.org/en/v3.0.0/apidoc/ol.View.html nie ma takiej opcji
Daviddd
Wiele nie jest udokumentowane ani eksperymentalne i jest widoczne tylko wtedy, gdy stabilność nie jest sprawdzana
CJStuart
4
To nie jest prawdziwy zakres. Po prostu utrzymuje zakresy w polu widzenia, co oznacza, że ​​wokół jest rozległa brzydka biała przestrzeń.
Mitchell Ingram,
Tymczasem extentstała się odpowiednią udokumentowaną funkcją: openlayers.org/en/latest/apidoc/module-ol_View-View.html (na piśmie, „najnowsze” = v5.3.0)
Christallkeks
3

Inną opcją jest:

...
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
źródło
1

Jak już wskazał Ragnagord, konieczne jest ustawienie extentw swoim ol.view.

W zależności od tego, co chcesz odnieść, najłatwiej jest uzyskać zasięg bezpośrednio z żądanej projekcji ( ol.proj.Projection) lub warstwy (dowolnej klasy ol.layer) za pomocą getExtent()funkcji. W przypadku EPSG: 3857 działa to:

var map = new ol.Map({
    ...
    view: new ol.View({
        ...
        extent: ol.proj.get("EPSG:3857").getExtent()
  })
});
Lars
źródło
1

Muszę wskazać, jeśli weźmiemy pod uwagę rzut mapy, w moim przypadku między WGS84 a Spherical Mercator istnieje alternatywa ol.proj.transformExtent. Odpowiedź znaleziono tutaj . Zakres jest przypisywany w następujący sposób:

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