@deck.gl/geo-layers 8.8.0-beta.1 → 8.8.0-beta.2

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 (109) hide show
  1. package/dist/dist.dev.js +180 -118
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  3. package/dist/es5/great-circle-layer/great-circle-layer.js +12 -8
  4. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  5. package/dist/es5/h3-layers/h3-cluster-layer.js +5 -4
  6. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js +49 -34
  8. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  11. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  12. package/dist/es5/mesh-layer/mesh-layer.js +22 -26
  13. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  14. package/dist/es5/mvt-layer/mvt-layer.js +6 -3
  15. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  16. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  17. package/dist/es5/s2-layer/s2-geometry.js.map +1 -1
  18. package/dist/es5/s2-layer/s2-layer.js +4 -2
  19. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  20. package/dist/es5/s2-layer/s2-utils.js.map +1 -1
  21. package/dist/es5/tile-3d-layer/tile-3d-layer.js +31 -16
  22. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  23. package/dist/es5/tile-layer/tile-layer.js +4 -1
  24. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  25. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  26. package/dist/es5/trips-layer/trips-layer.js +3 -1
  27. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  28. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  29. package/dist/esm/great-circle-layer/great-circle-layer.js +7 -3
  30. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  31. package/dist/esm/h3-layers/h3-cluster-layer.js +6 -4
  32. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  33. package/dist/esm/h3-layers/h3-hexagon-layer.js +38 -24
  34. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  37. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +1 -1
  38. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  39. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
  40. package/dist/esm/mesh-layer/mesh-layer.js +15 -17
  41. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  42. package/dist/esm/mvt-layer/mvt-layer.js +6 -3
  43. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  44. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  45. package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
  46. package/dist/esm/s2-layer/s2-layer.js +5 -2
  47. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  48. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  49. package/dist/esm/tile-3d-layer/tile-3d-layer.js +21 -10
  50. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  51. package/dist/esm/tile-layer/tile-layer.js +4 -1
  52. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  53. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  54. package/dist/esm/trips-layer/trips-layer.js +1 -1
  55. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  56. package/dist.min.js +1 -1
  57. package/package.json +6 -4
  58. package/src/geo-cell-layer/GeoCellLayer.ts +2 -2
  59. package/src/great-circle-layer/{great-circle-layer.js → great-circle-layer.ts} +17 -8
  60. package/src/h3-layers/h3-cluster-layer.ts +60 -0
  61. package/src/h3-layers/{h3-hexagon-layer.js → h3-hexagon-layer.ts} +110 -42
  62. package/src/index.ts +4 -0
  63. package/src/mesh-layer/{mesh-layer-fragment.glsl.js → mesh-layer-fragment.glsl.ts} +0 -0
  64. package/src/mesh-layer/{mesh-layer-vertex.glsl.js → mesh-layer-vertex.glsl.ts} +2 -2
  65. package/src/mesh-layer/{mesh-layer.js → mesh-layer.ts} +46 -13
  66. package/src/mvt-layer/mvt-layer.ts +5 -3
  67. package/src/quadkey-layer/quadkey-layer.ts +5 -5
  68. package/src/s2-layer/{s2-geometry.js → s2-geometry.ts} +17 -9
  69. package/src/s2-layer/{s2-layer.js → s2-layer.ts} +25 -8
  70. package/src/s2-layer/{s2-utils.js → s2-utils.ts} +14 -7
  71. package/src/tile-3d-layer/{tile-3d-layer.js → tile-3d-layer.ts} +107 -36
  72. package/src/tile-layer/tile-layer.ts +6 -5
  73. package/src/tile-layer/tileset-2d.ts +1 -1
  74. package/src/trips-layer/trips-layer.ts +4 -4
  75. package/typed/geo-cell-layer/GeoCellLayer.d.ts +2 -37
  76. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
  77. package/typed/great-circle-layer/great-circle-layer.d.ts +7 -14
  78. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
  79. package/typed/h3-layers/h3-cluster-layer.d.ts +20 -14
  80. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
  81. package/typed/h3-layers/h3-hexagon-layer.d.ts +55 -92
  82. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  83. package/typed/index.d.ts +4 -0
  84. package/typed/index.d.ts.map +1 -1
  85. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +1 -1
  86. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -1
  87. package/typed/mesh-layer/mesh-layer-vertex.glsl.d.ts +1 -1
  88. package/typed/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +1 -1
  89. package/typed/mesh-layer/mesh-layer.d.ts +32 -22
  90. package/typed/mesh-layer/mesh-layer.d.ts.map +1 -1
  91. package/typed/mvt-layer/mvt-layer.d.ts +2 -34
  92. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  93. package/typed/quadkey-layer/quadkey-layer.d.ts +4 -4
  94. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
  95. package/typed/s2-layer/s2-geometry.d.ts +8 -8
  96. package/typed/s2-layer/s2-geometry.d.ts.map +1 -1
  97. package/typed/s2-layer/s2-layer.d.ts +18 -14
  98. package/typed/s2-layer/s2-layer.d.ts.map +1 -1
  99. package/typed/s2-layer/s2-utils.d.ts +3 -4
  100. package/typed/s2-layer/s2-utils.d.ts.map +1 -1
  101. package/typed/tile-3d-layer/tile-3d-layer.d.ts +58 -68
  102. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  103. package/typed/tile-layer/tile-layer.d.ts +3 -3
  104. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  105. package/typed/tile-layer/tileset-2d.d.ts +2 -1
  106. package/typed/tile-layer/tileset-2d.d.ts.map +1 -1
  107. package/typed/trips-layer/trips-layer.d.ts +2 -2
  108. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
  109. package/src/h3-layers/h3-cluster-layer.js +0 -43
