@deck.gl/carto 9.0.34 → 9.0.36

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.
Files changed (37) hide show
  1. package/dist/cartoRasterTile-worker.js +1 -1
  2. package/dist/cartoSpatialTile-worker.js +1 -1
  3. package/dist/cartoVectorTile-worker.js +1 -1
  4. package/dist/dist.dev.js +115 -112
  5. package/dist/index.cjs +110 -105
  6. package/dist/index.cjs.map +3 -3
  7. package/dist/index.d.ts +13 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +7 -0
  10. package/dist/layers/h3-tile-layer.d.ts +3 -3
  11. package/dist/layers/h3-tile-layer.d.ts.map +1 -1
  12. package/dist/layers/h3-tile-layer.js +12 -14
  13. package/dist/layers/heatmap-tile-layer.d.ts +11 -1
  14. package/dist/layers/heatmap-tile-layer.d.ts.map +1 -1
  15. package/dist/layers/heatmap-tile-layer.js +62 -2
  16. package/dist/layers/heatmap.d.ts +69 -22
  17. package/dist/layers/heatmap.d.ts.map +1 -1
  18. package/dist/layers/heatmap.js +20 -69
  19. package/dist/layers/quadbin-tile-layer.d.ts +3 -3
  20. package/dist/layers/quadbin-tile-layer.d.ts.map +1 -1
  21. package/dist/layers/quadbin-tile-layer.js +10 -12
  22. package/dist/layers/raster-layer-vertex.glsl.d.ts +1 -1
  23. package/dist/layers/raster-layer-vertex.glsl.js +1 -1
  24. package/dist/layers/raster-tile-layer.d.ts.map +1 -1
  25. package/dist/layers/raster-tile-layer.js +11 -13
  26. package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
  27. package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
  28. package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
  29. package/dist.min.js +13 -39
  30. package/package.json +2 -2
  31. package/src/index.ts +21 -0
  32. package/src/layers/h3-tile-layer.ts +13 -15
  33. package/src/layers/heatmap-tile-layer.ts +86 -3
  34. package/src/layers/heatmap.ts +33 -97
  35. package/src/layers/quadbin-tile-layer.ts +11 -13
  36. package/src/layers/raster-layer-vertex.glsl.ts +1 -1
  37. 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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,uCAAoC;AACxE,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,kCAA+B;AAC9D,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,uCAAoC;AACxE,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,sCAAmC;AACvE,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,uCAAoC;AACxE,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,sCAAmC;AACtE,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,sCAAmC;AACtE,QAAA,MAAM,YAAY;;;;;;;;CAQjB,CAAC;AACF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,CAAC;AAEF,OAAO,EACL,OAAO,IAAI,OAAO,EAClB,eAAe,IAAI,gBAAgB,EACnC,WAAW,IAAI,YAAY,EAC3B,UAAU,IAAI,WAAW,EACzB,sBAAsB,IAAI,uBAAuB,EACjD,kBAAkB,IAAI,mBAAmB,EAC1C,qBAAkB;AACnB,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,oCAAiC;AAC9D,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,0CAAuC;AAC1E,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,0CAAuC;AAC1E,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAC,uBAAoB;AAC3D,OAAO,EAAC,iBAAiB,EAAC,yBAAsB;AAChD,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,MAAM,EACN,OAAO,EACP,WAAW,EACX,eAAe,EACf,YAAY,EACZ,OAAO,IAAI,QAAQ,EACnB,eAAe,IAAI,gBAAgB,EACnC,aAAa,IAAI,cAAc,EAChC,uBAAoB;AAErB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EAChB,2BAAwB;AAEzB,QAAA,MAAM,aAAa;;;;;;;;;;;;;CAalB,CAAC;AAEF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,eAAe,EAChB,CAAC;AAEF,YAAY,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC3B,2BAAwB"}
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, Layer, LayersList, DefaultProps } from '@deck.gl/core';
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(): Layer | null | LayersList;
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,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExE,OAA8B,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,KAAK,GAAG,IAAI,GAAG,UAAU;CAsC1C"}
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
- // @ts-ignore
51
- new SpatialIndexTileLayer(this.props, {
52
- id: `h3-tile-layer-${this.props.id}`,
53
- data,
54
- // TODO: Tileset2D should be generic over TileIndex type
55
- TilesetClass: H3Tileset2D,
56
- renderSubLayers,
57
- // minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects
58
- minZoom: minresolution,
59
- maxZoom: maxresolution,
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,EAAC,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAC,MAAM,eAAe,CAAC;AAGjG,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;AAkElE,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,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,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,YAAY,IAAI,KAAK;CAgHtB;AAED,eAAe,gBAAgB,CAAC"}
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, colorRange, intensity, radiusPixels, _subLayerProps, updateTriggers, onMaxDensityChange, onViewportLoad, onTileLoad, onTileUnload, ...tileLayerProps } = this.props;
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;
@@ -1,5 +1,4 @@
1
- import type { ShaderPass } from '@luma.gl/shadertools';
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 `colorRange`, as an array of two numbers [`minValue`, `maxValue`].
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
- export type HeatmapUniforms = {
29
- delta?: [number, number];
30
- radiusPixels?: number;
31
- colorDomain?: [number, number];
32
- color1?: [number, number, number];
33
- color2?: [number, number, number];
34
- color3?: [number, number, number];
35
- color4?: [number, number, number];
36
- color5?: [number, number, number];
37
- color6?: [number, number, number];
38
- intensity: number;
39
- opacity?: number;
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 declare const heatmap: ShaderPass<HeatmapProps, HeatmapUniforms>;
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":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AA6HpC,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;;;;OAIG;IACH,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,UAAU,CAAC,YAAY,EAAE,eAAe,CA0D7D,CAAC"}
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"}
@@ -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 color1-6 Colors to use in color scale
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
- vec3 color1;
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
- const vec4 STOPS = vec4(0.2, 0.4, 0.6, 0.8);
18
+ uniform sampler2D colorTexture;
23
19
  vec3 colorGradient(float value) {
24
- vec3 c1;
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
- color1: { value: [0, 0, 0] },
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
- color1: 'vec3<f32>',
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
- const { delta = [1, 0], colorRange = defaultColorRange, radiusPixels = 20, colorDomain = [0, 1], intensity = 1, opacity = 1 } = opts;
123
- const [color1, color2, color3, color4, color5, color6] = colorRange;
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, Layer, LayersList, DefaultProps } from '@deck.gl/core';
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(): Layer | null | LayersList;
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,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,YAAY,EAAE,EAAC,iBAAiB,EAAC,2BAAwB;AAEhE,OAA8B,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,KAAK,GAAG,IAAI,GAAG,UAAU;CAkB1C"}
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
- return [
35
- // @ts-ignore
36
- new SpatialIndexTileLayer(this.props, {
37
- id: `quadbin-tile-layer-${this.props.id}`,
38
- data,
39
- // TODO: Tileset2D should be generic over TileIndex type
40
- TilesetClass: QuadbinTileset2D,
41
- renderSubLayers,
42
- maxZoom,
43
- loadOptions: this.getLoadOptions()
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-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;CAmB1C"}
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"}