@deck.gl/carto 9.0.38 → 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/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.38",
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": "2e2c23cf0bc3aa2f4921e5b60dafc4b36942debf"
75
+ "gitHead": "fe6e4763b3dcd5b602291e7732e9d30b0a4eaec1"
76
76
  }
@@ -61,10 +61,10 @@ export default class RasterTileLayer<
61
61
  }
62
62
 
63
63
  renderLayers(): Layer | null | LayersList {
64
- const tileJSON = this.props.data as TilejsonResult;
64
+ const tileJSON = this.props.data as TilejsonResult & {raster_metadata: any};
65
65
  if (!tileJSON) return null;
66
66
 
67
- const {tiles: data, minzoom: minZoom, maxzoom: maxZoom} = tileJSON;
67
+ const {tiles: data, minzoom: minZoom, maxzoom: maxZoom, raster_metadata: metadata} = tileJSON;
68
68
  const SubLayerClass = this.getSubLayerClass('tile', PostProcessTileLayer);
69
69
  return new SubLayerClass(this.props, {
70
70
  id: `raster-tile-layer-${this.props.id}`,
@@ -74,7 +74,10 @@ export default class RasterTileLayer<
74
74
  renderSubLayers,
75
75
  minZoom,
76
76
  maxZoom,
77
- loadOptions: this.getLoadOptions()
77
+ loadOptions: {
78
+ cartoRasterTile: {metadata},
79
+ ...this.getLoadOptions()
80
+ }
78
81
  });
79
82
  }
80
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: false,
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
- if (!arrayBuffer) return null;
52
- const {bands, blockSize} = parsePbf(arrayBuffer, TileReader);
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
- readPackedTypedArray(TypedArray, pbf, obj.data);
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
- obj.value = new TypedArray(pbf.buf.buffer.slice(pbf.pos, end));
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
  }