@deck.gl/carto 9.0.33 → 9.0.35
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/cartoRasterTile-worker.js +1 -1
- package/dist/cartoSpatialTile-worker.js +1 -1
- package/dist/cartoVectorTile-worker.js +1 -1
- package/dist/dist.dev.js +119 -112
- package/dist/index.cjs +114 -105
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/layers/h3-tile-layer.d.ts +3 -3
- package/dist/layers/h3-tile-layer.d.ts.map +1 -1
- package/dist/layers/h3-tile-layer.js +12 -14
- package/dist/layers/heatmap-tile-layer.d.ts +11 -1
- package/dist/layers/heatmap-tile-layer.d.ts.map +1 -1
- package/dist/layers/heatmap-tile-layer.js +62 -2
- package/dist/layers/heatmap.d.ts +69 -22
- package/dist/layers/heatmap.d.ts.map +1 -1
- package/dist/layers/heatmap.js +20 -69
- package/dist/layers/quadbin-tile-layer.d.ts +3 -3
- package/dist/layers/quadbin-tile-layer.d.ts.map +1 -1
- package/dist/layers/quadbin-tile-layer.js +10 -12
- package/dist/layers/raster-layer-vertex.glsl.d.ts +1 -1
- package/dist/layers/raster-layer-vertex.glsl.js +1 -1
- package/dist/layers/raster-layer.d.ts.map +1 -1
- package/dist/layers/raster-layer.js +4 -0
- package/dist/layers/raster-tile-layer.d.ts.map +1 -1
- package/dist/layers/raster-tile-layer.js +11 -13
- package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
- package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
- package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
- package/dist.min.js +13 -39
- package/package.json +2 -2
- package/src/index.ts +21 -0
- package/src/layers/h3-tile-layer.ts +13 -15
- package/src/layers/heatmap-tile-layer.ts +86 -3
- package/src/layers/heatmap.ts +33 -97
- package/src/layers/quadbin-tile-layer.ts +11 -13
- package/src/layers/raster-layer-vertex.glsl.ts +1 -1
- package/src/layers/raster-layer.ts +10 -0
- package/src/layers/raster-tile-layer.ts +11 -13
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,19 @@ declare const CARTO_LAYERS: {
|
|
|
15
15
|
VectorTileLayer: typeof VectorTileLayer;
|
|
16
16
|
};
|
|
17
17
|
export { CARTO_LAYERS, ClusterTileLayer, H3TileLayer, HeatmapTileLayer, _PointLabelLayer, QuadbinTileLayer, RasterTileLayer, VectorTileLayer };
|
|
18
|
+
export { default as _QuadbinLayer } from "./layers/quadbin-layer.js";
|
|
19
|
+
export { default as _RasterLayer } from "./layers/raster-layer.js";
|
|
20
|
+
export { default as _SpatialIndexTileLayer } from "./layers/spatial-index-tile-layer.js";
|
|
21
|
+
export type { ClusterTileLayerProps } from "./layers/cluster-tile-layer.js";
|
|
22
|
+
export type { H3TileLayerProps } from "./layers/h3-tile-layer.js";
|
|
23
|
+
export type { HeatmapTileLayerProps } from "./layers/heatmap-tile-layer.js";
|
|
24
|
+
export type { PointLabelLayerProps } from "./layers/point-label-layer.js";
|
|
25
|
+
export type { QuadbinLayerProps } from "./layers/quadbin-layer.js";
|
|
26
|
+
export type { QuadbinTileLayerProps } from "./layers/quadbin-tile-layer.js";
|
|
27
|
+
export type { RasterLayerProps } from "./layers/raster-layer.js";
|
|
28
|
+
export type { RasterTileLayerProps } from "./layers/raster-tile-layer.js";
|
|
29
|
+
export type { SpatialIndexTileLayerProps } from "./layers/spatial-index-tile-layer.js";
|
|
30
|
+
export type { VectorTileLayerProps } from "./layers/vector-tile-layer.js";
|
|
18
31
|
export { default as BASEMAP, GOOGLE_BASEMAPS as _GOOGLE_BASEMAPS, getStyleUrl as _getStyleUrl, fetchStyle as _fetchStyle, applyLayerGroupFilters as _applyLayerGroupFilters, STYLE_LAYER_GROUPS as _STYLE_LAYER_GROUPS } from "./basemap.js";
|
|
19
32
|
export { default as colorBins } from "./style/color-bins-style.js";
|
|
20
33
|
export { default as colorCategories } from "./style/color-categories-style.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// CARTO Layers
|
|
1
2
|
import { default as ClusterTileLayer } from "./layers/cluster-tile-layer.js";
|
|
2
3
|
import { default as H3TileLayer } from "./layers/h3-tile-layer.js";
|
|
3
4
|
import { default as HeatmapTileLayer } from "./layers/heatmap-tile-layer.js";
|
|
@@ -5,6 +6,7 @@ import { default as _PointLabelLayer } from "./layers/point-label-layer.js";
|
|
|
5
6
|
import { default as QuadbinTileLayer } from "./layers/quadbin-tile-layer.js";
|
|
6
7
|
import { default as RasterTileLayer } from "./layers/raster-tile-layer.js";
|
|
7
8
|
import { default as VectorTileLayer } from "./layers/vector-tile-layer.js";
|
|
9
|
+
// Exports for playground/bindings
|
|
8
10
|
const CARTO_LAYERS = {
|
|
9
11
|
ClusterTileLayer,
|
|
10
12
|
H3TileLayer,
|
|
@@ -15,6 +17,11 @@ const CARTO_LAYERS = {
|
|
|
15
17
|
VectorTileLayer
|
|
16
18
|
};
|
|
17
19
|
export { CARTO_LAYERS, ClusterTileLayer, H3TileLayer, HeatmapTileLayer, _PointLabelLayer, QuadbinTileLayer, RasterTileLayer, VectorTileLayer };
|
|
20
|
+
// Internal Layers
|
|
21
|
+
export { default as _QuadbinLayer } from "./layers/quadbin-layer.js";
|
|
22
|
+
export { default as _RasterLayer } from "./layers/raster-layer.js";
|
|
23
|
+
export { default as _SpatialIndexTileLayer } from "./layers/spatial-index-tile-layer.js";
|
|
24
|
+
// Helpers
|
|
18
25
|
export { default as BASEMAP, GOOGLE_BASEMAPS as _GOOGLE_BASEMAPS, getStyleUrl as _getStyleUrl, fetchStyle as _fetchStyle, applyLayerGroupFilters as _applyLayerGroupFilters, STYLE_LAYER_GROUPS as _STYLE_LAYER_GROUPS } from "./basemap.js";
|
|
19
26
|
export { default as colorBins } from "./style/color-bins-style.js";
|
|
20
27
|
export { default as colorCategories } from "./style/color-categories-style.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CompositeLayer, CompositeLayerProps,
|
|
1
|
+
import { CompositeLayer, CompositeLayerProps, DefaultProps } from '@deck.gl/core';
|
|
2
2
|
import { H3HexagonLayer, H3HexagonLayerProps } from '@deck.gl/geo-layers';
|
|
3
|
-
import { SpatialIndexTileLayerProps } from "./spatial-index-tile-layer.js";
|
|
3
|
+
import SpatialIndexTileLayer, { SpatialIndexTileLayerProps } from "./spatial-index-tile-layer.js";
|
|
4
4
|
import type { TilejsonResult } from "../sources/types.js";
|
|
5
5
|
export declare const renderSubLayers: (props: any) => H3HexagonLayer<any, {
|
|
6
6
|
getHexagon: (d: any) => any;
|
|
@@ -18,7 +18,7 @@ export default class H3TileLayer<DataT = any, ExtraPropsT extends {} = {}> exten
|
|
|
18
18
|
static defaultProps: DefaultProps<H3TileLayerProps<unknown>>;
|
|
19
19
|
initializeState(): void;
|
|
20
20
|
getLoadOptions(): any;
|
|
21
|
-
renderLayers():
|
|
21
|
+
renderLayers(): SpatialIndexTileLayer | null;
|
|
22
22
|
}
|
|
23
23
|
export {};
|
|
24
24
|
//# sourceMappingURL=h3-tile-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"h3-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/h3-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"h3-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/h3-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAqB,YAAY,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExE,OAAO,qBAAqB,EAAE,EAAC,0BAA0B,EAAC,sCAAmC;AAC7F,OAAO,KAAK,EAAC,cAAc,EAAC,4BAAyB;AAIrD,eAAO,MAAM,eAAe;;;;SAU3B,CAAC;AAOF,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC;AAE/F,uCAAuC;AACvC,KAAK,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACtE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IAChD,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD,CAAC;AAEJ,MAAM,CAAC,OAAO,OAAO,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE,WAAW,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,cAAc,CAC/F,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CACjD;IACC,MAAM,CAAC,SAAS,SAAiB;IACjC,MAAM,CAAC,YAAY,0CAAgB;IAEnC,eAAe,IAAI,IAAI;IAIvB,cAAc,IAAI,GAAG;IAQrB,YAAY,IAAI,qBAAqB,GAAG,IAAI;CAoC7C"}
|
|
@@ -44,22 +44,20 @@ class H3TileLayer extends CompositeLayer {
|
|
|
44
44
|
if (this.props.maxZoom) {
|
|
45
45
|
maxresolution = Math.min(maxresolution, getHexagonResolution({ zoom: this.props.maxZoom, latitude: 0 }, this.props.tileSize));
|
|
46
46
|
}
|
|
47
|
+
const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);
|
|
47
48
|
// The naming is unfortunate, but minZoom & maxZoom in the context
|
|
48
49
|
// of a Tileset2D refer to the resolution levels, not the Mercator zooms
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
loadOptions: this.getLoadOptions()
|
|
61
|
-
})
|
|
62
|
-
];
|
|
50
|
+
return new SubLayerClass(this.props, {
|
|
51
|
+
id: `h3-tile-layer-${this.props.id}`,
|
|
52
|
+
data,
|
|
53
|
+
// TODO: Tileset2D should be generic over TileIndex type
|
|
54
|
+
TilesetClass: H3Tileset2D,
|
|
55
|
+
renderSubLayers,
|
|
56
|
+
// minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects
|
|
57
|
+
minZoom: minresolution,
|
|
58
|
+
maxZoom: maxresolution,
|
|
59
|
+
loadOptions: this.getLoadOptions()
|
|
60
|
+
});
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
H3TileLayer.layerName = 'H3TileLayer';
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import { Accessor, CompositeLayer, CompositeLayerProps, DefaultProps, Layer } from '@deck.gl/core';
|
|
1
|
+
import { Accessor, Color, CompositeLayer, CompositeLayerProps, DefaultProps, Layer, UpdateParameters } from '@deck.gl/core';
|
|
2
2
|
import { HeatmapProps } from "./heatmap.js";
|
|
3
3
|
import { QuadbinTileLayerProps } from "./quadbin-tile-layer.js";
|
|
4
4
|
import { TilejsonResult } from "../sources.js";
|
|
5
5
|
import { _Tile2DHeader as Tile2DHeader } from '@deck.gl/geo-layers';
|
|
6
|
+
import { Texture } from '@luma.gl/core';
|
|
6
7
|
/** All properties supported by HeatmapTileLayer. */
|
|
7
8
|
export type HeatmapTileLayerProps<DataT = unknown> = _HeatmapTileLayerProps<DataT> & CompositeLayerProps & {
|
|
8
9
|
data: null | TilejsonResult | Promise<TilejsonResult>;
|
|
9
10
|
};
|
|
10
11
|
/** Properties added by HeatmapTileLayer. */
|
|
11
12
|
type _HeatmapTileLayerProps<DataT> = QuadbinTileLayerProps<DataT> & HeatmapProps & {
|
|
13
|
+
/**
|
|
14
|
+
* Specified as an array of colors [color1, color2, ...].
|
|
15
|
+
*
|
|
16
|
+
* @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)
|
|
17
|
+
*/
|
|
18
|
+
colorRange: Color[];
|
|
12
19
|
/**
|
|
13
20
|
* The weight of each object.
|
|
14
21
|
*
|
|
@@ -22,6 +29,7 @@ declare class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends
|
|
|
22
29
|
static layerName: string;
|
|
23
30
|
static defaultProps: DefaultProps<HeatmapTileLayerProps<unknown>>;
|
|
24
31
|
state: {
|
|
32
|
+
colorTexture?: Texture;
|
|
25
33
|
isLoaded: boolean;
|
|
26
34
|
tiles: Set<Tile2DHeader>;
|
|
27
35
|
viewportChanged?: boolean;
|
|
@@ -30,7 +38,9 @@ declare class HeatmapTileLayer<DataT = any, ExtraProps extends {} = {}> extends
|
|
|
30
38
|
shouldUpdateState({ changeFlags }: {
|
|
31
39
|
changeFlags: any;
|
|
32
40
|
}): boolean;
|
|
41
|
+
updateState(opts: UpdateParameters<this>): void;
|
|
33
42
|
renderLayers(): Layer;
|
|
43
|
+
_updateColorTexture(opts: any): void;
|
|
34
44
|
}
|
|
35
45
|
export default HeatmapTileLayer;
|
|
36
46
|
//# sourceMappingURL=heatmap-tile-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heatmap-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/heatmap-tile-layer.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"heatmap-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/heatmap-tile-layer.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,KAAK,EACL,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAC,YAAY,EAAU,qBAAkB;AAEhD,OAAyB,EAAC,qBAAqB,EAAC,gCAA6B;AAE7E,OAAO,EAAC,cAAc,EAAC,sBAAmB;AAC1C,OAAO,EAAC,aAAa,IAAI,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAC,OAAO,EAAe,MAAM,eAAe,CAAC;AAwGpD,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,CAAC,KAAK,GAAG,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,GAChF,mBAAmB,GAAG;IACpB,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD,CAAC;AAEJ,4CAA4C;AAC5C,KAAK,sBAAsB,CAAC,KAAK,IAAI,qBAAqB,CAAC,KAAK,CAAC,GAC/D,YAAY,GAAG;IACb;;;;OAIG;IACH,UAAU,EAAE,KAAK,EAAE,CAAC;IAEpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEpC,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5D,CAAC;AAEJ,cAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,cAAc,CACpF,UAAU,GAAG,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CACrD;IACC,MAAM,CAAC,SAAS,SAAsB;IACtC,MAAM,CAAC,YAAY,+CAAgB;IAEnC,KAAK,EAAG;QACN,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,eAAe;IAQf,iBAAiB,CAAC,EAAC,WAAW,EAAC;;KAAA,GAAG,OAAO;IAMzC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAQxC,YAAY,IAAI,KAAK;IAiHrB,mBAAmB,CAAC,IAAI,KAAA;CAmBzB;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -5,6 +5,24 @@ import { heatmap } from "./heatmap.js";
|
|
|
5
5
|
import { RTTModifier, PostProcessModifier } from "./post-process-utils.js";
|
|
6
6
|
import QuadbinTileLayer from "./quadbin-tile-layer.js";
|
|
7
7
|
import { TilejsonPropType } from "./utils.js";
|
|
8
|
+
const defaultColorRange = [
|
|
9
|
+
[255, 255, 178],
|
|
10
|
+
[254, 217, 118],
|
|
11
|
+
[254, 178, 76],
|
|
12
|
+
[253, 141, 60],
|
|
13
|
+
[240, 59, 32],
|
|
14
|
+
[189, 0, 38]
|
|
15
|
+
];
|
|
16
|
+
const TEXTURE_PROPS = {
|
|
17
|
+
format: 'rgba8unorm',
|
|
18
|
+
mipmaps: false,
|
|
19
|
+
sampler: {
|
|
20
|
+
minFilter: 'linear',
|
|
21
|
+
magFilter: 'linear',
|
|
22
|
+
addressModeU: 'clamp-to-edge',
|
|
23
|
+
addressModeV: 'clamp-to-edge'
|
|
24
|
+
}
|
|
25
|
+
};
|
|
8
26
|
/**
|
|
9
27
|
* Computes the unit density (inverse of cell area)
|
|
10
28
|
*/
|
|
@@ -12,6 +30,21 @@ function unitDensityForCell(cell) {
|
|
|
12
30
|
const cellResolution = Number(getResolution(cell));
|
|
13
31
|
return Math.pow(4.0, cellResolution);
|
|
14
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Converts a colorRange array to a flat array with 4 components per color
|
|
35
|
+
*/
|
|
36
|
+
function colorRangeToFlatArray(colorRange) {
|
|
37
|
+
const flatArray = new Uint8Array(colorRange.length * 4);
|
|
38
|
+
let index = 0;
|
|
39
|
+
for (let i = 0; i < colorRange.length; i++) {
|
|
40
|
+
const color = colorRange[i];
|
|
41
|
+
flatArray[index++] = color[0];
|
|
42
|
+
flatArray[index++] = color[1];
|
|
43
|
+
flatArray[index++] = color[2];
|
|
44
|
+
flatArray[index++] = Number.isFinite(color[3]) ? color[3] : 255;
|
|
45
|
+
}
|
|
46
|
+
return flatArray;
|
|
47
|
+
}
|
|
15
48
|
// Modified polygon layer to draw offscreen and output value expected by heatmap
|
|
16
49
|
class RTTSolidPolygonLayer extends RTTModifier(SolidPolygonLayer) {
|
|
17
50
|
getShaders(type) {
|
|
@@ -59,6 +92,7 @@ const defaultProps = {
|
|
|
59
92
|
getWeight: { type: 'accessor', value: 1 },
|
|
60
93
|
onMaxDensityChange: { type: 'function', optional: true, value: null },
|
|
61
94
|
colorDomain: { type: 'array', value: [0, 1] },
|
|
95
|
+
colorRange: defaultColorRange,
|
|
62
96
|
intensity: { type: 'number', value: 1 },
|
|
63
97
|
radiusPixels: { type: 'number', min: 0, max: 100, value: 20 }
|
|
64
98
|
};
|
|
@@ -75,8 +109,15 @@ class HeatmapTileLayer extends CompositeLayer {
|
|
|
75
109
|
this.setState({ viewportChanged });
|
|
76
110
|
return changeFlags.somethingChanged;
|
|
77
111
|
}
|
|
112
|
+
updateState(opts) {
|
|
113
|
+
const { props, oldProps } = opts;
|
|
114
|
+
super.updateState(opts);
|
|
115
|
+
if (props.colorRange !== oldProps.colorRange) {
|
|
116
|
+
this._updateColorTexture(opts);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
78
119
|
renderLayers() {
|
|
79
|
-
const { data, getWeight, colorDomain,
|
|
120
|
+
const { data, getWeight, colorDomain, intensity, radiusPixels, _subLayerProps, updateTriggers, onMaxDensityChange, onViewportLoad, onTileLoad, onTileUnload, ...tileLayerProps } = this.props;
|
|
80
121
|
// Inject modified polygon layer as sublayer into TileLayer
|
|
81
122
|
const subLayerProps = {
|
|
82
123
|
..._subLayerProps,
|
|
@@ -116,11 +157,11 @@ class HeatmapTileLayer extends CompositeLayer {
|
|
|
116
157
|
getElevation: getWeight,
|
|
117
158
|
elevationScale: maxDensity,
|
|
118
159
|
colorDomain,
|
|
119
|
-
colorRange,
|
|
120
160
|
radiusPixels,
|
|
121
161
|
intensity,
|
|
122
162
|
_subLayerProps: subLayerProps,
|
|
123
163
|
refinementStrategy: 'no-overlap',
|
|
164
|
+
colorTexture: this.state.colorTexture,
|
|
124
165
|
// Disable line rendering
|
|
125
166
|
extruded: false,
|
|
126
167
|
stroked: false,
|
|
@@ -159,6 +200,25 @@ class HeatmapTileLayer extends CompositeLayer {
|
|
|
159
200
|
transitions: { elevationScale: { type: 'spring', stiffness: 0.3, damping: 0.5 } }
|
|
160
201
|
}));
|
|
161
202
|
}
|
|
203
|
+
_updateColorTexture(opts) {
|
|
204
|
+
const { colorRange } = opts.props;
|
|
205
|
+
let { colorTexture } = this.state;
|
|
206
|
+
const colors = colorRangeToFlatArray(colorRange);
|
|
207
|
+
if (colorTexture && colorTexture?.width === colorRange.length) {
|
|
208
|
+
// TODO(v9): Unclear whether `setSubImageData` is a public API, or what to use if not.
|
|
209
|
+
colorTexture.setSubImageData({ data: colors });
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
colorTexture?.destroy();
|
|
213
|
+
colorTexture = this.context.device.createTexture({
|
|
214
|
+
...TEXTURE_PROPS,
|
|
215
|
+
data: colors,
|
|
216
|
+
width: colorRange.length,
|
|
217
|
+
height: 1
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
this.setState({ colorTexture });
|
|
221
|
+
}
|
|
162
222
|
}
|
|
163
223
|
HeatmapTileLayer.layerName = 'HeatmapTileLayer';
|
|
164
224
|
HeatmapTileLayer.defaultProps = defaultProps;
|
package/dist/layers/heatmap.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Color } from '@deck.gl/core';
|
|
1
|
+
import { Texture } from '@luma.gl/core';
|
|
3
2
|
export type HeatmapProps = {
|
|
4
3
|
/**
|
|
5
4
|
* Radius of the heatmap blur in pixels, to which the weight of a cell is distributed.
|
|
@@ -8,35 +7,83 @@ export type HeatmapProps = {
|
|
|
8
7
|
*/
|
|
9
8
|
radiusPixels?: number;
|
|
10
9
|
/**
|
|
11
|
-
* Controls how weight values are mapped to the `
|
|
10
|
+
* Controls how weight values are mapped to the colors in `colorTexture`, as an array of two numbers [`minValue`, `maxValue`].
|
|
12
11
|
*
|
|
13
12
|
* @default [0, 1]
|
|
14
13
|
*/
|
|
15
14
|
colorDomain?: [number, number];
|
|
16
|
-
/**
|
|
17
|
-
* Specified as an array of colors [color1, color2, ...].
|
|
18
|
-
*
|
|
19
|
-
* @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)
|
|
20
|
-
*/
|
|
21
|
-
colorRange: Color[];
|
|
22
15
|
/**
|
|
23
16
|
* 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.
|
|
24
17
|
*/
|
|
25
18
|
intensity?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Color LUT for color gradient
|
|
21
|
+
*/
|
|
22
|
+
colorTexture: Texture;
|
|
26
23
|
opacity: number;
|
|
27
24
|
};
|
|
28
|
-
|
|
29
|
-
delta
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
25
|
+
type PassProps = {
|
|
26
|
+
delta: [number, number];
|
|
27
|
+
};
|
|
28
|
+
export declare const heatmap: {
|
|
29
|
+
readonly name: "heatmap";
|
|
30
|
+
readonly uniformPropTypes: {
|
|
31
|
+
readonly colorDomain: {
|
|
32
|
+
readonly value: readonly [0, 1];
|
|
33
|
+
};
|
|
34
|
+
readonly delta: {
|
|
35
|
+
readonly value: readonly [0, 1];
|
|
36
|
+
};
|
|
37
|
+
readonly intensity: {
|
|
38
|
+
readonly value: 1;
|
|
39
|
+
readonly min: 0.1;
|
|
40
|
+
readonly max: 10;
|
|
41
|
+
};
|
|
42
|
+
readonly opacity: {
|
|
43
|
+
readonly value: 1;
|
|
44
|
+
readonly min: 0;
|
|
45
|
+
readonly max: 1;
|
|
46
|
+
};
|
|
47
|
+
readonly radiusPixels: {
|
|
48
|
+
readonly value: 20;
|
|
49
|
+
readonly min: 0;
|
|
50
|
+
readonly softMax: 100;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
readonly uniformTypes: {
|
|
54
|
+
readonly colorDomain: "vec2<f32>";
|
|
55
|
+
readonly delta: "vec2<f32>";
|
|
56
|
+
readonly intensity: "f32";
|
|
57
|
+
readonly opacity: "f32";
|
|
58
|
+
readonly radiusPixels: "f32";
|
|
59
|
+
};
|
|
60
|
+
readonly getUniforms: (opts: Partial<HeatmapProps & PassProps> | undefined) => {
|
|
61
|
+
colorDomain?: undefined;
|
|
62
|
+
colorTexture?: undefined;
|
|
63
|
+
delta?: undefined;
|
|
64
|
+
intensity?: undefined;
|
|
65
|
+
opacity?: undefined;
|
|
66
|
+
radiusPixels?: undefined;
|
|
67
|
+
} | {
|
|
68
|
+
colorDomain: [number, number];
|
|
69
|
+
colorTexture: Texture<import("@luma.gl/core").TextureProps> | undefined;
|
|
70
|
+
delta: [number, number];
|
|
71
|
+
intensity: number;
|
|
72
|
+
opacity: number;
|
|
73
|
+
radiusPixels: number;
|
|
74
|
+
};
|
|
75
|
+
readonly fs: string;
|
|
76
|
+
readonly passes: [{
|
|
77
|
+
readonly sampler: true;
|
|
78
|
+
readonly uniforms: {
|
|
79
|
+
readonly delta: [1, 0];
|
|
80
|
+
};
|
|
81
|
+
}, {
|
|
82
|
+
readonly sampler: true;
|
|
83
|
+
readonly uniforms: {
|
|
84
|
+
readonly delta: [0, 1];
|
|
85
|
+
};
|
|
86
|
+
}];
|
|
40
87
|
};
|
|
41
|
-
export
|
|
88
|
+
export {};
|
|
42
89
|
//# sourceMappingURL=heatmap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heatmap.d.ts","sourceRoot":"","sources":["../../src/layers/heatmap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"heatmap.d.ts","sourceRoot":"","sources":["../../src/layers/heatmap.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AA2FtC,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCqC,CAAC"}
|
package/dist/layers/heatmap.js
CHANGED
|
@@ -3,45 +3,21 @@ const glsl = (s) => `${s}`;
|
|
|
3
3
|
* @filter Heatmap
|
|
4
4
|
* @param radiusPixels Blur radius in pixels, controls smoothness of heatmap
|
|
5
5
|
* @param colorDomain Domain to apply to values prior to applying color scale
|
|
6
|
-
* @param
|
|
6
|
+
* @param colorTexture 1D RGB lookup texture for color scale
|
|
7
|
+
* @param intensity Multiplier to apply to value
|
|
8
|
+
* @param opacity Output opacity
|
|
7
9
|
*/
|
|
8
10
|
const fs = `\
|
|
9
11
|
uniform heatmapUniforms {
|
|
10
|
-
vec2 delta;
|
|
11
|
-
float radiusPixels;
|
|
12
12
|
vec2 colorDomain;
|
|
13
|
-
|
|
14
|
-
vec3 color2;
|
|
15
|
-
vec3 color3;
|
|
16
|
-
vec3 color4;
|
|
17
|
-
vec3 color5;
|
|
18
|
-
vec3 color6;
|
|
13
|
+
vec2 delta;
|
|
19
14
|
float intensity;
|
|
20
15
|
float opacity;
|
|
16
|
+
float radiusPixels;
|
|
21
17
|
} heatmap;
|
|
22
|
-
|
|
18
|
+
uniform sampler2D colorTexture;
|
|
23
19
|
vec3 colorGradient(float value) {
|
|
24
|
-
|
|
25
|
-
vec3 c2;
|
|
26
|
-
vec2 range;
|
|
27
|
-
if (value < STOPS.x) {
|
|
28
|
-
range = vec2(0.0, STOPS.x);
|
|
29
|
-
c1 = heatmap.color1; c2 = heatmap.color2;
|
|
30
|
-
} else if (value < STOPS.y) {
|
|
31
|
-
range = STOPS.xy;
|
|
32
|
-
c1 = heatmap.color2; c2 = heatmap.color3;
|
|
33
|
-
} else if (value < STOPS.z) {
|
|
34
|
-
range = STOPS.yz;
|
|
35
|
-
c1 = heatmap.color3; c2 = heatmap.color4;
|
|
36
|
-
} else if (value < STOPS.w) {
|
|
37
|
-
range = STOPS.zw;
|
|
38
|
-
c1 = heatmap.color4; c2 = heatmap.color5;
|
|
39
|
-
} else {
|
|
40
|
-
range = vec2(STOPS.w, 1.0);
|
|
41
|
-
c1 = heatmap.color5; c2 = heatmap.color6;
|
|
42
|
-
}
|
|
43
|
-
float f = (clamp(value, 0.0, 1.0) - range.x) / (range.y - range.x);
|
|
44
|
-
return mix(c1, c2, f) / 255.0;
|
|
20
|
+
return texture(colorTexture, vec2(value, 0.5)).rgb;
|
|
45
21
|
}
|
|
46
22
|
const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
|
|
47
23
|
const float MAX_VAL = SHIFT.z * 255.0;
|
|
@@ -81,58 +57,33 @@ color.a *= heatmap.opacity;
|
|
|
81
57
|
return color;
|
|
82
58
|
}
|
|
83
59
|
`;
|
|
84
|
-
const defaultColorRange = [
|
|
85
|
-
[255, 255, 178],
|
|
86
|
-
[254, 217, 118],
|
|
87
|
-
[254, 178, 76],
|
|
88
|
-
[253, 141, 60],
|
|
89
|
-
[240, 59, 32],
|
|
90
|
-
[189, 0, 38]
|
|
91
|
-
];
|
|
92
60
|
export const heatmap = {
|
|
93
61
|
name: 'heatmap',
|
|
94
62
|
uniformPropTypes: {
|
|
95
|
-
delta: { value: [0, 1] },
|
|
96
|
-
radiusPixels: { value: 20, min: 0, softMax: 100 },
|
|
97
63
|
colorDomain: { value: [0, 1] },
|
|
98
|
-
|
|
99
|
-
color2: { value: [0, 0, 0] },
|
|
100
|
-
color3: { value: [0, 0, 0] },
|
|
101
|
-
color4: { value: [0, 0, 0] },
|
|
102
|
-
color5: { value: [0, 0, 0] },
|
|
103
|
-
color6: { value: [0, 0, 0] },
|
|
64
|
+
delta: { value: [0, 1] },
|
|
104
65
|
intensity: { value: 1, min: 0.1, max: 10 },
|
|
105
|
-
opacity: { value: 1, min: 0, max: 1 }
|
|
66
|
+
opacity: { value: 1, min: 0, max: 1 },
|
|
67
|
+
radiusPixels: { value: 20, min: 0, softMax: 100 }
|
|
106
68
|
},
|
|
107
69
|
uniformTypes: {
|
|
108
|
-
delta: 'vec2<f32>',
|
|
109
|
-
radiusPixels: 'f32',
|
|
110
70
|
colorDomain: 'vec2<f32>',
|
|
111
|
-
|
|
112
|
-
color2: 'vec3<f32>',
|
|
113
|
-
color3: 'vec3<f32>',
|
|
114
|
-
color4: 'vec3<f32>',
|
|
115
|
-
color5: 'vec3<f32>',
|
|
116
|
-
color6: 'vec3<f32>',
|
|
71
|
+
delta: 'vec2<f32>',
|
|
117
72
|
intensity: 'f32',
|
|
118
|
-
opacity: 'f32'
|
|
73
|
+
opacity: 'f32',
|
|
74
|
+
radiusPixels: 'f32'
|
|
119
75
|
},
|
|
120
|
-
// @ts-expect-error stricter luma gl types
|
|
121
76
|
getUniforms: opts => {
|
|
122
|
-
|
|
123
|
-
|
|
77
|
+
if (!opts)
|
|
78
|
+
return {};
|
|
79
|
+
const { colorDomain = [0, 1], colorTexture, delta = [1, 0], intensity = 1, opacity = 1, radiusPixels = 20 } = opts;
|
|
124
80
|
return {
|
|
125
|
-
delta,
|
|
126
|
-
color1,
|
|
127
|
-
color2,
|
|
128
|
-
color3,
|
|
129
|
-
color4,
|
|
130
|
-
color5,
|
|
131
|
-
color6,
|
|
132
|
-
radiusPixels,
|
|
133
81
|
colorDomain,
|
|
82
|
+
colorTexture,
|
|
83
|
+
delta,
|
|
134
84
|
intensity,
|
|
135
|
-
opacity
|
|
85
|
+
opacity,
|
|
86
|
+
radiusPixels
|
|
136
87
|
};
|
|
137
88
|
},
|
|
138
89
|
fs,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CompositeLayer, CompositeLayerProps,
|
|
1
|
+
import { CompositeLayer, CompositeLayerProps, DefaultProps } from '@deck.gl/core';
|
|
2
2
|
import QuadbinLayer, { QuadbinLayerProps } from "./quadbin-layer.js";
|
|
3
|
-
import { SpatialIndexTileLayerProps } from "./spatial-index-tile-layer.js";
|
|
3
|
+
import SpatialIndexTileLayer, { SpatialIndexTileLayerProps } from "./spatial-index-tile-layer.js";
|
|
4
4
|
import type { TilejsonResult } from "../sources/types.js";
|
|
5
5
|
export declare const renderSubLayers: (props: any) => QuadbinLayer<any, {
|
|
6
6
|
getQuadbin: (d: any) => any;
|
|
@@ -15,7 +15,7 @@ export default class QuadbinTileLayer<DataT = any, ExtraProps extends {} = {}> e
|
|
|
15
15
|
static layerName: string;
|
|
16
16
|
static defaultProps: DefaultProps<QuadbinTileLayerProps<unknown>>;
|
|
17
17
|
getLoadOptions(): any;
|
|
18
|
-
renderLayers():
|
|
18
|
+
renderLayers(): SpatialIndexTileLayer | null;
|
|
19
19
|
}
|
|
20
20
|
export {};
|
|
21
21
|
//# sourceMappingURL=quadbin-tile-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quadbin-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/quadbin-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"quadbin-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/quadbin-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAqB,YAAY,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,YAAY,EAAE,EAAC,iBAAiB,EAAC,2BAAwB;AAEhE,OAAO,qBAAqB,EAAE,EAAC,0BAA0B,EAAC,sCAAmC;AAE7F,OAAO,KAAK,EAAC,cAAc,EAAC,4BAAyB;AAIrD,eAAO,MAAM,eAAe;;SAO3B,CAAC;AAOF,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,CAAC,KAAK,GAAG,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,GAChF,mBAAmB,CAAC;AAEtB,4CAA4C;AAC5C,KAAK,sBAAsB,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACzE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IAChD,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD,CAAC;AAEJ,MAAM,CAAC,OAAO,OAAO,gBAAgB,CACnC,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,SAAsB;IACtC,MAAM,CAAC,YAAY,+CAAgB;IAEnC,cAAc,IAAI,GAAG;IAQrB,YAAY,IAAI,qBAAqB,GAAG,IAAI;CAgB7C"}
|
|
@@ -31,18 +31,16 @@ class QuadbinTileLayer extends CompositeLayer {
|
|
|
31
31
|
if (!tileJSON)
|
|
32
32
|
return null;
|
|
33
33
|
const { tiles: data, maxresolution: maxZoom } = tileJSON;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
})
|
|
45
|
-
];
|
|
34
|
+
const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);
|
|
35
|
+
return new SubLayerClass(this.props, {
|
|
36
|
+
id: `quadbin-tile-layer-${this.props.id}`,
|
|
37
|
+
data,
|
|
38
|
+
// TODO: Tileset2D should be generic over TileIndex type
|
|
39
|
+
TilesetClass: QuadbinTileset2D,
|
|
40
|
+
renderSubLayers,
|
|
41
|
+
maxZoom,
|
|
42
|
+
loadOptions: this.getLoadOptions()
|
|
43
|
+
});
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
46
|
QuadbinTileLayer.layerName = 'QuadbinTileLayer';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "#version 300 es\n#define SHADER_NAME raster-layer-vertex-shader\n\nin vec3 positions;\nin vec3 normals;\n\nin float instanceElevations;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\n\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float widthScale;\nuniform vec3 offset;\n\n// Result\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n // Rather than positioning using attribute, layout pixel grid using gl_InstanceID\n vec2 common_position = offset.xy;\n float scale = offset.z;\n\n int yIndex = - (gl_InstanceID / BLOCK_WIDTH);\n int xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);\n common_position += scale * vec2(float(xIndex), float(yIndex));\n\n vec4 color = isStroke ? instanceLineColors : instanceFillColors;\n\n // if alpha == 0.0 or z < 0.0, do not render element\n float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\n float cellWidth = coverage * scale;\n\n // Get position directly from quadbin, rather than projecting\n // Important to set geometry.position before using project_ methods below\n // as geometry.worldPosition is not set (we don't know our lat/long)\n geometry.position = vec4(common_position, 0.0, 1.0);\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n geometry.position.xyz -= project_uCommonOrigin;\n }\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar geometry height are between -1.0 to 1.0, transform it to between 0, 1\n float elevation = 0.0;\n // calculate stroke offset\n float strokeOffsetRatio = 1.0;\n\n if (extruded) {\n elevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n } else if (stroked) {\n float halfOffset = project_pixel_size(widthScale) / cellWidth;\n if (isStroke) {\n strokeOffsetRatio -= sign(positions.z) * halfOffset;\n } else {\n strokeOffsetRatio -= halfOffset;\n }\n }\n\n geometry.pickingColor = instancePickingColors;\n\n // project center of column\n vec2 offset = (vec2(0.5) + positions.xy * strokeOffsetRatio) * cellWidth * shouldRender;\n vec3 pos = vec3(offset, project_size(elevation));\n DECKGL_FILTER_SIZE(pos, geometry);\n\n geometry.position.xyz += pos;\n gl_Position = project_common_position_to_clipspace(geometry.position);\n\n geometry.normal = project_normal(normals);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Light calculations\n if (extruded && !isStroke) {\n#ifdef FLAT_SHADING\n position_commonspace = geometry.position;\n vColor = vec4(color.rgb, color.a * opacity);\n#else\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n vColor = vec4(lightColor, color.a * opacity);\n#endif\n } else {\n vColor = vec4(color.rgb, color.a * opacity);\n }\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
1
|
+
declare const _default: "#version 300 es\n#define SHADER_NAME raster-layer-vertex-shader\n\nin vec3 positions;\nin vec3 normals;\n\nin float instanceElevations;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\n\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float widthScale;\nuniform vec3 offset;\n\n// Result\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n // Rather than positioning using attribute, layout pixel grid using gl_InstanceID\n vec2 common_position = offset.xy;\n float scale = offset.z;\n\n int yIndex = - (gl_InstanceID / BLOCK_WIDTH);\n int xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);\n common_position += scale * vec2(float(xIndex), float(yIndex - 1));\n\n vec4 color = isStroke ? instanceLineColors : instanceFillColors;\n\n // if alpha == 0.0 or z < 0.0, do not render element\n float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\n float cellWidth = coverage * scale;\n\n // Get position directly from quadbin, rather than projecting\n // Important to set geometry.position before using project_ methods below\n // as geometry.worldPosition is not set (we don't know our lat/long)\n geometry.position = vec4(common_position, 0.0, 1.0);\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n geometry.position.xyz -= project_uCommonOrigin;\n }\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar geometry height are between -1.0 to 1.0, transform it to between 0, 1\n float elevation = 0.0;\n // calculate stroke offset\n float strokeOffsetRatio = 1.0;\n\n if (extruded) {\n elevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n } else if (stroked) {\n float halfOffset = project_pixel_size(widthScale) / cellWidth;\n if (isStroke) {\n strokeOffsetRatio -= sign(positions.z) * halfOffset;\n } else {\n strokeOffsetRatio -= halfOffset;\n }\n }\n\n geometry.pickingColor = instancePickingColors;\n\n // project center of column\n vec2 offset = (vec2(0.5) + positions.xy * strokeOffsetRatio) * cellWidth * shouldRender;\n vec3 pos = vec3(offset, project_size(elevation));\n DECKGL_FILTER_SIZE(pos, geometry);\n\n geometry.position.xyz += pos;\n gl_Position = project_common_position_to_clipspace(geometry.position);\n\n geometry.normal = project_normal(normals);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Light calculations\n if (extruded && !isStroke) {\n#ifdef FLAT_SHADING\n position_commonspace = geometry.position;\n vColor = vec4(color.rgb, color.a * opacity);\n#else\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n vColor = vec4(lightColor, color.a * opacity);\n#endif\n } else {\n vColor = vec4(color.rgb, color.a * opacity);\n }\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=raster-layer-vertex.glsl.d.ts.map
|
|
@@ -24,7 +24,7 @@ vec2 common_position = offset.xy;
|
|
|
24
24
|
float scale = offset.z;
|
|
25
25
|
int yIndex = - (gl_InstanceID / BLOCK_WIDTH);
|
|
26
26
|
int xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);
|
|
27
|
-
common_position += scale * vec2(float(xIndex), float(yIndex));
|
|
27
|
+
common_position += scale * vec2(float(xIndex), float(yIndex - 1));
|
|
28
28
|
vec4 color = isStroke ? instanceLineColors : instanceFillColors;
|
|
29
29
|
float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);
|
|
30
30
|
float cellWidth = coverage * scale;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-layer.d.ts","sourceRoot":"","sources":["../../src/layers/raster-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAc,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAyD9D,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,iBAAiB,GAC/D,gBAAgB,CAAC,KAAK,CAAC,GACvB,mBAAmB,CAAC;AAEtB,uCAAuC;AACvC,KAAK,iBAAiB,GAAG;IACvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"raster-layer.d.ts","sourceRoot":"","sources":["../../src/layers/raster-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAc,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAyD9D,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,iBAAiB,GAC/D,gBAAgB,CAAC,KAAK,CAAC,GACvB,mBAAmB,CAAC;AAEtB,uCAAuC;AACvC,KAAK,iBAAiB,GAAG;IACvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAYF,MAAM,CAAC,OAAO,OAAO,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,GAAG,EAAE,CAAE,SAAQ,cAAc,CACnF,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAC/C;IACC,MAAM,CAAC,SAAS,SAAiB;IACjC,MAAM,CAAC,YAAY,0CAAgB;IAEnC,KAAK,EAAG;QACN,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IAEF,YAAY,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU;IA4CzC,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IAetF,cAAc,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;IAa1B,oBAAoB,CAAC,IAAI,EAAE,WAAW;CAoBvC"}
|
|
@@ -50,6 +50,9 @@ class RasterColumnLayer extends ColumnLayer {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
RasterColumnLayer.layerName = 'RasterColumnLayer';
|
|
53
|
+
function wrappedDataComparator(oldData, newData) {
|
|
54
|
+
return oldData.data === newData.data && oldData.length === newData.length;
|
|
55
|
+
}
|
|
53
56
|
// Adapter layer around RasterColumnLayer that converts data & accessors into correct format
|
|
54
57
|
class RasterLayer extends CompositeLayer {
|
|
55
58
|
renderLayers() {
|
|
@@ -75,6 +78,7 @@ class RasterLayer extends CompositeLayer {
|
|
|
75
78
|
data, // Pass through data for getSubLayerAccessor()
|
|
76
79
|
length: blockSize * blockSize
|
|
77
80
|
},
|
|
81
|
+
dataComparator: wrappedDataComparator,
|
|
78
82
|
offset,
|
|
79
83
|
highlightedObjectIndex,
|
|
80
84
|
highlightColor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/raster-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,WAAW,EAAE,EAAC,gBAAgB,EAAC,0BAAuB;AAE7D,OAAO,KAAK,EAAC,cAAc,EAAC,4BAAyB;AAGrD,OAAO,EAAY,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,eAAe;;SAI3B,CAAC;AAOF,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,GAC9E,mBAAmB,CAAC;AAEtB,2CAA2C;AAC3C,KAAK,qBAAqB,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACvE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IACpC,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD,CAAC;AAEJ,MAAM,CAAC,OAAO,OAAO,eAAe,CAClC,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,YAAY,8CAAgB;IAEnC,cAAc,IAAI,GAAG;IAOrB,YAAY,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU;
|
|
1
|
+
{"version":3,"file":"raster-tile-layer.d.ts","sourceRoot":"","sources":["../../src/layers/raster-tile-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,WAAW,EAAE,EAAC,gBAAgB,EAAC,0BAAuB;AAE7D,OAAO,KAAK,EAAC,cAAc,EAAC,4BAAyB;AAGrD,OAAO,EAAY,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,eAAe;;SAI3B,CAAC;AAOF,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,GAC9E,mBAAmB,CAAC;AAEtB,2CAA2C;AAC3C,KAAK,qBAAqB,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACvE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IACpC,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD,CAAC;AAEJ,MAAM,CAAC,OAAO,OAAO,eAAe,CAClC,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,YAAY,8CAAgB;IAEnC,cAAc,IAAI,GAAG;IAOrB,YAAY,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU;CAiB1C"}
|