Show/hide layers depending on current view resolution.
Zoom in twice: the MapBox layer should hide and the OSM layer should be shown.
If you continue to zoom in, you'll see the OSM layer also disappear.
The rendering of the layers are here controlled using minResolution and maxResolution options.
import 'ol/ol.css';
import Map from 'ol/Map';
import OSM from 'ol/source/OSM';
import TileJSON from 'ol/source/TileJSON';
import TileLayer from 'ol/layer/Tile';
import View from 'ol/View';
const key =
'Your Mapbox access token from https://mapbox.com/ here';
/**
* Create the map.
*/
const map = new Map({
layers: [
new TileLayer({
source: new OSM(),
minResolution: 200,
maxResolution: 2000,
}),
new TileLayer({
source: new TileJSON({
url:
'https://api.tiles.mapbox.com/v4/mapbox.natural-earth-hypso-bathy.json?secure&access_token=' +
key,
crossOrigin: 'anonymous',
}),
minResolution: 2000,
maxResolution: 20000,
}),
],
target: 'map',
view: new View({
center: [653600, 5723680],
zoom: 5,
}),
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Layer Min/Max Resolution</title>
<!-- Pointer events polyfill for old browsers, see https://caniuse.com/#feat=pointer -->
<script src="https://unpkg.com/elm-pep@1.0.6/dist/elm-pep.js"></script>
<!-- The lines below are only needed for old environments like Internet Explorer and Android 4.x -->
<script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,TextDecoder"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/3.18.3/minified.js"></script>
<style>
.map {
width: 100%;
height:400px;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script src="main.js"></script>
</body>
</html>
{
"name": "min-max-resolution",
"dependencies": {
"ol": "6.13.1-dev"
},
"devDependencies": {
"parcel": "^2.0.0"
},
"scripts": {
"start": "parcel index.html",
"build": "parcel build --public-url . index.html"
}
}