Add new className property to ol/layer/Base
This commit is contained in:
3
examples/semi-transparent-layer.css
Normal file
3
examples/semi-transparent-layer.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.bw {
|
||||||
|
filter: grayscale(100%);
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@ layout: example.html
|
|||||||
title: Semi-Transparent Layer
|
title: Semi-Transparent Layer
|
||||||
shortdesc: Example of a map with a semi-transparent layer.
|
shortdesc: Example of a map with a semi-transparent layer.
|
||||||
docs: >
|
docs: >
|
||||||
This example will display a tiled MaxBox layer semi-transparently over an OSM background.
|
This example will display a tiled MaxBox layer semi-transparently over an OSM background. The OSM layer is changed to back and white by using a CSS filter.
|
||||||
tags: "transparent, osm, tilejson"
|
tags: "transparent, osm, tilejson"
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import TileJSON from '../src/ol/source/TileJSON.js';
|
|||||||
const map = new Map({
|
const map = new Map({
|
||||||
layers: [
|
layers: [
|
||||||
new TileLayer({
|
new TileLayer({
|
||||||
|
className: 'bw',
|
||||||
source: new OSM()
|
source: new OSM()
|
||||||
}),
|
}),
|
||||||
new TileLayer({
|
new TileLayer({
|
||||||
|
|||||||
BIN
rendering/cases/linestring-style-css-filter/expected.png
Normal file
BIN
rendering/cases/linestring-style-css-filter/expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
25
rendering/cases/linestring-style-css-filter/index.html
Normal file
25
rendering/cases/linestring-style-css-filter/index.html
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#map {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.bw {
|
||||||
|
filter: grayscale(100%);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="map"></div>
|
||||||
|
<script src="main.js"></script>
|
||||||
|
</body>
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
70
rendering/cases/linestring-style-css-filter/main.js
Normal file
70
rendering/cases/linestring-style-css-filter/main.js
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import Map from '../../../src/ol/CompositeMap.js';
|
||||||
|
import View from '../../../src/ol/View.js';
|
||||||
|
import Feature from '../../../src/ol/Feature.js';
|
||||||
|
import LineString from '../../../src/ol/geom/LineString.js';
|
||||||
|
import VectorLayer from '../../../src/ol/layer/Vector.js';
|
||||||
|
import VectorSource from '../../../src/ol/source/Vector.js';
|
||||||
|
import Style from '../../../src/ol/style/Style.js';
|
||||||
|
import Stroke from '../../../src/ol/style/Stroke.js';
|
||||||
|
|
||||||
|
|
||||||
|
const vectorSource = new VectorSource();
|
||||||
|
let feature;
|
||||||
|
|
||||||
|
feature = new Feature({
|
||||||
|
geometry: new LineString([[-60, 60], [45, 60]])
|
||||||
|
});
|
||||||
|
vectorSource.addFeature(feature);
|
||||||
|
|
||||||
|
feature = new Feature({
|
||||||
|
geometry: new LineString([[-60, -50], [30, 10]])
|
||||||
|
});
|
||||||
|
feature.setStyle(new Style({
|
||||||
|
stroke: new Stroke({color: '#f00', width: 3})
|
||||||
|
}));
|
||||||
|
vectorSource.addFeature(feature);
|
||||||
|
|
||||||
|
feature = new Feature({
|
||||||
|
geometry: new LineString([[-110, -100], [0, 100], [100, -90]])
|
||||||
|
});
|
||||||
|
feature.setStyle(new Style({
|
||||||
|
stroke: new Stroke({
|
||||||
|
color: 'rgba(55, 55, 55, 0.75)',
|
||||||
|
width: 5,
|
||||||
|
lineCap: 'square',
|
||||||
|
lineDash: [4, 8],
|
||||||
|
lineJoin: 'round'
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
vectorSource.addFeature(feature);
|
||||||
|
|
||||||
|
feature = new Feature({
|
||||||
|
geometry: new LineString([[-80, 80], [80, 80], [-40, -90]])
|
||||||
|
});
|
||||||
|
feature.setStyle([
|
||||||
|
new Style({
|
||||||
|
stroke: new Stroke({color: '#F2F211', width: 5})
|
||||||
|
}),
|
||||||
|
new Style({
|
||||||
|
stroke: new Stroke({color: '#292921', width: 1})
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
vectorSource.addFeature(feature);
|
||||||
|
|
||||||
|
|
||||||
|
new Map({
|
||||||
|
pixelRatio: 1,
|
||||||
|
layers: [
|
||||||
|
new VectorLayer({
|
||||||
|
className: 'bw',
|
||||||
|
source: vectorSource
|
||||||
|
})
|
||||||
|
],
|
||||||
|
target: 'map',
|
||||||
|
view: new View({
|
||||||
|
center: [0, 0],
|
||||||
|
resolution: 1
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
render();
|
||||||
@@ -10,6 +10,7 @@ import {assign} from '../obj.js';
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} Options
|
* @typedef {Object} Options
|
||||||
|
* @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
|
||||||
* @property {number} [opacity=1] Opacity (0, 1).
|
* @property {number} [opacity=1] Opacity (0, 1).
|
||||||
* @property {boolean} [visible=true] Visibility.
|
* @property {boolean} [visible=true] Visibility.
|
||||||
* @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering. The layer will not be
|
* @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering. The layer will not be
|
||||||
@@ -57,6 +58,13 @@ class BaseLayer extends BaseObject {
|
|||||||
properties[LayerProperty.MIN_RESOLUTION] =
|
properties[LayerProperty.MIN_RESOLUTION] =
|
||||||
options.minResolution !== undefined ? options.minResolution : 0;
|
options.minResolution !== undefined ? options.minResolution : 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {string}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.className_ = properties.className !== undefined ? options.className : 'ol-layer';
|
||||||
|
delete properties.className;
|
||||||
|
|
||||||
this.setProperties(properties);
|
this.setProperties(properties);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,6 +75,13 @@ class BaseLayer extends BaseObject {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {string} CSS class name.
|
||||||
|
*/
|
||||||
|
getClassName() {
|
||||||
|
return this.className_;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {import("./Layer.js").State} Layer state.
|
* @return {import("./Layer.js").State} Layer state.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ class IntermediateCanvasRenderer extends CanvasLayerRenderer {
|
|||||||
* @type {CanvasRenderingContext2D}
|
* @type {CanvasRenderingContext2D}
|
||||||
*/
|
*/
|
||||||
this.layerContext = createCanvasContext2D();
|
this.layerContext = createCanvasContext2D();
|
||||||
this.layerContext.canvas.style.position = 'absolute';
|
|
||||||
|
const canvas = this.layerContext.canvas;
|
||||||
|
canvas.style.position = 'absolute';
|
||||||
|
canvas.className = this.getLayer().getClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
|
|||||||
|
|
||||||
const canvas = this.context.canvas;
|
const canvas = this.context.canvas;
|
||||||
canvas.style.position = 'absolute';
|
canvas.style.position = 'absolute';
|
||||||
|
canvas.className = this.getLayer().getClassName();
|
||||||
|
|
||||||
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
|
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user