Add example of resetting a layer style
This commit is contained in:
20
examples/cog-style.html
Normal file
20
examples/cog-style.html
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Change Tile Layer Style
|
||||||
|
shortdesc: Updating the style of a WebGL tile layer
|
||||||
|
docs: >
|
||||||
|
When you want to change the style of a WebGL tile layer based on some change in your
|
||||||
|
application state, you should use the `layer.updateStyleVariables()` method. A layer can
|
||||||
|
be efficiently rendered even if style variables are changed on every render frame.
|
||||||
|
In cases where you need to completely replace the style of a layer, you can call the
|
||||||
|
`layer.setStyle()` method. This method should not be called in response to frequent
|
||||||
|
user events (e.g. mouse movement, dragging a slider, etc.).
|
||||||
|
tags: "cog, webgl, style"
|
||||||
|
---
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
Set the layer style
|
||||||
|
<select id="style">
|
||||||
|
<option value="trueColor">True Color</option>
|
||||||
|
<option value="falseColor">False Color</option>
|
||||||
|
<option value="ndvi">NDVI</option>
|
||||||
|
</select>
|
||||||
105
examples/cog-style.js
Normal file
105
examples/cog-style.js
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
import GeoTIFF from '../src/ol/source/GeoTIFF.js';
|
||||||
|
import Map from '../src/ol/Map.js';
|
||||||
|
import TileLayer from '../src/ol/layer/WebGLTile.js';
|
||||||
|
import View from '../src/ol/View.js';
|
||||||
|
|
||||||
|
const max = 3000;
|
||||||
|
function normalize(value) {
|
||||||
|
return ['/', value, max];
|
||||||
|
}
|
||||||
|
|
||||||
|
const red = normalize(['band', 1]);
|
||||||
|
const green = normalize(['band', 2]);
|
||||||
|
const blue = normalize(['band', 3]);
|
||||||
|
const nir = normalize(['band', 4]);
|
||||||
|
|
||||||
|
const trueColor = {
|
||||||
|
color: ['array', red, green, blue, 1],
|
||||||
|
gamma: 1.1,
|
||||||
|
};
|
||||||
|
|
||||||
|
const falseColor = {
|
||||||
|
color: ['array', nir, red, green, 1],
|
||||||
|
gamma: 1.1,
|
||||||
|
};
|
||||||
|
|
||||||
|
const ndvi = {
|
||||||
|
color: [
|
||||||
|
'interpolate',
|
||||||
|
['linear'],
|
||||||
|
['/', ['-', nir, red], ['+', nir, red]],
|
||||||
|
// color ramp for NDVI values, ranging from -1 to 1
|
||||||
|
-0.2,
|
||||||
|
[191, 191, 191],
|
||||||
|
-0.1,
|
||||||
|
[219, 219, 219],
|
||||||
|
0,
|
||||||
|
[255, 255, 224],
|
||||||
|
0.025,
|
||||||
|
[255, 250, 204],
|
||||||
|
0.05,
|
||||||
|
[237, 232, 181],
|
||||||
|
0.075,
|
||||||
|
[222, 217, 156],
|
||||||
|
0.1,
|
||||||
|
[204, 199, 130],
|
||||||
|
0.125,
|
||||||
|
[189, 184, 107],
|
||||||
|
0.15,
|
||||||
|
[176, 194, 97],
|
||||||
|
0.175,
|
||||||
|
[163, 204, 89],
|
||||||
|
0.2,
|
||||||
|
[145, 191, 82],
|
||||||
|
0.25,
|
||||||
|
[128, 179, 71],
|
||||||
|
0.3,
|
||||||
|
[112, 163, 64],
|
||||||
|
0.35,
|
||||||
|
[97, 150, 54],
|
||||||
|
0.4,
|
||||||
|
[79, 138, 46],
|
||||||
|
0.45,
|
||||||
|
[64, 125, 36],
|
||||||
|
0.5,
|
||||||
|
[48, 110, 28],
|
||||||
|
0.55,
|
||||||
|
[33, 97, 18],
|
||||||
|
0.6,
|
||||||
|
[15, 84, 10],
|
||||||
|
0.65,
|
||||||
|
[0, 69, 0],
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const layer = new TileLayer({
|
||||||
|
style: trueColor,
|
||||||
|
source: new GeoTIFF({
|
||||||
|
normalize: false,
|
||||||
|
sources: [
|
||||||
|
{
|
||||||
|
url: 'https://s2downloads.eox.at/demo/EOxCloudless/2020/rgbnir/s2cloudless2020-16bits_sinlge-file_z0-4.tif',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const map = new Map({
|
||||||
|
target: 'map',
|
||||||
|
layers: [layer],
|
||||||
|
view: new View({
|
||||||
|
projection: 'EPSG:4326',
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 2,
|
||||||
|
maxZoom: 6,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const styles = {trueColor, falseColor, ndvi};
|
||||||
|
const styleSelector = document.getElementById('style');
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
const style = styles[styleSelector.value];
|
||||||
|
layer.setStyle(style);
|
||||||
|
}
|
||||||
|
styleSelector.addEventListener('change', update);
|
||||||
Reference in New Issue
Block a user