Openlayers 3 Max Extent


15

Voglio limitare la posizione in cui l'utente può eseguire la panoramica sulla mappa, ma non riesco a trovare alcuna risorsa che indichi come impostare l'estensione massima di una visualizzazione della mappa in OpenLayers 3. So che esisteva una soluzione in OpenLayers 2. È è possibile nella nuova versione?

Risposte:


18

Questo può essere fatto semplicemente definendo extentl'oggetto View. per esempio

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});


Molto non è documentato, o sperimentale e visibile solo quando stabile non è controllato
CJStuart

4
Questa non è una misura reale. Mantiene solo le estensioni alla vista, il che significa che c'è un brutto spazio bianco tutt'intorno.
Mitchell Ingram,

Nel frattempo, extentè diventata un'apposita funzione documentata: openlayers.org/en/latest/apidoc/module-ol_View-View.html (al momento della scrittura, "latest" = v5.3.0)
Christallkeks

3

Un'altra opzione è:

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

Come Ragnagord ha già sottolineato, è necessario impostare il valore extentnel tuo ol.view.

A seconda di ciò a cui si desidera fare riferimento, il modo più semplice è quello di ottenere l'estensione direttamente dalla proiezione desiderata ( ol.proj.Projection) o dal livello (qualsiasi classe di ol.layer) utilizzando la getExtent()funzione. In caso di EPSG: 3857 funziona:

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

1

Devo sottolineare che se consideriamo la proiezione cartografica, nel mio caso tra WGS84 e Spherical Mercator, esiste un'alternativa ol.proj.transformExtent. Una risposta è stata trovata qui . L'estensione è assegnata come segue:

var map = new ol.Map({
   .
   .
   .
   view: new ol.View({
        extent:  ol.proj.transformExtent([minx, miny, maxx, maxy], 'EPSG:4326', 'EPSG:3857');
         .
         .
         .
        )}
)}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.