@deck.gl/carto 9.0.37 → 9.0.40
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 +4386 -6
- package/dist/cartoSpatialTile-worker.js +4378 -3
- package/dist/cartoVectorTile-worker.js +4378 -3
- package/dist/dist.dev.js +4449 -30
- package/dist/index.cjs +72 -21
- package/dist/index.cjs.map +3 -3
- package/dist/layers/post-process-utils.d.ts +14 -9
- package/dist/layers/post-process-utils.d.ts.map +1 -1
- package/dist/layers/post-process-utils.js +24 -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 +7 -7
- package/dist/layers/raster-layer.d.ts.map +1 -1
- package/dist/layers/raster-layer.js +14 -2
- package/dist/layers/raster-tile-layer.d.ts.map +1 -1
- package/dist/layers/raster-tile-layer.js +17 -3
- package/dist/layers/schema/carto-properties-tile-loader.js +1 -1
- package/dist/layers/schema/carto-raster-tile-loader.d.ts.map +1 -1
- package/dist/layers/schema/carto-raster-tile-loader.js +7 -3
- package/dist/layers/schema/carto-raster-tile.d.ts +1 -0
- package/dist/layers/schema/carto-raster-tile.d.ts.map +1 -1
- package/dist/layers/schema/carto-raster-tile.js +2 -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/layers/schema/fast-pbf.d.ts +5 -1
- package/dist/layers/schema/fast-pbf.d.ts.map +1 -1
- package/dist/layers/schema/fast-pbf.js +11 -2
- package/dist.min.js +21 -18
- package/package.json +2 -2
- package/src/layers/post-process-utils.ts +30 -1
- package/src/layers/raster-layer-vertex.glsl.ts +10 -8
- package/src/layers/raster-layer.ts +15 -2
- package/src/layers/raster-tile-layer.ts +27 -5
- package/src/layers/schema/carto-properties-tile-loader.ts +1 -1
- package/src/layers/schema/carto-raster-tile-loader.ts +7 -2
- package/src/layers/schema/carto-raster-tile.ts +3 -1
- package/src/layers/schema/fast-pbf.ts +17 -2
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "CARTO official integration with Deck.gl. Build geospatial applications using CARTO and Deck.gl.",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "9.0.
|
|
6
|
+
"version": "9.0.40",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"@deck.gl/layers": "^9.0.0",
|
|
73
73
|
"@loaders.gl/core": "^4.2.0"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "fe6e4763b3dcd5b602291e7732e9d30b0a4eaec1"
|
|
76
76
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {Framebuffer, TextureProps} from '@luma.gl/core';
|
|
2
|
+
import type {ShaderPass} from '@luma.gl/shadertools';
|
|
2
3
|
import {
|
|
4
|
+
_ConstructorOf,
|
|
3
5
|
CompositeLayer,
|
|
4
6
|
Layer,
|
|
5
7
|
LayerContext,
|
|
@@ -59,8 +61,10 @@ class DrawCallbackLayer extends Layer {
|
|
|
59
61
|
* Resulting layer must be used as a sublayer of a layer created
|
|
60
62
|
* with `PostProcessModifier`
|
|
61
63
|
*/
|
|
62
|
-
export function RTTModifier(BaseLayer) {
|
|
64
|
+
export function RTTModifier<T extends _ConstructorOf<Layer>>(BaseLayer: T): T {
|
|
65
|
+
// @ts-expect-error initializeState is abstract
|
|
63
66
|
return class RTTLayer extends BaseLayer {
|
|
67
|
+
// @ts-expect-error typescript doesn't see static property
|
|
64
68
|
static layerName = `RTT-${BaseLayer.layerName}`;
|
|
65
69
|
|
|
66
70
|
draw(this: RTTLayer, opts: any) {
|
|
@@ -176,5 +180,30 @@ export function PostProcessModifier<T extends Constructor<DrawableCompositeLayer
|
|
|
176
180
|
|
|
177
181
|
this.internalState.renderInProgress = false;
|
|
178
182
|
}
|
|
183
|
+
|
|
184
|
+
_finalize(): void {
|
|
185
|
+
this.internalState.renderBuffers.forEach((fbo: Framebuffer) => {
|
|
186
|
+
fbo.destroy();
|
|
187
|
+
});
|
|
188
|
+
this.internalState.renderBuffers = null;
|
|
189
|
+
this.internalState.postProcess.cleanup();
|
|
190
|
+
}
|
|
179
191
|
};
|
|
180
192
|
}
|
|
193
|
+
|
|
194
|
+
const fs = /* glsl */ `\
|
|
195
|
+
vec4 copy_filterColor(vec4 color, vec2 texSize, vec2 texCoord) {
|
|
196
|
+
return color;
|
|
197
|
+
}
|
|
198
|
+
`;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Copy
|
|
202
|
+
* Simple module that just copies input color to output
|
|
203
|
+
*/
|
|
204
|
+
export const copy = {
|
|
205
|
+
name: 'copy',
|
|
206
|
+
fs,
|
|
207
|
+
getUniforms: () => ({}),
|
|
208
|
+
passes: [{filter: true}]
|
|
209
|
+
} as const satisfies ShaderPass<{}>;
|
|
@@ -29,12 +29,14 @@ out vec4 position_commonspace;
|
|
|
29
29
|
|
|
30
30
|
void main(void) {
|
|
31
31
|
// Rather than positioning using attribute, layout pixel grid using gl_InstanceID
|
|
32
|
-
vec2
|
|
32
|
+
vec2 tileOrigin = offset.xy;
|
|
33
33
|
float scale = offset.z;
|
|
34
34
|
|
|
35
35
|
int yIndex = - (gl_InstanceID / BLOCK_WIDTH);
|
|
36
36
|
int xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
// Avoid precision issues by applying 0.5 offset here, rather than when laying out vertices
|
|
39
|
+
vec2 cellCenter = scale * vec2(float(xIndex) + 0.5, float(yIndex) - 0.5);
|
|
38
40
|
|
|
39
41
|
vec4 color = isStroke ? instanceLineColors : instanceFillColors;
|
|
40
42
|
|
|
@@ -45,7 +47,7 @@ void main(void) {
|
|
|
45
47
|
// Get position directly from quadbin, rather than projecting
|
|
46
48
|
// Important to set geometry.position before using project_ methods below
|
|
47
49
|
// as geometry.worldPosition is not set (we don't know our lat/long)
|
|
48
|
-
geometry.position = vec4(
|
|
50
|
+
geometry.position = vec4(tileOrigin + cellCenter, 0.0, 1.0);
|
|
49
51
|
if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {
|
|
50
52
|
geometry.position.xyz -= project_uCommonOrigin;
|
|
51
53
|
}
|
|
@@ -69,12 +71,12 @@ void main(void) {
|
|
|
69
71
|
|
|
70
72
|
geometry.pickingColor = instancePickingColors;
|
|
71
73
|
|
|
72
|
-
//
|
|
73
|
-
vec2
|
|
74
|
-
vec3
|
|
75
|
-
DECKGL_FILTER_SIZE(
|
|
74
|
+
// Cell coordinates centered on origin
|
|
75
|
+
vec2 base = positions.xy * scale * strokeOffsetRatio * coverage * shouldRender;
|
|
76
|
+
vec3 cell = vec3(base, project_size(elevation));
|
|
77
|
+
DECKGL_FILTER_SIZE(cell, geometry);
|
|
76
78
|
|
|
77
|
-
geometry.position.xyz +=
|
|
79
|
+
geometry.position.xyz += cell;
|
|
78
80
|
gl_Position = project_common_position_to_clipspace(geometry.position);
|
|
79
81
|
|
|
80
82
|
geometry.normal = project_normal(normals);
|
|
@@ -12,6 +12,7 @@ import {quadbinToOffset} from './quadbin-utils';
|
|
|
12
12
|
import {Raster} from './schema/carto-raster-tile-loader';
|
|
13
13
|
import vs from './raster-layer-vertex.glsl';
|
|
14
14
|
import {createBinaryProxy} from '../utils';
|
|
15
|
+
import {RTTModifier} from './post-process-utils';
|
|
15
16
|
|
|
16
17
|
const defaultProps: DefaultProps<RasterLayerProps> = {
|
|
17
18
|
...ColumnLayer.defaultProps,
|
|
@@ -26,7 +27,8 @@ const defaultProps: DefaultProps<RasterLayerProps> = {
|
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
// Modified ColumnLayer with custom vertex shader
|
|
29
|
-
|
|
30
|
+
// Use RTT to avoid inter-tile seams
|
|
31
|
+
class RasterColumnLayer extends RTTModifier(ColumnLayer) {
|
|
30
32
|
static layerName = 'RasterColumnLayer';
|
|
31
33
|
|
|
32
34
|
getShaders() {
|
|
@@ -137,7 +139,18 @@ export default class RasterLayer<DataT = any, ExtraProps = {}> extends Composite
|
|
|
137
139
|
dataComparator: wrappedDataComparator,
|
|
138
140
|
offset,
|
|
139
141
|
highlightedObjectIndex,
|
|
140
|
-
highlightColor
|
|
142
|
+
highlightColor,
|
|
143
|
+
|
|
144
|
+
// RTT requires blending otherwise opacity < 1 blends with black
|
|
145
|
+
// render target
|
|
146
|
+
parameters: {
|
|
147
|
+
blendColorSrcFactor: 'one',
|
|
148
|
+
blendAlphaSrcFactor: 'one',
|
|
149
|
+
blendColorDstFactor: 'zero',
|
|
150
|
+
blendAlphaDstFactor: 'zero',
|
|
151
|
+
blendColorOperation: 'add',
|
|
152
|
+
blendAlphaOperation: 'add'
|
|
153
|
+
}
|
|
141
154
|
}
|
|
142
155
|
);
|
|
143
156
|
}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CompositeLayer,
|
|
3
|
+
CompositeLayerProps,
|
|
4
|
+
DefaultProps,
|
|
5
|
+
FilterContext,
|
|
6
|
+
Layer,
|
|
7
|
+
LayersList
|
|
8
|
+
} from '@deck.gl/core';
|
|
2
9
|
import RasterLayer, {RasterLayerProps} from './raster-layer';
|
|
3
10
|
import QuadbinTileset2D from './quadbin-tileset-2d';
|
|
4
11
|
import type {TilejsonResult} from '../sources/types';
|
|
5
12
|
import {injectAccessToken, TilejsonPropType} from './utils';
|
|
6
13
|
import {DEFAULT_TILE_SIZE} from '../constants';
|
|
7
14
|
import {TileLayer, TileLayerProps} from '@deck.gl/geo-layers';
|
|
15
|
+
import {copy, PostProcessModifier} from './post-process-utils';
|
|
8
16
|
|
|
9
17
|
export const renderSubLayers = props => {
|
|
10
18
|
const tileIndex = props.tile?.index?.q;
|
|
@@ -14,6 +22,7 @@ export const renderSubLayers = props => {
|
|
|
14
22
|
|
|
15
23
|
const defaultProps: DefaultProps<RasterTileLayerProps> = {
|
|
16
24
|
data: TilejsonPropType,
|
|
25
|
+
refinementStrategy: 'no-overlap',
|
|
17
26
|
tileSize: DEFAULT_TILE_SIZE
|
|
18
27
|
};
|
|
19
28
|
|
|
@@ -27,6 +36,16 @@ type _RasterTileLayerProps<DataT> = Omit<RasterLayerProps<DataT>, 'data'> &
|
|
|
27
36
|
data: null | TilejsonResult | Promise<TilejsonResult>;
|
|
28
37
|
};
|
|
29
38
|
|
|
39
|
+
class PostProcessTileLayer extends PostProcessModifier(TileLayer, copy) {
|
|
40
|
+
filterSubLayer(context: FilterContext) {
|
|
41
|
+
// Handle DrawCallbackLayer
|
|
42
|
+
const {tile} = (context.layer as Layer<{tile: any}>).props;
|
|
43
|
+
if (!tile) return true;
|
|
44
|
+
|
|
45
|
+
return super.filterSubLayer(context);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
30
49
|
export default class RasterTileLayer<
|
|
31
50
|
DataT = any,
|
|
32
51
|
ExtraProps extends {} = {}
|
|
@@ -42,11 +61,11 @@ export default class RasterTileLayer<
|
|
|
42
61
|
}
|
|
43
62
|
|
|
44
63
|
renderLayers(): Layer | null | LayersList {
|
|
45
|
-
const tileJSON = this.props.data as TilejsonResult;
|
|
64
|
+
const tileJSON = this.props.data as TilejsonResult & {raster_metadata: any};
|
|
46
65
|
if (!tileJSON) return null;
|
|
47
66
|
|
|
48
|
-
const {tiles: data, minzoom: minZoom, maxzoom: maxZoom} = tileJSON;
|
|
49
|
-
const SubLayerClass = this.getSubLayerClass('tile',
|
|
67
|
+
const {tiles: data, minzoom: minZoom, maxzoom: maxZoom, raster_metadata: metadata} = tileJSON;
|
|
68
|
+
const SubLayerClass = this.getSubLayerClass('tile', PostProcessTileLayer);
|
|
50
69
|
return new SubLayerClass(this.props, {
|
|
51
70
|
id: `raster-tile-layer-${this.props.id}`,
|
|
52
71
|
data,
|
|
@@ -55,7 +74,10 @@ export default class RasterTileLayer<
|
|
|
55
74
|
renderSubLayers,
|
|
56
75
|
minZoom,
|
|
57
76
|
maxZoom,
|
|
58
|
-
loadOptions:
|
|
77
|
+
loadOptions: {
|
|
78
|
+
cartoRasterTile: {metadata},
|
|
79
|
+
...this.getLoadOptions()
|
|
80
|
+
}
|
|
59
81
|
});
|
|
60
82
|
}
|
|
61
83
|
}
|
|
@@ -11,7 +11,7 @@ const CartoPropertiesTileLoader: LoaderWithParser = {
|
|
|
11
11
|
extensions: ['pbf'],
|
|
12
12
|
mimeTypes: ['application/vnd.carto-properties-tile'],
|
|
13
13
|
category: 'geometry',
|
|
14
|
-
worker:
|
|
14
|
+
worker: true,
|
|
15
15
|
parse: async (arrayBuffer, options) => parseCartoPropertiesTile(arrayBuffer, options),
|
|
16
16
|
parseSync: parseCartoPropertiesTile,
|
|
17
17
|
options: {}
|
|
@@ -10,12 +10,14 @@ const id = 'cartoRasterTile';
|
|
|
10
10
|
|
|
11
11
|
type CartoRasterTileLoaderOptions = LoaderOptions & {
|
|
12
12
|
cartoRasterTile?: {
|
|
13
|
+
metadata: {compression: 'gzip' | null} | null;
|
|
13
14
|
workerUrl: string;
|
|
14
15
|
};
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
const DEFAULT_OPTIONS: CartoRasterTileLoaderOptions = {
|
|
18
19
|
cartoRasterTile: {
|
|
20
|
+
metadata: null,
|
|
19
21
|
workerUrl: getWorkerUrl(id, VERSION)
|
|
20
22
|
}
|
|
21
23
|
};
|
|
@@ -48,8 +50,11 @@ function parseCartoRasterTile(
|
|
|
48
50
|
arrayBuffer: ArrayBuffer,
|
|
49
51
|
options?: CartoRasterTileLoaderOptions
|
|
50
52
|
): Raster | null {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
const metadata = options?.cartoRasterTile?.metadata;
|
|
54
|
+
if (!arrayBuffer || !metadata) return null;
|
|
55
|
+
TileReader.compression = metadata.compression;
|
|
56
|
+
const out = parsePbf(arrayBuffer, TileReader);
|
|
57
|
+
const {bands, blockSize} = out;
|
|
53
58
|
|
|
54
59
|
const numericProps = {};
|
|
55
60
|
for (let i = 0; i < bands.length; i++) {
|
|
@@ -29,12 +29,14 @@ export class BandReader {
|
|
|
29
29
|
throw Error(`Invalid data type: ${obj.type}`);
|
|
30
30
|
}
|
|
31
31
|
obj.data = {};
|
|
32
|
-
|
|
32
|
+
const {compression} = TileReader;
|
|
33
|
+
readPackedTypedArray(TypedArray, pbf, obj.data, {compression});
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
export class TileReader {
|
|
39
|
+
public static compression: null | 'gzip';
|
|
38
40
|
static read(pbf, end) {
|
|
39
41
|
return pbf.readFields(TileReader._readField, {blockSize: 0, bands: []}, end);
|
|
40
42
|
}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
import {GZipCompression} from '@loaders.gl/compression';
|
|
2
|
+
|
|
3
|
+
type ReadPackedOptions = {
|
|
4
|
+
compression: null | 'gzip';
|
|
5
|
+
};
|
|
6
|
+
|
|
1
7
|
// Optimized (100X speed improvement) reading function for binary data
|
|
2
|
-
export function readPackedTypedArray(TypedArray, pbf, obj) {
|
|
8
|
+
export function readPackedTypedArray(TypedArray, pbf, obj, options?: ReadPackedOptions) {
|
|
3
9
|
const end = pbf.type === 2 ? pbf.readVarint() + pbf.pos : pbf.pos + 1;
|
|
4
|
-
|
|
10
|
+
const data = pbf.buf.buffer.slice(pbf.pos, end);
|
|
11
|
+
|
|
12
|
+
if (options?.compression === 'gzip') {
|
|
13
|
+
const compression = new GZipCompression();
|
|
14
|
+
const decompressedData = compression.decompressSync(data);
|
|
15
|
+
obj.value = new TypedArray(decompressedData);
|
|
16
|
+
} else {
|
|
17
|
+
obj.value = new TypedArray(data);
|
|
18
|
+
}
|
|
19
|
+
|
|
5
20
|
pbf.pos = end;
|
|
6
21
|
return obj.value;
|
|
7
22
|
}
|