Openlayers 3 Max Extent

15

Saya ingin membatasi di mana pengguna dapat menggeser peta, tapi sepertinya saya tidak dapat menemukan sumber daya apa pun yang memberi tahu cara mengatur batas maksimal tampilan peta di OpenLayers 3. Saya tahu ada solusi di OpenLayers 2. Apakah mungkin di versi baru?

CaitlinW
sumber

Jawaban:

18

Ini bisa dilakukan dengan mendefinisikan extentdalam objek View. misalnya

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});
CJStuart
sumber
Tetapi dalam openlayers.org/en/v3.0.0/apidoc/ol.View.html tidak ada opsi seperti itu
Daviddd
Banyak yang tidak didokumentasikan, atau eksperimental dan hanya terlihat ketika stabil tidak dicentang
CJStuart
4
Ini bukan tingkat nyata. Itu hanya membuat luasan dalam tampilan, yang berarti ada ruang putih yang buruk di sekitar luasnya.
Mitchell Ingram
Sementara itu, extenttelah menjadi fitur terdokumentasi yang tepat: openlayers.org/en/latest/apidoc/module-ol_View-View.html (pada saat penulisan, "terbaru" = v5.3.0)
Christallkeks
3

Pilihan lain adalah:

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

Seperti yang Ragnagord sudah tunjukkan, Anda perlu mengaturnya extentdi ol.view.

Bergantung pada apa yang ingin Anda rujuk ke cara termudah adalah untuk mendapatkan jangkauan langsung dari proyeksi yang Anda inginkan ( ol.proj.Projection) atau layer (kelas apa saja ol.layer) menggunakan getExtent()fungsi. Dalam hal EPSG: 3857 ini berfungsi:

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

Saya harus menunjukkan jika kita mempertimbangkan proyeksi peta, dalam kasus saya antara WGS84 dan Spherical Mercator, ada alternatif dengan ol.proj.transformExtent. Sebuah jawaban ditemukan di sini . Luas ditetapkan sebagai berikut:

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