@deck.gl/carto 9.0.34 → 9.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/basemap.d.ts +2 -1
- package/dist/api/basemap.d.ts.map +1 -1
- package/dist/api/basemap.js +3 -0
- package/dist/api/fetch-map.d.ts.map +1 -1
- package/dist/api/fetch-map.js +9 -11
- package/dist/api/index.d.ts +1 -4
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -2
- package/dist/api/layer-map.d.ts.map +1 -1
- package/dist/api/layer-map.js +5 -2
- package/dist/api/parse-map.d.ts.map +1 -1
- package/dist/api/parse-map.js +3 -0
- package/dist/api/types.d.ts +0 -56
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js +4 -20
- package/dist/basemap.d.ts +2 -1
- package/dist/basemap.d.ts.map +1 -1
- package/dist/basemap.js +4 -1
- package/dist/cartoRasterTile-worker.js +25 -2
- package/dist/cartoSpatialTile-worker.js +28 -3
- package/dist/cartoVectorTile-worker.js +29 -3
- package/dist/constants.d.ts +0 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -3
- package/dist/dist.dev.js +4512 -3855
- package/dist/index.cjs +328 -630
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +29 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/layers/cluster-tile-layer.d.ts +1 -1
- package/dist/layers/cluster-tile-layer.d.ts.map +1 -1
- package/dist/layers/cluster-tile-layer.js +4 -0
- package/dist/layers/cluster-utils.d.ts.map +1 -1
- package/dist/layers/cluster-utils.js +3 -0
- package/dist/layers/h3-tile-layer.d.ts +4 -4
- package/dist/layers/h3-tile-layer.d.ts.map +1 -1
- package/dist/layers/h3-tile-layer.js +15 -14
- package/dist/layers/h3-tileset-2d.d.ts.map +1 -1
- package/dist/layers/h3-tileset-2d.js +3 -0
- package/dist/layers/heatmap-tile-layer.d.ts +12 -2
- package/dist/layers/heatmap-tile-layer.d.ts.map +1 -1
- package/dist/layers/heatmap-tile-layer.js +85 -9
- package/dist/layers/heatmap.d.ts +69 -22
- package/dist/layers/heatmap.d.ts.map +1 -1
- package/dist/layers/heatmap.js +86 -102
- package/dist/layers/point-label-layer.d.ts.map +1 -1
- package/dist/layers/point-label-layer.js +5 -2
- package/dist/layers/post-process-utils.d.ts.map +1 -1
- package/dist/layers/post-process-utils.js +9 -5
- package/dist/layers/quadbin-layer.d.ts.map +1 -1
- package/dist/layers/quadbin-layer.js +3 -0
- package/dist/layers/quadbin-tile-layer.d.ts +4 -4
- package/dist/layers/quadbin-tile-layer.d.ts.map +1 -1
- package/dist/layers/quadbin-tile-layer.js +13 -12
- package/dist/layers/quadbin-tileset-2d.d.ts.map +1 -1
- package/dist/layers/quadbin-tileset-2d.js +3 -0
- package/dist/layers/quadbin-utils.d.ts.map +1 -1
- package/dist/layers/quadbin-utils.js +3 -0
- package/dist/layers/raster-layer-vertex.glsl.d.ts +1 -1
- package/dist/layers/raster-layer-vertex.glsl.d.ts.map +1 -1
- package/dist/layers/raster-layer-vertex.glsl.js +20 -25
- package/dist/layers/raster-layer.d.ts +6 -6
- package/dist/layers/raster-layer.d.ts.map +1 -1
- package/dist/layers/raster-layer.js +6 -1
- package/dist/layers/raster-tile-layer.d.ts +1 -1
- package/dist/layers/raster-tile-layer.d.ts.map +1 -1
- package/dist/layers/raster-tile-layer.js +14 -13
- package/dist/layers/schema/carto-properties-tile-loader.d.ts.map +1 -1
- package/dist/layers/schema/carto-properties-tile-loader.js +3 -0
- package/dist/layers/schema/carto-properties-tile.d.ts.map +1 -1
- package/dist/layers/schema/carto-properties-tile.js +3 -0
- package/dist/layers/schema/carto-raster-tile-loader.d.ts.map +1 -1
- package/dist/layers/schema/carto-raster-tile-loader.js +4 -1
- package/dist/layers/schema/carto-raster-tile.d.ts.map +1 -1
- package/dist/layers/schema/carto-raster-tile.js +3 -0
- package/dist/layers/schema/carto-spatial-tile-loader.d.ts.map +1 -1
- package/dist/layers/schema/carto-spatial-tile-loader.js +4 -1
- package/dist/layers/schema/carto-spatial-tile.d.ts.map +1 -1
- package/dist/layers/schema/carto-spatial-tile.js +3 -0
- package/dist/layers/schema/carto-tile.d.ts.map +1 -1
- package/dist/layers/schema/carto-tile.js +3 -0
- package/dist/layers/schema/carto-vector-tile-loader.d.ts.map +1 -1
- package/dist/layers/schema/carto-vector-tile-loader.js +4 -1
- package/dist/layers/schema/fast-pbf.d.ts.map +1 -1
- package/dist/layers/schema/fast-pbf.js +3 -0
- package/dist/layers/schema/spatialjson-utils.d.ts.map +1 -1
- package/dist/layers/schema/spatialjson-utils.js +3 -0
- package/dist/layers/schema/tile-loader-utils.d.ts.map +1 -1
- package/dist/layers/schema/tile-loader-utils.js +3 -0
- package/dist/layers/spatial-index-tile-layer.d.ts.map +1 -1
- package/dist/layers/spatial-index-tile-layer.js +3 -0
- package/dist/layers/utils.d.ts +2 -2
- package/dist/layers/utils.d.ts.map +1 -1
- package/dist/layers/utils.js +3 -0
- package/dist/layers/vector-tile-layer.d.ts +1 -1
- package/dist/layers/vector-tile-layer.d.ts.map +1 -1
- package/dist/layers/vector-tile-layer.js +3 -0
- package/dist/style/color-bins-style.d.ts.map +1 -1
- package/dist/style/color-bins-style.js +3 -0
- package/dist/style/color-categories-style.d.ts.map +1 -1
- package/dist/style/color-categories-style.js +3 -0
- package/dist/style/color-continuous-style.d.ts.map +1 -1
- package/dist/style/color-continuous-style.js +3 -0
- package/dist/style/palette.d.ts.map +1 -1
- package/dist/style/palette.js +3 -0
- package/dist/style/utils.d.ts.map +1 -1
- package/dist/style/utils.js +3 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -0
- package/dist/workers/cartoRasterTile.js +3 -0
- package/dist/workers/cartoSpatialTile.js +3 -0
- package/dist/workers/cartoVectorTile.js +3 -0
- package/dist.min.js +115 -101
- package/package.json +13 -11
- package/src/api/basemap.ts +6 -1
- package/src/api/fetch-map.ts +23 -15
- package/src/api/index.ts +5 -13
- package/src/api/layer-map.ts +6 -2
- package/src/api/parse-map.ts +4 -0
- package/src/api/types.ts +4 -75
- package/src/basemap.ts +6 -2
- package/src/constants.ts +4 -4
- package/src/index.ts +28 -9
- package/src/layers/cluster-tile-layer.ts +6 -1
- package/src/layers/cluster-utils.ts +4 -0
- package/src/layers/h3-tile-layer.ts +18 -16
- package/src/layers/h3-tileset-2d.ts +4 -0
- package/src/layers/heatmap-tile-layer.ts +115 -11
- package/src/layers/heatmap.ts +41 -99
- package/src/layers/point-label-layer.ts +6 -2
- package/src/layers/post-process-utils.ts +10 -5
- package/src/layers/quadbin-layer.ts +4 -0
- package/src/layers/quadbin-tile-layer.ts +16 -14
- package/src/layers/quadbin-tileset-2d.ts +4 -0
- package/src/layers/quadbin-utils.ts +4 -0
- package/src/layers/raster-layer-vertex.glsl.ts +21 -27
- package/src/layers/raster-layer.ts +7 -1
- package/src/layers/raster-tile-layer.ts +16 -14
- package/src/layers/schema/carto-properties-tile-loader.ts +4 -0
- package/src/layers/schema/carto-properties-tile.ts +4 -0
- package/src/layers/schema/carto-raster-tile-loader.ts +4 -0
- package/src/layers/schema/carto-raster-tile.ts +4 -0
- package/src/layers/schema/carto-spatial-tile-loader.ts +4 -0
- package/src/layers/schema/carto-spatial-tile.ts +4 -0
- package/src/layers/schema/carto-tile.ts +4 -0
- package/src/layers/schema/carto-vector-tile-loader.ts +4 -0
- package/src/layers/schema/fast-pbf.ts +4 -0
- package/src/layers/schema/spatialjson-utils.ts +4 -0
- package/src/layers/schema/tile-loader-utils.ts +4 -0
- package/src/layers/spatial-index-tile-layer.ts +4 -0
- package/src/layers/utils.ts +5 -1
- package/src/layers/vector-tile-layer.ts +5 -1
- package/src/style/color-bins-style.ts +4 -0
- package/src/style/color-categories-style.ts +4 -0
- package/src/style/color-continuous-style.ts +4 -0
- package/src/style/palette.ts +4 -0
- package/src/style/utils.ts +4 -0
- package/src/utils.ts +4 -0
- package/src/workers/cartoRasterTile.ts +4 -0
- package/src/workers/cartoSpatialTile.ts +4 -0
- package/src/workers/cartoVectorTile.ts +4 -0
- package/dist/api/carto-api-error.d.ts +0 -19
- package/dist/api/carto-api-error.d.ts.map +0 -1
- package/dist/api/carto-api-error.js +0 -48
- package/dist/api/common.d.ts +0 -5
- package/dist/api/common.d.ts.map +0 -1
- package/dist/api/common.js +0 -5
- package/dist/api/endpoints.d.ts +0 -23
- package/dist/api/endpoints.d.ts.map +0 -1
- package/dist/api/endpoints.js +0 -22
- package/dist/api/query.d.ts +0 -4
- package/dist/api/query.d.ts.map +0 -1
- package/dist/api/query.js +0 -26
- package/dist/api/request-with-parameters.d.ts +0 -9
- package/dist/api/request-with-parameters.d.ts.map +0 -1
- package/dist/api/request-with-parameters.js +0 -86
- package/dist/sources/base-source.d.ts +0 -5
- package/dist/sources/base-source.d.ts.map +0 -1
- package/dist/sources/base-source.js +0 -60
- package/dist/sources/boundary-query-source.d.ts +0 -10
- package/dist/sources/boundary-query-source.d.ts.map +0 -1
- package/dist/sources/boundary-query-source.js +0 -18
- package/dist/sources/boundary-table-source.d.ts +0 -8
- package/dist/sources/boundary-table-source.d.ts.map +0 -1
- package/dist/sources/boundary-table-source.js +0 -15
- package/dist/sources/h3-query-source.d.ts +0 -4
- package/dist/sources/h3-query-source.d.ts.map +0 -1
- package/dist/sources/h3-query-source.js +0 -22
- package/dist/sources/h3-table-source.d.ts +0 -4
- package/dist/sources/h3-table-source.d.ts.map +0 -1
- package/dist/sources/h3-table-source.js +0 -19
- package/dist/sources/h3-tileset-source.d.ts +0 -4
- package/dist/sources/h3-tileset-source.d.ts.map +0 -1
- package/dist/sources/h3-tileset-source.js +0 -6
- package/dist/sources/index.d.ts +0 -28
- package/dist/sources/index.d.ts.map +0 -1
- package/dist/sources/index.js +0 -13
- package/dist/sources/quadbin-query-source.d.ts +0 -4
- package/dist/sources/quadbin-query-source.d.ts.map +0 -1
- package/dist/sources/quadbin-query-source.js +0 -22
- package/dist/sources/quadbin-table-source.d.ts +0 -4
- package/dist/sources/quadbin-table-source.d.ts.map +0 -1
- package/dist/sources/quadbin-table-source.js +0 -19
- package/dist/sources/quadbin-tileset-source.d.ts +0 -4
- package/dist/sources/quadbin-tileset-source.d.ts.map +0 -1
- package/dist/sources/quadbin-tileset-source.js +0 -6
- package/dist/sources/raster-source.d.ts +0 -4
- package/dist/sources/raster-source.d.ts.map +0 -1
- package/dist/sources/raster-source.js +0 -9
- package/dist/sources/types.d.ts +0 -219
- package/dist/sources/types.d.ts.map +0 -1
- package/dist/sources/types.js +0 -1
- package/dist/sources/vector-query-source.d.ts +0 -4
- package/dist/sources/vector-query-source.d.ts.map +0 -1
- package/dist/sources/vector-query-source.js +0 -22
- package/dist/sources/vector-table-source.d.ts +0 -4
- package/dist/sources/vector-table-source.d.ts.map +0 -1
- package/dist/sources/vector-table-source.js +0 -19
- package/dist/sources/vector-tileset-source.d.ts +0 -4
- package/dist/sources/vector-tileset-source.d.ts.map +0 -1
- package/dist/sources/vector-tileset-source.js +0 -6
- package/src/api/carto-api-error.ts +0 -68
- package/src/api/common.ts +0 -6
- package/src/api/endpoints.ts +0 -69
- package/src/api/query.ts +0 -42
- package/src/api/request-with-parameters.ts +0 -117
- package/src/sources/base-source.ts +0 -79
- package/src/sources/boundary-query-source.ts +0 -39
- package/src/sources/boundary-table-source.ts +0 -33
- package/src/sources/h3-query-source.ts +0 -55
- package/src/sources/h3-table-source.ts +0 -51
- package/src/sources/h3-tileset-source.ts +0 -14
- package/src/sources/index.ts +0 -45
- package/src/sources/quadbin-query-source.ts +0 -56
- package/src/sources/quadbin-table-source.ts +0 -52
- package/src/sources/quadbin-tileset-source.ts +0 -14
- package/src/sources/raster-source.ts +0 -17
- package/src/sources/types.ts +0 -231
- package/src/sources/vector-query-source.ts +0 -57
- package/src/sources/vector-table-source.ts +0 -51
- package/src/sources/vector-tileset-source.ts +0 -14
|
@@ -1,15 +1,48 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {ShaderModule} from '@luma.gl/shadertools';
|
|
1
6
|
import {getResolution} from 'quadbin';
|
|
2
7
|
|
|
3
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
Accessor,
|
|
10
|
+
Color,
|
|
11
|
+
CompositeLayer,
|
|
12
|
+
CompositeLayerProps,
|
|
13
|
+
DefaultProps,
|
|
14
|
+
Layer,
|
|
15
|
+
UpdateParameters
|
|
16
|
+
} from '@deck.gl/core';
|
|
4
17
|
import {SolidPolygonLayer} from '@deck.gl/layers';
|
|
5
18
|
|
|
6
19
|
import {HeatmapProps, heatmap} from './heatmap';
|
|
7
20
|
import {RTTModifier, PostProcessModifier} from './post-process-utils';
|
|
8
21
|
import QuadbinTileLayer, {QuadbinTileLayerProps} from './quadbin-tile-layer';
|
|
9
22
|
import {TilejsonPropType} from './utils';
|
|
10
|
-
import {TilejsonResult} from '
|
|
23
|
+
import {TilejsonResult} from '@carto/api-client';
|
|
11
24
|
import {_Tile2DHeader as Tile2DHeader} from '@deck.gl/geo-layers';
|
|
25
|
+
import {Texture, TextureProps} from '@luma.gl/core';
|
|
26
|
+
|
|
27
|
+
const defaultColorRange: Color[] = [
|
|
28
|
+
[255, 255, 178],
|
|
29
|
+
[254, 217, 118],
|
|
30
|
+
[254, 178, 76],
|
|
31
|
+
[253, 141, 60],
|
|
32
|
+
[240, 59, 32],
|
|
33
|
+
[189, 0, 38]
|
|
34
|
+
];
|
|
12
35
|
|
|
36
|
+
const TEXTURE_PROPS: TextureProps = {
|
|
37
|
+
format: 'rgba8unorm',
|
|
38
|
+
mipmaps: false,
|
|
39
|
+
sampler: {
|
|
40
|
+
minFilter: 'linear',
|
|
41
|
+
magFilter: 'linear',
|
|
42
|
+
addressModeU: 'clamp-to-edge',
|
|
43
|
+
addressModeV: 'clamp-to-edge'
|
|
44
|
+
}
|
|
45
|
+
};
|
|
13
46
|
/**
|
|
14
47
|
* Computes the unit density (inverse of cell area)
|
|
15
48
|
*/
|
|
@@ -18,6 +51,39 @@ function unitDensityForCell(cell: bigint) {
|
|
|
18
51
|
return Math.pow(4.0, cellResolution);
|
|
19
52
|
}
|
|
20
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Converts a colorRange array to a flat array with 4 components per color
|
|
56
|
+
*/
|
|
57
|
+
function colorRangeToFlatArray(colorRange: Color[]): Uint8Array {
|
|
58
|
+
const flatArray = new Uint8Array(colorRange.length * 4);
|
|
59
|
+
let index = 0;
|
|
60
|
+
|
|
61
|
+
for (let i = 0; i < colorRange.length; i++) {
|
|
62
|
+
const color = colorRange[i];
|
|
63
|
+
flatArray[index++] = color[0];
|
|
64
|
+
flatArray[index++] = color[1];
|
|
65
|
+
flatArray[index++] = color[2];
|
|
66
|
+
flatArray[index++] = Number.isFinite(color[3]) ? (color[3] as number) : 255;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return flatArray;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const uniformBlock = `\
|
|
73
|
+
uniform densityUniforms {
|
|
74
|
+
float factor;
|
|
75
|
+
} density;
|
|
76
|
+
`;
|
|
77
|
+
|
|
78
|
+
type DensityProps = {factor: number};
|
|
79
|
+
const densityUniforms = {
|
|
80
|
+
name: 'density',
|
|
81
|
+
vs: uniformBlock,
|
|
82
|
+
uniformTypes: {
|
|
83
|
+
factor: 'f32'
|
|
84
|
+
}
|
|
85
|
+
} as const satisfies ShaderModule<DensityProps>;
|
|
86
|
+
|
|
21
87
|
// Modified polygon layer to draw offscreen and output value expected by heatmap
|
|
22
88
|
class RTTSolidPolygonLayer extends RTTModifier(SolidPolygonLayer) {
|
|
23
89
|
static layerName = 'RTTSolidPolygonLayer';
|
|
@@ -25,16 +91,13 @@ class RTTSolidPolygonLayer extends RTTModifier(SolidPolygonLayer) {
|
|
|
25
91
|
getShaders(type) {
|
|
26
92
|
const shaders = super.getShaders(type);
|
|
27
93
|
shaders.inject = {
|
|
28
|
-
'vs:#decl': `
|
|
29
|
-
uniform float densityFactor;
|
|
30
|
-
`,
|
|
31
94
|
'vs:#main-end': `
|
|
32
95
|
// Value from getWeight accessor
|
|
33
96
|
float weight = elevations;
|
|
34
97
|
|
|
35
98
|
// Keep "power" delivered to screen constant when tiles update
|
|
36
|
-
// by outputting normalized density
|
|
37
|
-
weight *=
|
|
99
|
+
// by outputting normalized density
|
|
100
|
+
weight *= density.factor;
|
|
38
101
|
|
|
39
102
|
// Pack float into 3 channels to pass to heatmap shader
|
|
40
103
|
// SCALE value important, as we don't want to saturate
|
|
@@ -47,15 +110,18 @@ uniform float densityFactor;
|
|
|
47
110
|
vColor = vec4(mod(vec3(weight, floor(weight / SHIFT.yz)), 256.0), 255.0) / 255.0;
|
|
48
111
|
`
|
|
49
112
|
};
|
|
113
|
+
shaders.modules = [...shaders.modules, densityUniforms];
|
|
50
114
|
return shaders;
|
|
51
115
|
}
|
|
52
116
|
|
|
53
117
|
draw(this, opts: any) {
|
|
54
118
|
const cell = this.props!.data[0];
|
|
55
119
|
const maxDensity = this.props.elevationScale;
|
|
56
|
-
const
|
|
120
|
+
const densityProps: DensityProps = {
|
|
121
|
+
factor: unitDensityForCell(cell.id) / maxDensity
|
|
122
|
+
};
|
|
57
123
|
for (const model of this.state.models) {
|
|
58
|
-
model.
|
|
124
|
+
model.shaderInputs.setProps({density: densityProps});
|
|
59
125
|
}
|
|
60
126
|
|
|
61
127
|
super.draw(opts);
|
|
@@ -70,6 +136,7 @@ const defaultProps: DefaultProps<HeatmapTileLayerProps> = {
|
|
|
70
136
|
getWeight: {type: 'accessor', value: 1},
|
|
71
137
|
onMaxDensityChange: {type: 'function', optional: true, value: null},
|
|
72
138
|
colorDomain: {type: 'array', value: [0, 1]},
|
|
139
|
+
colorRange: defaultColorRange,
|
|
73
140
|
intensity: {type: 'number', value: 1},
|
|
74
141
|
radiusPixels: {type: 'number', min: 0, max: 100, value: 20}
|
|
75
142
|
};
|
|
@@ -83,6 +150,13 @@ export type HeatmapTileLayerProps<DataT = unknown> = _HeatmapTileLayerProps<Data
|
|
|
83
150
|
/** Properties added by HeatmapTileLayer. */
|
|
84
151
|
type _HeatmapTileLayerProps<DataT> = QuadbinTileLayerProps<DataT> &
|
|
85
152
|
HeatmapProps & {
|
|
153
|
+
/**
|
|
154
|
+
* Specified as an array of colors [color1, color2, ...].
|
|
155
|
+
*
|
|
156
|
+
* @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)
|
|
157
|
+
*/
|
|
158
|
+
colorRange: Color[];
|
|
159
|
+
|
|
86
160
|
/**
|
|
87
161
|
* The weight of each object.
|
|
88
162
|
*
|
|
@@ -101,6 +175,7 @@ class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends Composit
|
|
|
101
175
|
static defaultProps = defaultProps;
|
|
102
176
|
|
|
103
177
|
state!: {
|
|
178
|
+
colorTexture?: Texture;
|
|
104
179
|
isLoaded: boolean;
|
|
105
180
|
tiles: Set<Tile2DHeader>;
|
|
106
181
|
viewportChanged?: boolean;
|
|
@@ -119,12 +194,19 @@ class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends Composit
|
|
|
119
194
|
return changeFlags.somethingChanged;
|
|
120
195
|
}
|
|
121
196
|
|
|
197
|
+
updateState(opts: UpdateParameters<this>) {
|
|
198
|
+
const {props, oldProps} = opts;
|
|
199
|
+
super.updateState(opts);
|
|
200
|
+
if (props.colorRange !== oldProps.colorRange) {
|
|
201
|
+
this._updateColorTexture(opts);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
122
205
|
renderLayers(): Layer {
|
|
123
206
|
const {
|
|
124
207
|
data,
|
|
125
208
|
getWeight,
|
|
126
209
|
colorDomain,
|
|
127
|
-
colorRange,
|
|
128
210
|
intensity,
|
|
129
211
|
radiusPixels,
|
|
130
212
|
_subLayerProps,
|
|
@@ -183,12 +265,13 @@ class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends Composit
|
|
|
183
265
|
|
|
184
266
|
colorDomain,
|
|
185
267
|
|
|
186
|
-
colorRange,
|
|
187
268
|
radiusPixels,
|
|
188
269
|
intensity,
|
|
189
270
|
_subLayerProps: subLayerProps,
|
|
190
271
|
refinementStrategy: 'no-overlap',
|
|
191
272
|
|
|
273
|
+
colorTexture: this.state.colorTexture,
|
|
274
|
+
|
|
192
275
|
// Disable line rendering
|
|
193
276
|
extruded: false,
|
|
194
277
|
stroked: false,
|
|
@@ -231,6 +314,27 @@ class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends Composit
|
|
|
231
314
|
})
|
|
232
315
|
);
|
|
233
316
|
}
|
|
317
|
+
|
|
318
|
+
_updateColorTexture(opts) {
|
|
319
|
+
const {colorRange} = opts.props;
|
|
320
|
+
let {colorTexture} = this.state;
|
|
321
|
+
const colors = colorRangeToFlatArray(colorRange);
|
|
322
|
+
|
|
323
|
+
if (colorTexture && colorTexture?.width === colorRange.length) {
|
|
324
|
+
// TODO(v9): Unclear whether `setSubImageData` is a public API, or what to use if not.
|
|
325
|
+
(colorTexture as any).setSubImageData({data: colors});
|
|
326
|
+
} else {
|
|
327
|
+
colorTexture?.destroy();
|
|
328
|
+
// @ts-ignore TODO v9.1
|
|
329
|
+
colorTexture = this.context.device.createTexture({
|
|
330
|
+
...TEXTURE_PROPS,
|
|
331
|
+
data: colors,
|
|
332
|
+
width: colorRange.length,
|
|
333
|
+
height: 1
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
this.setState({colorTexture});
|
|
337
|
+
}
|
|
234
338
|
}
|
|
235
339
|
|
|
236
340
|
export default HeatmapTileLayer;
|
package/src/layers/heatmap.ts
CHANGED
|
@@ -1,54 +1,32 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import type {ShaderPass} from '@luma.gl/shadertools';
|
|
2
|
-
import {
|
|
3
|
-
const glsl = (s: TemplateStringsArray) => `${s}`;
|
|
6
|
+
import {Texture} from '@luma.gl/core';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* @filter Heatmap
|
|
7
10
|
* @param radiusPixels Blur radius in pixels, controls smoothness of heatmap
|
|
8
11
|
* @param colorDomain Domain to apply to values prior to applying color scale
|
|
9
|
-
* @param
|
|
12
|
+
* @param colorTexture 1D RGB lookup texture for color scale
|
|
13
|
+
* @param intensity Multiplier to apply to value
|
|
14
|
+
* @param opacity Output opacity
|
|
10
15
|
*/
|
|
11
16
|
|
|
12
|
-
const fs = glsl`\
|
|
17
|
+
const fs = /* glsl */ `\
|
|
13
18
|
uniform heatmapUniforms {
|
|
14
|
-
vec2 delta;
|
|
15
|
-
float radiusPixels;
|
|
16
19
|
vec2 colorDomain;
|
|
17
|
-
|
|
18
|
-
vec3 color2;
|
|
19
|
-
vec3 color3;
|
|
20
|
-
vec3 color4;
|
|
21
|
-
vec3 color5;
|
|
22
|
-
vec3 color6;
|
|
20
|
+
vec2 delta;
|
|
23
21
|
float intensity;
|
|
24
22
|
float opacity;
|
|
23
|
+
float radiusPixels;
|
|
25
24
|
} heatmap;
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
uniform sampler2D colorTexture;
|
|
28
27
|
|
|
29
28
|
vec3 colorGradient(float value) {
|
|
30
|
-
|
|
31
|
-
vec3 c2;
|
|
32
|
-
vec2 range;
|
|
33
|
-
if (value < STOPS.x) {
|
|
34
|
-
range = vec2(0.0, STOPS.x);
|
|
35
|
-
c1 = heatmap.color1; c2 = heatmap.color2;
|
|
36
|
-
} else if (value < STOPS.y) {
|
|
37
|
-
range = STOPS.xy;
|
|
38
|
-
c1 = heatmap.color2; c2 = heatmap.color3;
|
|
39
|
-
} else if (value < STOPS.z) {
|
|
40
|
-
range = STOPS.yz;
|
|
41
|
-
c1 = heatmap.color3; c2 = heatmap.color4;
|
|
42
|
-
} else if (value < STOPS.w) {
|
|
43
|
-
range = STOPS.zw;
|
|
44
|
-
c1 = heatmap.color4; c2 = heatmap.color5;
|
|
45
|
-
} else {
|
|
46
|
-
range = vec2(STOPS.w, 1.0);
|
|
47
|
-
c1 = heatmap.color5; c2 = heatmap.color6;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
float f = (clamp(value, 0.0, 1.0) - range.x) / (range.y - range.x);
|
|
51
|
-
return mix(c1, c2, f) / 255.0;
|
|
29
|
+
return texture(colorTexture, vec2(value, 0.5)).rgb;
|
|
52
30
|
}
|
|
53
31
|
|
|
54
32
|
const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
|
|
@@ -115,15 +93,6 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
115
93
|
}
|
|
116
94
|
`;
|
|
117
95
|
|
|
118
|
-
const defaultColorRange: Color[] = [
|
|
119
|
-
[255, 255, 178],
|
|
120
|
-
[254, 217, 118],
|
|
121
|
-
[254, 178, 76],
|
|
122
|
-
[253, 141, 60],
|
|
123
|
-
[240, 59, 32],
|
|
124
|
-
[189, 0, 38]
|
|
125
|
-
];
|
|
126
|
-
|
|
127
96
|
export type HeatmapProps = {
|
|
128
97
|
/**
|
|
129
98
|
* Radius of the heatmap blur in pixels, to which the weight of a cell is distributed.
|
|
@@ -132,94 +101,67 @@ export type HeatmapProps = {
|
|
|
132
101
|
*/
|
|
133
102
|
radiusPixels?: number;
|
|
134
103
|
/**
|
|
135
|
-
* Controls how weight values are mapped to the `
|
|
104
|
+
* Controls how weight values are mapped to the colors in `colorTexture`, as an array of two numbers [`minValue`, `maxValue`].
|
|
136
105
|
*
|
|
137
106
|
* @default [0, 1]
|
|
138
107
|
*/
|
|
139
108
|
colorDomain?: [number, number];
|
|
140
|
-
/**
|
|
141
|
-
* Specified as an array of colors [color1, color2, ...].
|
|
142
|
-
*
|
|
143
|
-
* @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)
|
|
144
|
-
*/
|
|
145
|
-
colorRange: Color[];
|
|
146
109
|
/**
|
|
147
110
|
* Value that is multiplied with the total weight at a pixel to obtain the final weight. A value larger than 1 biases the output color towards the higher end of the spectrum, and a value less than 1 biases the output color towards the lower end of the spectrum.
|
|
148
111
|
*/
|
|
149
112
|
intensity?: number;
|
|
113
|
+
/**
|
|
114
|
+
* Color LUT for color gradient
|
|
115
|
+
*/
|
|
116
|
+
colorTexture: Texture;
|
|
150
117
|
opacity: number;
|
|
151
118
|
};
|
|
152
119
|
|
|
153
|
-
|
|
154
|
-
delta
|
|
155
|
-
radiusPixels?: number;
|
|
156
|
-
colorDomain?: [number, number];
|
|
157
|
-
color1?: [number, number, number];
|
|
158
|
-
color2?: [number, number, number];
|
|
159
|
-
color3?: [number, number, number];
|
|
160
|
-
color4?: [number, number, number];
|
|
161
|
-
color5?: [number, number, number];
|
|
162
|
-
color6?: [number, number, number];
|
|
163
|
-
intensity: number;
|
|
164
|
-
opacity?: number;
|
|
120
|
+
type PassProps = {
|
|
121
|
+
delta: [number, number];
|
|
165
122
|
};
|
|
166
123
|
|
|
167
|
-
export const heatmap
|
|
124
|
+
export const heatmap = {
|
|
168
125
|
name: 'heatmap',
|
|
169
126
|
uniformPropTypes: {
|
|
170
|
-
delta: {value: [0, 1]},
|
|
171
|
-
radiusPixels: {value: 20, min: 0, softMax: 100},
|
|
172
127
|
colorDomain: {value: [0, 1]},
|
|
173
|
-
|
|
174
|
-
color2: {value: [0, 0, 0]},
|
|
175
|
-
color3: {value: [0, 0, 0]},
|
|
176
|
-
color4: {value: [0, 0, 0]},
|
|
177
|
-
color5: {value: [0, 0, 0]},
|
|
178
|
-
color6: {value: [0, 0, 0]},
|
|
128
|
+
delta: {value: [0, 1]},
|
|
179
129
|
intensity: {value: 1, min: 0.1, max: 10},
|
|
180
|
-
opacity: {value: 1, min: 0, max: 1}
|
|
130
|
+
opacity: {value: 1, min: 0, max: 1},
|
|
131
|
+
radiusPixels: {value: 20, min: 0, softMax: 100}
|
|
181
132
|
},
|
|
182
133
|
uniformTypes: {
|
|
183
|
-
delta: 'vec2<f32>',
|
|
184
|
-
radiusPixels: 'f32',
|
|
185
134
|
colorDomain: 'vec2<f32>',
|
|
186
|
-
|
|
187
|
-
color2: 'vec3<f32>',
|
|
188
|
-
color3: 'vec3<f32>',
|
|
189
|
-
color4: 'vec3<f32>',
|
|
190
|
-
color5: 'vec3<f32>',
|
|
191
|
-
color6: 'vec3<f32>',
|
|
135
|
+
delta: 'vec2<f32>',
|
|
192
136
|
intensity: 'f32',
|
|
193
|
-
opacity: 'f32'
|
|
137
|
+
opacity: 'f32',
|
|
138
|
+
radiusPixels: 'f32'
|
|
194
139
|
},
|
|
195
|
-
// @ts-
|
|
140
|
+
// @ts-ignore TODO v9.1
|
|
196
141
|
getUniforms: opts => {
|
|
142
|
+
if (!opts) return {};
|
|
197
143
|
const {
|
|
198
|
-
delta = [1, 0],
|
|
199
|
-
colorRange = defaultColorRange,
|
|
200
|
-
radiusPixels = 20,
|
|
201
144
|
colorDomain = [0, 1],
|
|
145
|
+
colorTexture,
|
|
146
|
+
delta = [1, 0],
|
|
202
147
|
intensity = 1,
|
|
203
|
-
opacity = 1
|
|
204
|
-
|
|
205
|
-
|
|
148
|
+
opacity = 1,
|
|
149
|
+
radiusPixels = 20
|
|
150
|
+
} = opts;
|
|
206
151
|
return {
|
|
207
|
-
delta,
|
|
208
|
-
color1,
|
|
209
|
-
color2,
|
|
210
|
-
color3,
|
|
211
|
-
color4,
|
|
212
|
-
color5,
|
|
213
|
-
color6,
|
|
214
|
-
radiusPixels,
|
|
215
152
|
colorDomain,
|
|
153
|
+
colorTexture,
|
|
154
|
+
delta,
|
|
216
155
|
intensity,
|
|
217
|
-
opacity
|
|
156
|
+
opacity,
|
|
157
|
+
radiusPixels
|
|
218
158
|
};
|
|
219
159
|
},
|
|
220
160
|
fs,
|
|
221
161
|
passes: [
|
|
162
|
+
// @ts-expect-error Seems typing in luma.gl should be Partial<>
|
|
222
163
|
{sampler: true, uniforms: {delta: [1, 0]}},
|
|
164
|
+
// @ts-expect-error Seems typing in luma.gl should be Partial<>
|
|
223
165
|
{sampler: true, uniforms: {delta: [0, 1]}}
|
|
224
166
|
]
|
|
225
|
-
}
|
|
167
|
+
} as const satisfies ShaderPass<HeatmapProps & PassProps>;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
Accessor,
|
|
3
7
|
Color,
|
|
@@ -24,10 +28,10 @@ class EnhancedTextBackgroundLayer extends TextBackgroundLayer {
|
|
|
24
28
|
|
|
25
29
|
// Modify shader so that the padding is offset by the pixel offset to ensure the padding
|
|
26
30
|
// always captures the anchor point. As padding is uniform we cannot pass it a per-label value
|
|
27
|
-
vs = vs.replaceAll('padding.', '_padding.');
|
|
31
|
+
vs = vs.replaceAll('textBackground.padding.', '_padding.');
|
|
28
32
|
vs = vs.replace(
|
|
29
33
|
'void main(void) {',
|
|
30
|
-
'void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);'
|
|
34
|
+
'void main(void) {\n vec4 _padding = textBackground.padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);'
|
|
31
35
|
);
|
|
32
36
|
|
|
33
37
|
return {...shaders, vs};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {Framebuffer, TextureProps} from '@luma.gl/core';
|
|
2
6
|
import {
|
|
3
7
|
CompositeLayer,
|
|
@@ -64,8 +68,8 @@ export function RTTModifier(BaseLayer) {
|
|
|
64
68
|
static layerName = `RTT-${BaseLayer.layerName}`;
|
|
65
69
|
|
|
66
70
|
draw(this: RTTLayer, opts: any) {
|
|
67
|
-
const {
|
|
68
|
-
const {picking} =
|
|
71
|
+
const {shaderModuleProps} = opts;
|
|
72
|
+
const {picking} = shaderModuleProps;
|
|
69
73
|
const postProcessLayer = getPostProcessLayer(this);
|
|
70
74
|
|
|
71
75
|
if (!picking.isActive) {
|
|
@@ -130,10 +134,11 @@ export function PostProcessModifier<T extends Constructor<DrawableCompositeLayer
|
|
|
130
134
|
|
|
131
135
|
_resizeBuffers(this: PostProcessLayer, opts: any) {
|
|
132
136
|
// TODO we could likely render to a smaller buffer for better perf
|
|
133
|
-
const {
|
|
137
|
+
const {shaderModuleProps} = opts;
|
|
134
138
|
const {viewport} = this.context;
|
|
135
|
-
const
|
|
136
|
-
const
|
|
139
|
+
const {devicePixelRatio} = shaderModuleProps.project;
|
|
140
|
+
const width = devicePixelRatio * viewport.width;
|
|
141
|
+
const height = devicePixelRatio * viewport.height;
|
|
137
142
|
this.internalState.renderBuffers.forEach((fbo: Framebuffer) => fbo.resize({width, height}));
|
|
138
143
|
}
|
|
139
144
|
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {CompositeLayer, CompositeLayerProps, Layer, LayersList, DefaultProps} from '@deck.gl/core';
|
|
2
6
|
import QuadbinLayer, {QuadbinLayerProps} from './quadbin-layer';
|
|
3
7
|
import QuadbinTileset2D from './quadbin-tileset-2d';
|
|
4
8
|
import SpatialIndexTileLayer, {SpatialIndexTileLayerProps} from './spatial-index-tile-layer';
|
|
5
9
|
import {hexToBigInt} from 'quadbin';
|
|
6
|
-
import type {TilejsonResult} from '
|
|
10
|
+
import type {TilejsonResult} from '@carto/api-client';
|
|
7
11
|
import {injectAccessToken, TilejsonPropType} from './utils';
|
|
8
12
|
import {DEFAULT_TILE_SIZE} from '../constants';
|
|
9
13
|
|
|
@@ -46,22 +50,20 @@ export default class QuadbinTileLayer<
|
|
|
46
50
|
return loadOptions;
|
|
47
51
|
}
|
|
48
52
|
|
|
49
|
-
renderLayers():
|
|
53
|
+
renderLayers(): SpatialIndexTileLayer | null {
|
|
50
54
|
const tileJSON = this.props.data as TilejsonResult;
|
|
51
55
|
if (!tileJSON) return null;
|
|
52
56
|
|
|
53
57
|
const {tiles: data, maxresolution: maxZoom} = tileJSON;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
})
|
|
65
|
-
];
|
|
58
|
+
const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);
|
|
59
|
+
return new SubLayerClass(this.props, {
|
|
60
|
+
id: `quadbin-tile-layer-${this.props.id}`,
|
|
61
|
+
data,
|
|
62
|
+
// TODO: Tileset2D should be generic over TileIndex type
|
|
63
|
+
TilesetClass: QuadbinTileset2D as any,
|
|
64
|
+
renderSubLayers,
|
|
65
|
+
maxZoom,
|
|
66
|
+
loadOptions: this.getLoadOptions()
|
|
67
|
+
});
|
|
66
68
|
}
|
|
67
69
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
export default `\
|
|
2
6
|
#version 300 es
|
|
3
7
|
#define SHADER_NAME raster-layer-vertex-shader
|
|
@@ -11,16 +15,6 @@ in vec4 instanceLineColors;
|
|
|
11
15
|
|
|
12
16
|
in vec3 instancePickingColors;
|
|
13
17
|
|
|
14
|
-
// Custom uniforms
|
|
15
|
-
uniform float opacity;
|
|
16
|
-
uniform bool extruded;
|
|
17
|
-
uniform bool stroked;
|
|
18
|
-
uniform bool isStroke;
|
|
19
|
-
uniform float coverage;
|
|
20
|
-
uniform float elevationScale;
|
|
21
|
-
uniform float widthScale;
|
|
22
|
-
uniform vec3 offset;
|
|
23
|
-
|
|
24
18
|
// Result
|
|
25
19
|
out vec4 vColor;
|
|
26
20
|
#ifdef FLAT_SHADING
|
|
@@ -29,25 +23,25 @@ out vec4 position_commonspace;
|
|
|
29
23
|
|
|
30
24
|
void main(void) {
|
|
31
25
|
// Rather than positioning using attribute, layout pixel grid using gl_InstanceID
|
|
32
|
-
vec2 common_position = offset.xy;
|
|
33
|
-
float scale =
|
|
26
|
+
vec2 common_position = column.offset.xy;
|
|
27
|
+
float scale = column.widthScale; // Re-use widthScale prop to pass cell scale
|
|
34
28
|
|
|
35
29
|
int yIndex = - (gl_InstanceID / BLOCK_WIDTH);
|
|
36
30
|
int xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);
|
|
37
|
-
common_position += scale * vec2(float(xIndex), float(yIndex));
|
|
31
|
+
common_position += scale * vec2(float(xIndex), float(yIndex - 1));
|
|
38
32
|
|
|
39
|
-
vec4 color = isStroke ? instanceLineColors : instanceFillColors;
|
|
33
|
+
vec4 color = column.isStroke ? instanceLineColors : instanceFillColors;
|
|
40
34
|
|
|
41
35
|
// if alpha == 0.0 or z < 0.0, do not render element
|
|
42
36
|
float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);
|
|
43
|
-
float cellWidth = coverage * scale;
|
|
37
|
+
float cellWidth = column.coverage * scale;
|
|
44
38
|
|
|
45
39
|
// Get position directly from quadbin, rather than projecting
|
|
46
40
|
// Important to set geometry.position before using project_ methods below
|
|
47
41
|
// as geometry.worldPosition is not set (we don't know our lat/long)
|
|
48
42
|
geometry.position = vec4(common_position, 0.0, 1.0);
|
|
49
|
-
if (
|
|
50
|
-
geometry.position.xyz -=
|
|
43
|
+
if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {
|
|
44
|
+
geometry.position.xyz -= project.commonOrigin;
|
|
51
45
|
}
|
|
52
46
|
|
|
53
47
|
// calculate elevation, if 3d not enabled set to 0
|
|
@@ -56,11 +50,11 @@ void main(void) {
|
|
|
56
50
|
// calculate stroke offset
|
|
57
51
|
float strokeOffsetRatio = 1.0;
|
|
58
52
|
|
|
59
|
-
if (extruded) {
|
|
60
|
-
elevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;
|
|
61
|
-
} else if (stroked) {
|
|
62
|
-
float halfOffset = project_pixel_size(widthScale) / cellWidth;
|
|
63
|
-
if (isStroke) {
|
|
53
|
+
if (column.extruded) {
|
|
54
|
+
elevation = instanceElevations * (positions.z + 1.0) / 2.0 * column.elevationScale;
|
|
55
|
+
} else if (column.stroked) {
|
|
56
|
+
float halfOffset = project_pixel_size(column.widthScale) / cellWidth;
|
|
57
|
+
if (column.isStroke) {
|
|
64
58
|
strokeOffsetRatio -= sign(positions.z) * halfOffset;
|
|
65
59
|
} else {
|
|
66
60
|
strokeOffsetRatio -= halfOffset;
|
|
@@ -81,16 +75,16 @@ void main(void) {
|
|
|
81
75
|
DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
|
|
82
76
|
|
|
83
77
|
// Light calculations
|
|
84
|
-
if (extruded && !isStroke) {
|
|
78
|
+
if (column.extruded && !column.isStroke) {
|
|
85
79
|
#ifdef FLAT_SHADING
|
|
86
80
|
position_commonspace = geometry.position;
|
|
87
|
-
vColor = vec4(color.rgb, color.a * opacity);
|
|
81
|
+
vColor = vec4(color.rgb, color.a * layer.opacity);
|
|
88
82
|
#else
|
|
89
|
-
vec3 lightColor = lighting_getLightColor(color.rgb,
|
|
90
|
-
vColor = vec4(lightColor, color.a * opacity);
|
|
83
|
+
vec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);
|
|
84
|
+
vColor = vec4(lightColor, color.a * layer.opacity);
|
|
91
85
|
#endif
|
|
92
86
|
} else {
|
|
93
|
-
vColor = vec4(color.rgb, color.a * opacity);
|
|
87
|
+
vColor = vec4(color.rgb, color.a * layer.opacity);
|
|
94
88
|
}
|
|
95
89
|
|
|
96
90
|
DECKGL_FILTER_COLOR(vColor, geometry);
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
Accessor,
|
|
3
7
|
CompositeLayer,
|
|
@@ -113,7 +117,8 @@ export default class RasterLayer<DataT = any, ExtraProps = {}> extends Composite
|
|
|
113
117
|
|
|
114
118
|
const blockSize = data.blockSize ?? 0;
|
|
115
119
|
const [xOffset, yOffset, scale] = quadbinToOffset(tileIndex);
|
|
116
|
-
const offset = [xOffset, yOffset
|
|
120
|
+
const offset = [xOffset, yOffset];
|
|
121
|
+
const lineWidthScale = scale / blockSize;
|
|
117
122
|
|
|
118
123
|
// Filled Column Layer
|
|
119
124
|
const CellLayer = this.getSubLayerClass('column', RasterColumnLayer);
|
|
@@ -136,6 +141,7 @@ export default class RasterLayer<DataT = any, ExtraProps = {}> extends Composite
|
|
|
136
141
|
},
|
|
137
142
|
dataComparator: wrappedDataComparator,
|
|
138
143
|
offset,
|
|
144
|
+
lineWidthScale, // Re-use widthScale prop to pass cell scale,
|
|
139
145
|
highlightedObjectIndex,
|
|
140
146
|
highlightColor
|
|
141
147
|
}
|