@@ -21,24 +21,28 @@ const MAX_LEVEL = 30;
21
21
  const POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)
22
22
  const RADIAN_TO_DEGREE = 180 / Math.PI;
23
23
 
24
- export function IJToST(ij, order, offsets) {
24
+ export function IJToST(
25
+ ij: [number, number],
26
+ order: number,
27
+ offsets: [number, number]
28
+ ): [number, number] {
25
29
  const maxSize = 1 << order;
26
30
 
27
31
  return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
28
32
  }
29
33
 
30
- function singleSTtoUV(st) {
34
+ function singleSTtoUV(st: number): number {
31
35
  if (st >= 0.5) {
32
36
  return (1 / 3.0) * (4 * st * st - 1);
33
37
  }
34
38
  return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));
35
39
  }
36
40
 
37
- export function STToUV(st) {
41
+ export function STToUV(st: [number, number]): [number, number] {
38
42
  return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];
39
43
  }
40
44
 
41
- export function FaceUVToXYZ(face, [u, v]) {
45
+ export function FaceUVToXYZ(face: number, [u, v]: [number, number]): [number, number, number] {
42
46
  switch (face) {
43
47
  case 0:
44
48
  return [1, u, v];
@@ -57,14 +61,14 @@ export function FaceUVToXYZ(face, [u, v]) {
57
61
  }
58
62
  }
59
63
 
60
- export function XYZToLngLat([x, y, z]) {
64
+ export function XYZToLngLat([x, y, z]: [number, number, number]): [number, number] {
61
65
  const lat = Math.atan2(z, Math.sqrt(x * x + y * y));
62
66
  const lng = Math.atan2(y, x);
63
67
 
64
68
  return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];
65
69
  }
66
70
 
67
- export function toHilbertQuadkey(idS) {
71
+ export function toHilbertQuadkey(idS: string): string {
68
72
  let bin = Long.fromString(idS, true, 10).toString(2);
69
73
 
70
74
  while (bin.length < FACE_BITS + POS_BITS) {
@@ -92,7 +96,7 @@ export function toHilbertQuadkey(idS) {
92
96
  return `${faceS}/${posS}`;
93
97
  }
94
98
 
95
- function rotateAndFlipQuadrant(n, point, rx, ry) {
99
+ function rotateAndFlipQuadrant(n: number, point: [number, number], rx: number, ry: number): void {
96
100
  if (ry === 0) {
97
101
  if (rx === 1) {
98
102
  point[0] = n - 1 - point[0];
@@ -105,12 +109,16 @@ function rotateAndFlipQuadrant(n, point, rx, ry) {
105
109
  }
106
110
  }
107
111
 
108
- export function FromHilbertQuadKey(hilbertQuadkey) {
112
+ export function FromHilbertQuadKey(hilbertQuadkey: string): {
113
+ face: number;
114
+ ij: [number, number];
115
+ level: number;
116
+ } {
109
117
  const parts = hilbertQuadkey.split('/');
110
118
  const face = parseInt(parts[0], 10);
111
119
  const position = parts[1];
112
120
  const maxLevel = position.length;
113
- const point = [0, 0];
121
+ const point = [0, 0] as [number, number];
114
122
  let level;
115
123
 
116
124
  for (let i = maxLevel - 1; i >= 0; i--) {
@@ -18,25 +18,42 @@
18
18
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  // THE SOFTWARE.
20
20
 
21
- import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
21
+ import {AccessorFunction, DefaultProps} from '@deck.gl/core';
22
+ import GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';
22
23
  import {getS2Polygon} from './s2-utils';
23
24
 
24
- const defaultProps = {
25
+ const defaultProps: DefaultProps<S2LayerProps> = {
25
26
  getS2Token: {type: 'accessor', value: d => d.token}
26
27
  };
27
28
 
28
- export default class S2Layer extends GeoCellLayer {
29
- indexToBounds() {
29
+ /** All properties supported by S2Layer. */
30
+ export type S2LayerProps<DataT = any> = _S2LayerProps<DataT> & GeoCellLayerProps<DataT>;
31
+
32
+ /** Properties added by S2Layer. */
33
+ type _S2LayerProps<DataT> = {
34
+ /**
35
+ * Called for each data object to retrieve the quadkey string identifier.
36
+ *
37
+ * By default, it reads `token` property of data object.
38
+ */
39
+ getS2Token?: AccessorFunction<DataT, string>;
40
+ };
41
+
42
+ export default class S2Layer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
43
+ DataT,
44
+ Required<_S2LayerProps<DataT>> & ExtraProps
45
+ > {
46
+ static layerName = 'S2Layer';
47
+ static defaultProps = defaultProps;
48
+
49
+ indexToBounds(): Partial<GeoCellLayer['props']> | null {
30
50
  const {data, getS2Token} = this.props;
31
51
 
32
52
  return {
33
53
  data,
34
54
  _normalize: false,
35
55
  positionFormat: 'XY',
36
- getPolygon: (x, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))
56
+ getPolygon: (x: DataT, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))
37
57
  };
38
58
  }
39
59
  }
40
-
41
- S2Layer.layerName = 'S2Layer';
42
- S2Layer.defaultProps = defaultProps;
@@ -14,7 +14,7 @@ import Long from 'long';
14
14
  * Given an S2 token this function convert the token to 64 bit id
15
15
  https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439
16
16
  * */
17
- function getIdFromToken(token) {
17
+ function getIdFromToken(token: string): number {
18
18
  // pad token with zeros to make the length 16
19
19
  const paddedToken = token.padEnd(16, '0');
20
20
  return Long.fromString(paddedToken, 16);
@@ -24,7 +24,15 @@ const MAX_RESOLUTION = 100;
24
24
 
25
25
  /* Adapted from s2-geometry's S2Cell.getCornerLatLngs */
26
26
  /* eslint-disable max-statements */
27
- function getGeoBounds({face, ij, level}) {
27
+ function getGeoBounds({
28
+ face,
29
+ ij,
30
+ level
31
+ }: {
32
+ face: number;
33
+ ij: [number, number];
34
+ level: number;
35
+ }): Float64Array {
28
36
  const offsets = [
29
37
  [0, 0],
30
38
  [0, 1],
@@ -44,7 +52,7 @@ function getGeoBounds({face, ij, level}) {
44
52
  let prevLng = 0;
45
53
 
46
54
  for (let i = 0; i < 4; i++) {
47
- const offset = offsets[i].slice(0);
55
+ const offset = offsets[i].slice(0) as [number, number];
48
56
  const nextOffset = offsets[i + 1];
49
57
  const stepI = (nextOffset[0] - offset[0]) / resolution;
50
58
  const stepJ = (nextOffset[1] - offset[1]) / resolution;
@@ -78,7 +86,7 @@ function getGeoBounds({face, ij, level}) {
78
86
  }
79
87
  /* eslint-enable max-statements */
80
88
 
81
- export function getS2QuadKey(token) {
89
+ export function getS2QuadKey(token: string | number): string {
82
90
  if (typeof token === 'string') {
83
91
  if (token.indexOf('/') > 0) {
84
92
  // is Hilbert quad key
@@ -94,11 +102,10 @@ export function getS2QuadKey(token) {
94
102
  /**
95
103
  * Get a polygon with corner coordinates for an s2 cell
96
104
  * @param {*} cell - This can be an S2 key or token
97
- * @return {Array} - a simple polygon in array format: [[lng, lat], ...]
98
- * - each coordinate is an array [lng, lat]
105
+ * @return {Float64Array} - a simple polygon in flat array format: [lng0, lat0, lng1, lat1, ...]
99
106
  * - the polygon is closed, i.e. last coordinate is a copy of the first coordinate
100
107
  */
101
- export function getS2Polygon(token) {
108
+ export function getS2Polygon(token: string | number): Float64Array {
102
109
  const key = getS2QuadKey(token);
103
110
  const s2cell = FromHilbertQuadKey(key);
104
111
 
@@ -1,21 +1,38 @@
1
1
  import GL from '@luma.gl/constants';
2
2
  import {Geometry} from '@luma.gl/core';
3
- import {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';
3
+
4
+ import {
5
+ Accessor,
6
+ Color,
7
+ CompositeLayer,
8
+ CompositeLayerProps,
9
+ COORDINATE_SYSTEM,
10
+ FilterContext,
11
+ GetPickingInfoParams,
12
+ Layer,
13
+ LayersList,
14
+ log,
15
+ PickingInfo,
16
+ UpdateParameters,
17
+ Viewport,
18
+ DefaultProps
19
+ } from '@deck.gl/core';
4
20
  import {PointCloudLayer} from '@deck.gl/layers';
5
21
  import {ScenegraphLayer} from '@deck.gl/mesh-layers';
6
- import {default as _MeshLayer} from '../mesh-layer/mesh-layer';
7
- import {log} from '@deck.gl/core';
22
+ import {default as MeshLayer} from '../mesh-layer/mesh-layer';
8
23
 
9
24
  import {load} from '@loaders.gl/core';
10
- import {Tileset3D, TILE_TYPE} from '@loaders.gl/tiles';
25
+ import {MeshAttributes} from '@loaders.gl/schema';
26
+ import {Tileset3D, Tile3D, TILE_TYPE} from '@loaders.gl/tiles';
11
27
  import {Tiles3DLoader} from '@loaders.gl/3d-tiles';
12
28
 
13
29
  const SINGLE_DATA = [0];
14
30
 
15
- const defaultProps = {
31
+ const defaultProps: DefaultProps<Tile3dLayerProps> = {
16
32
  getPointColor: {type: 'accessor', value: [0, 0, 0, 255]},
17
33
  pointSize: 1.0,
18
34
 
35
+ // @ts-expect-error Disable async data loading (handling it in _loadTileSet)
19
36
  data: null,
20
37
  loader: Tiles3DLoader,
21
38
 
@@ -26,7 +43,52 @@ const defaultProps = {
26
43
  _getMeshColor: {type: 'function', value: tileHeader => [255, 255, 255], compare: false}
27
44
  };
28
45
 
29
- export default class Tile3DLayer extends CompositeLayer {
46
+ /** All properties supported by Tile3DLayer */
47
+ export type Tile3dLayerProps<DataT = any> = _Tile3dLayerProps<DataT> & CompositeLayerProps<DataT>;
48
+
49
+ /** Props added by the Tile3DLayer */
50
+ type _Tile3dLayerProps<DataT> = {
51
+ /** Color Accessor for point clouds. **/
52
+ getPointColor?: Accessor<DataT, Color>;
53
+
54
+ /** Global radius of all points in pixels. **/
55
+ pointSize?: number;
56
+
57
+ /** A loader which is used to decode the fetched tiles.
58
+ * @deprecated Use `loaders` instead
59
+ */
60
+ loader?: typeof Tiles3DLoader;
61
+
62
+ /** Called when Tileset JSON file is loaded. **/
63
+ onTilesetLoad?: (tile: Tileset3D) => void;
64
+
65
+ /** Called when a tile in the tileset hierarchy is loaded. **/
66
+ onTileLoad?: (tile: Tile3D) => void;
67
+
68
+ /** Called when a tile is unloaded. **/
69
+ onTileUnload?: (tile: Tile3D) => void;
70
+
71
+ /** Called when a tile fails to load. **/
72
+ onTileError?: (tile: Tile3D, url: string, message: string) => void;
73
+
74
+ /** (Experimental) Accessor to change color of mesh based on properties. **/
75
+ _getMeshColor?: (tile: Tile3D) => Color;
76
+ };
77
+
78
+ export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
79
+ ExtraPropsT & Required<_Tile3dLayerProps<DataT>>
80
+ > {
81
+ static defaultProps = defaultProps as any;
82
+ static layerName = 'Tile3DLayer';
83
+
84
+ state!: {
85
+ activeViewports: {};
86
+ frameNumber?: number;
87
+ lastUpdatedViewports: {[viewportId: string]: Viewport} | null;
88
+ layerMap: {[layerId: string]: any};
89
+ tileset3d: Tileset3D | null;
90
+ };
91
+
30
92
  initializeState() {
31
93
  if ('onTileLoadFail' in this.props) {
32
94
  log.removed('onTileLoadFail', 'onTileError')();
@@ -40,16 +102,16 @@ export default class Tile3DLayer extends CompositeLayer {
40
102
  };
41
103
  }
42
104
 
43
- get isLoaded() {
105
+ get isLoaded(): boolean {
44
106
  const {tileset3d} = this.state;
45
- return tileset3d && tileset3d.isLoaded();
107
+ return tileset3d !== null && tileset3d.isLoaded();
46
108
  }
47
109
 
48
- shouldUpdateState({changeFlags}) {
110
+ shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {
49
111
  return changeFlags.somethingChanged;
50
112
  }
51
113
 
52
- updateState({props, oldProps, changeFlags}) {
114
+ updateState({props, oldProps, changeFlags}: UpdateParameters<this>): void {
53
115
  if (props.data && props.data !== oldProps.data) {
54
116
  this._loadTileset(props.data);
55
117
  }
@@ -71,9 +133,9 @@ export default class Tile3DLayer extends CompositeLayer {
71
133
  }
72
134
  }
73
135
 
74
- activateViewport(viewport) {
136
+ activateViewport(viewport: Viewport): void {
75
137
  const {activeViewports, lastUpdatedViewports} = this.state;
76
- this.internalState.viewport = viewport;
138
+ this.internalState!.viewport = viewport;
77
139
 
78
140
  activeViewports[viewport.id] = viewport;
79
141
  const lastViewport = lastUpdatedViewports?.[viewport.id];
@@ -83,7 +145,7 @@ export default class Tile3DLayer extends CompositeLayer {
83
145
  }
84
146
  }
85
147
 
86
- getPickingInfo({info, sourceLayer}) {
148
+ getPickingInfo({info, sourceLayer}: GetPickingInfoParams) {
87
149
  const {layerMap} = this.state;
88
150
  const layerId = sourceLayer && sourceLayer.id;
89
151
  if (layerId) {
@@ -96,22 +158,24 @@ export default class Tile3DLayer extends CompositeLayer {
96
158
  return info;
97
159
  }
98
160
 
99
- filterSubLayer({layer, viewport}) {
100
- const {tile} = layer.props;
161
+ filterSubLayer({layer, viewport}: FilterContext): boolean {
162
+ // All sublayers will have a tile prop
163
+ const {tile} = layer.props as unknown as {tile: Tile3D};
101
164
  const {id: viewportId} = viewport;
102
165
  return tile.selected && tile.viewportIds.includes(viewportId);
103
166
  }
104
167
 
105
- _updateAutoHighlight(info) {
168
+ protected _updateAutoHighlight(info: PickingInfo): void {
106
169
  if (info.sourceLayer) {
107
170
  info.sourceLayer.updateAutoHighlight(info);
108
171
  }
109
172
  }
110
173
 
111
- async _loadTileset(tilesetUrl) {
174
+ private async _loadTileset(tilesetUrl) {
112
175
  const {loadOptions = {}} = this.props;
113
176
 
114
177
  // TODO: deprecate `loader` in v9.0
178
+ // @ts-ignore
115
179
  let loader = this.props.loader || this.props.loaders;
116
180
  if (Array.isArray(loader)) {
117
181
  loader = loader[0];
@@ -134,7 +198,7 @@ export default class Tile3DLayer extends CompositeLayer {
134
198
  const tileset3d = new Tileset3D(tilesetJson, {
135
199
  onTileLoad: this._onTileLoad.bind(this),
136
200
  onTileUnload: this._onTileUnload.bind(this),
137
- onTileLoadFail: this.props.onTileError,
201
+ onTileError: this.props.onTileError,
138
202
  ...options
139
203
  });
140
204
 
@@ -147,20 +211,23 @@ export default class Tile3DLayer extends CompositeLayer {
147
211
  this.props.onTilesetLoad(tileset3d);
148
212
  }
149
213
 
150
- _onTileLoad(tileHeader) {
214
+ private _onTileLoad(tileHeader: Tile3D): void {
151
215
  const {lastUpdatedViewports} = this.state;
152
216
  this.props.onTileLoad(tileHeader);
153
217
  this._updateTileset(lastUpdatedViewports);
154
218
  this.setNeedsUpdate();
155
219
  }
156
220
 
157
- _onTileUnload(tileHeader) {
221
+ private _onTileUnload(tileHeader: Tile3D): void {
158
222
  // Was cleaned up from tileset cache. We no longer need to track it.
159
223
  delete this.state.layerMap[tileHeader.id];
160
224
  this.props.onTileUnload(tileHeader);
161
225
  }
162
226
 
163
- _updateTileset(viewports) {
227
+ private _updateTileset(viewports: {[viewportId: string]: Viewport} | null): void {
228
+ if (!viewports) {
229
+ return;
230
+ }
164
231
  const {tileset3d} = this.state;
165
232
  const {timeline} = this.context;
166
233
  const viewportsNumber = Object.keys(viewports).length;
@@ -175,24 +242,30 @@ export default class Tile3DLayer extends CompositeLayer {
175
242
  });
176
243
  }
177
244
 
178
- _getSubLayer(tileHeader, oldLayer) {
245
+ private _getSubLayer(
246
+ tileHeader: Tile3D,
247
+ oldLayer?: Layer
248
+ ): MeshLayer<DataT> | PointCloudLayer<DataT> | ScenegraphLayer<DataT> | null {
179
249
  if (!tileHeader.content) {
180
250
  return null;
181
251
  }
182
252
 
183
253
  switch (tileHeader.type) {
184
254
  case TILE_TYPE.POINTCLOUD:
185
- return this._makePointCloudLayer(tileHeader, oldLayer);
255
+ return this._makePointCloudLayer(tileHeader, oldLayer as PointCloudLayer<DataT>);
186
256
  case TILE_TYPE.SCENEGRAPH:
187
- return this._make3DModelLayer(tileHeader, oldLayer);
257
+ return this._make3DModelLayer(tileHeader);
188
258
  case TILE_TYPE.MESH:
189
- return this._makeSimpleMeshLayer(tileHeader, oldLayer);
259
+ return this._makeSimpleMeshLayer(tileHeader, oldLayer as MeshLayer<DataT>);
190
260
  default:
191
261
  throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);
192
262
  }
193
263
  }
194
264
 
195
- _makePointCloudLayer(tileHeader, oldLayer) {
265
+ private _makePointCloudLayer(
266
+ tileHeader: Tile3D,
267
+ oldLayer?: PointCloudLayer<DataT>
268
+ ): PointCloudLayer<DataT> | null {
196
269
  const {attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix} =
197
270
  tileHeader.content;
198
271
  const {positions, normals, colors} = attributes;
@@ -233,7 +306,7 @@ export default class Tile3DLayer extends CompositeLayer {
233
306
  );
234
307
  }
235
308
 
236
- _make3DModelLayer(tileHeader) {
309
+ private _make3DModelLayer(tileHeader: Tile3D): ScenegraphLayer<DataT> {
237
310
  const {gltf, instances, cartographicOrigin, modelMatrix} = tileHeader.content;
238
311
 
239
312
  const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);
@@ -261,7 +334,7 @@ export default class Tile3DLayer extends CompositeLayer {
261
334
  );
262
335
  }
263
336
 
264
- _makeSimpleMeshLayer(tileHeader, oldLayer) {
337
+ private _makeSimpleMeshLayer(tileHeader: Tile3D, oldLayer?: MeshLayer<DataT>): MeshLayer<DataT> {
265
338
  const content = tileHeader.content;
266
339
  const {
267
340
  attributes,
@@ -282,7 +355,7 @@ export default class Tile3DLayer extends CompositeLayer {
282
355
  indices
283
356
  });
284
357
 
285
- const SubLayerClass = this.getSubLayerClass('mesh', _MeshLayer);
358
+ const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);
286
359
 
287
360
  return new SubLayerClass(
288
361
  this.getSubLayerProps({
@@ -304,13 +377,14 @@ export default class Tile3DLayer extends CompositeLayer {
304
377
  );
305
378
  }
306
379
 
307
- renderLayers() {
380
+ renderLayers(): Layer | null | LayersList {
308
381
  const {tileset3d, layerMap} = this.state;
309
382
  if (!tileset3d) {
310
383
  return null;
311
384
  }
312
385
 
313
- return tileset3d.tiles
386
+ // loaders.gl doesn't provide a type for tileset3d.tiles
387
+ return (tileset3d.tiles as Tile3D[])
314
388
  .map(tile => {
315
389
  const layerCache = (layerMap[tile.id] = layerMap[tile.id] || {tile});
316
390
  let {layer} = layerCache;
@@ -332,8 +406,8 @@ export default class Tile3DLayer extends CompositeLayer {
332
406
  }
333
407
  }
334
408
 
335
- function getMeshGeometry(contentAttributes) {
336
- const attributes = {};
409
+ function getMeshGeometry(contentAttributes: MeshAttributes): MeshAttributes {
410
+ const attributes: MeshAttributes = {};
337
411
  attributes.positions = {
338
412
  ...contentAttributes.positions,
339
413
  value: new Float32Array(contentAttributes.positions.value)
@@ -352,6 +426,3 @@ function getMeshGeometry(contentAttributes) {
352
426
  }
353
427
  return attributes;
354
428
  }
355
-
356
- Tile3DLayer.layerName = 'Tile3DLayer';
357
- Tile3DLayer.defaultProps = defaultProps;
@@ -6,6 +6,7 @@ import {
6
6
  UpdateParameters,
7
7
  PickingInfo,
8
8
  GetPickingInfoParams,
9
+ DefaultProps,
9
10
  _flatten as flatten
10
11
  } from '@deck.gl/core';
11
12
  import {GeoJsonLayer} from '@deck.gl/layers';
@@ -16,9 +17,9 @@ import Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from '.
16
17
  import {TileLoadProps, ZRange} from './types';
17
18
  import {urlType, getURLFromTemplate} from './utils';
18
19
 
19
- const defaultProps = {
20
+ const defaultProps: DefaultProps<TileLayerProps> = {
20
21
  TilesetClass: Tileset2D,
21
- data: [],
22
+ data: {type: 'data', value: []},
22
23
  dataComparator: urlType.equals,
23
24
  renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},
24
25
  getTileData: {type: 'function', optional: true, value: null, compare: false},
@@ -41,7 +42,7 @@ const defaultProps = {
41
42
  };
42
43
 
43
44
  /** All props supported by the TileLayer */
44
- export type TileLayerProps<DataT = any> = _TileLayerProps<DataT> & CompositeLayerProps<DataT>;
45
+ export type TileLayerProps<DataT = any> = CompositeLayerProps<any> & _TileLayerProps<DataT>;
45
46
 
46
47
  /** Props added by the TileLayer */
47
48
  type _TileLayerProps<DataT> = {
@@ -63,10 +64,10 @@ type _TileLayerProps<DataT> = {
63
64
  /**
64
65
  * If supplied, `getTileData` is called to retrieve the data of each tile.
65
66
  */
66
- getTileData?: (props: TileLoadProps) => Promise<DataT> | DataT;
67
+ getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;
67
68
 
68
69
  /** Called when all tiles in the current viewport are loaded. */
69
- onViewportLoad?: (tiles: Tile2DHeader<DataT>[]) => void;
70
+ onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;
70
71
 
71
72
  /** Called when a tile successfully loads. */
72
73
  onTileLoad?: (tile: Tile2DHeader<DataT>) => void;
@@ -49,7 +49,6 @@ const STRATEGIES = {
49
49
 
50
50
  export type Tileset2DProps = Pick<
51
51
  Required<TileLayerProps>,
52
- | 'getTileData'
53
52
  | 'tileSize'
54
53
  | 'maxCacheSize'
55
54
  | 'maxCacheByteSize'
@@ -60,6 +59,7 @@ export type Tileset2DProps = Pick<
60
59
  | 'maxRequests'
61
60
  | 'zoomOffset'
62
61
  > & {
62
+ getTileData: NonNullable<TileLayerProps['getTileData']>;
63
63
  onTileLoad: (tile: Tile2DHeader) => void;
64
64
  onTileUnload: (tile: Tile2DHeader) => void;
65
65
  onTileError: (error: any, tile: Tile2DHeader) => void;
@@ -19,14 +19,14 @@
19
19
  // THE SOFTWARE.
20
20
 
21
21
  import type {NumericArray} from '@math.gl/core';
22
- import {AccessorFunction} from '@deck.gl/core';
22
+ import {AccessorFunction, DefaultProps} from '@deck.gl/core';
23
23
  import {PathLayer, PathLayerProps} from '@deck.gl/layers';
24
24
 
25
- const defaultProps = {
25
+ const defaultProps: DefaultProps<TripsLayerProps> = {
26
26
  fadeTrail: true,
27
27
  trailLength: {type: 'number', value: 120, min: 0},
28
28
  currentTime: {type: 'number', value: 0, min: 0},
29
- getTimestamps: {type: 'accessor', value: null}
29
+ getTimestamps: {type: 'accessor', value: d => d.timestamps}
30
30
  };
31
31
 
32
32
  /** All properties supported by TripsLayer. */
@@ -60,7 +60,7 @@ export default class TripsLayer<DataT = any, ExtraProps = {}> extends PathLayer<
60
60
  Required<_TripsLayerProps> & ExtraProps
61
61
  > {
62
62
  static layerName = 'TripsLayer';
63
- static defaultProps: any = defaultProps;
63
+ static defaultProps = defaultProps;
64
64
 
65
65
  getShaders() {
66
66
  const shaders = super.getShaders();
@@ -1,45 +1,10 @@
1
- import { CompositeLayer, CompositeLayerProps, Layer, LayersList } from '@deck.gl/core/typed';
1
+ import { CompositeLayer, CompositeLayerProps, Layer, LayersList, DefaultProps } from '@deck.gl/core/typed';
2
2
  import { PolygonLayerProps } from '@deck.gl/layers/typed';
3
3
  /** All properties supported by GeoCellLayer. */
4
4
  export declare type GeoCellLayerProps<DataT = any> = PolygonLayerProps<DataT> & CompositeLayerProps<DataT>;
5
5
  export default class GeoCellLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<Required<GeoCellLayerProps<DataT>> & ExtraProps> {
6
6
  static layerName: string;
7
- static defaultProps: {
8
- stroked: boolean;
9
- filled: boolean;
10
- extruded: boolean;
11
- elevationScale: number;
12
- wireframe: boolean;
13
- _normalize: boolean;
14
- _windingOrder: string;
15
- lineWidthUnits: string;
16
- lineWidthScale: number;
17
- lineWidthMinPixels: number;
18
- lineWidthMaxPixels: number;
19
- lineJointRounded: boolean;
20
- lineMiterLimit: number;
21
- getPolygon: {
22
- type: string;
23
- value: (f: any) => any;
24
- };
25
- getFillColor: {
26
- type: string;
27
- value: number[];
28
- };
29
- getLineColor: {
30
- type: string;
31
- value: number[];
32
- };
33
- getLineWidth: {
34
- type: string;
35
- value: number;
36
- };
37
- getElevation: {
38
- type: string;
39
- value: number;
40
- };
41
- material: boolean;
42
- };
7
+ static defaultProps: DefaultProps<GeoCellLayerProps<any>>;
43
8
  /** Implement to generate props to create geometry. */
44
9
  indexToBounds(): Partial<GeoCellLayer['props']> | null;
45
10
  renderLayers(): Layer | null | LayersList;
@@ -1 +1 @@
1
- {"version":3,"file":"GeoCellLayer.d.ts","sourceRoot":"","sources":["../../src/geo-cell-layer/GeoCellLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACrF,OAAO,EAAe,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAMhE,gDAAgD;AAChD,oBAAY,iBAAiB,CAAC,KAAK,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEnG,MAAM,CAAC,OAAO,OAAO,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,GAAG,EAAE,CAAE,SAAQ,cAAc,CACpF,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAChD;IACC,MAAM,CAAC,SAAS,SAAkB;IAClC,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAgB;IAEnC,sDAAsD;IACtD,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IAItD,YAAY,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU;CA+D1C"}
1
+ {"version":3,"file":"GeoCellLayer.d.ts","sourceRoot":"","sources":["../../src/geo-cell-layer/GeoCellLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAe,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAMhE,gDAAgD;AAChD,oBAAY,iBAAiB,CAAC,KAAK,GAAG,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEnG,MAAM,CAAC,OAAO,OAAO,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,GAAG,EAAE,CAAE,SAAQ,cAAc,CACpF,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAChD;IACC,MAAM,CAAC,SAAS,SAAkB;IAClC,MAAM,CAAC,YAAY,uCAAgB;IAEnC,sDAAsD;IACtD,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IAItD,YAAY,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU;CA+D1C"}
@@ -1,16 +1,9 @@
1
- declare class GreatCircleLayer extends ArcLayer<any, any> {
2
- constructor(...propObjects: Partial<any>[]);
1
+ import { ArcLayer, ArcLayerProps } from '@deck.gl/layers/typed';
2
+ /** All properties supported by GreatCircleLayer. */
3
+ export declare type GreatCircleLayerProps<DataT = any> = ArcLayerProps<DataT>;
4
+ /** @deprecated Use ArcLayer with `greatCircle: true` instead */
5
+ export default class GreatCircleLayer<DataT = any, ExtraProps = {}> extends ArcLayer<DataT, ExtraProps> {
6
+ static layerName: string;
7
+ static defaultProps: any;
3
8
  }
4
- declare namespace GreatCircleLayer {
5
- const layerName: string;
6
- namespace defaultProps {
7
- namespace getHeight {
8
- const type: string;
9
- const value: number;
10
- }
11
- const greatCircle: boolean;
12
- }
13
- }
14
- export default GreatCircleLayer;
15
- import { ArcLayer } from '@deck.gl/layers/typed';
16
9
  //# sourceMappingURL=great-circle-layer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"great-circle-layer.d.ts","sourceRoot":"","sources":["../../src/great-circle-layer/great-circle-layer.js"],"names":[],"mappings":"AAwBA;IAfmE,4CAC1B;CAcgB"}
1
+ {"version":3,"file":"great-circle-layer.d.ts","sourceRoot":"","sources":["../../src/great-circle-layer/great-circle-layer.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAOxD,oDAAoD;AACpD,oBAAY,qBAAqB,CAAC,KAAK,GAAG,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAItE,gEAAgE;AAChE,MAAM,CAAC,OAAO,OAAO,gBAAgB,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,GAAG,EAAE,CAAE,SAAQ,QAAQ,CAClF,KAAK,EACL,UAAU,CACX;IACC,MAAM,CAAC,SAAS,SAAsB;IACtC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAgB;CACzC"}