@deck.gl/geo-layers 8.9.0-alpha.5 → 8.9.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 (179) hide show
  1. package/dist/dist.dev.js +25764 -66606
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  3. package/dist/es5/geohash-layer/geohash-layer.js.map +1 -1
  4. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  5. package/dist/es5/h3-layers/h3-cluster-layer.js +2 -2
  6. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  8. package/dist/es5/index.js +4 -8
  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.map +1 -1
  13. package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
  14. package/dist/es5/mvt-layer/mvt-layer.js +9 -9
  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-layer.js.map +1 -1
  18. package/dist/es5/terrain-layer/terrain-layer.js +6 -9
  19. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  20. package/dist/es5/tile-3d-layer/tile-3d-layer.js +9 -8
  21. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  22. package/dist/es5/tile-layer/tile-layer.js +32 -14
  23. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  24. package/dist/es5/tileset-2d/index.js +66 -0
  25. package/dist/es5/tileset-2d/index.js.map +1 -0
  26. package/dist/es5/tileset-2d/memoize.js +47 -0
  27. package/dist/es5/tileset-2d/memoize.js.map +1 -0
  28. package/dist/es5/{tile-layer → tileset-2d}/tile-2d-header.js +3 -5
  29. package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -0
  30. package/dist/es5/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
  31. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -0
  32. package/dist/es5/{tile-layer → tileset-2d}/tileset-2d.js +166 -121
  33. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -0
  34. package/dist/es5/{tile-layer → tileset-2d}/types.js +0 -0
  35. package/dist/es5/{tile-layer → tileset-2d}/types.js.map +0 -0
  36. package/dist/es5/{tile-layer → tileset-2d}/utils.js +17 -18
  37. package/dist/es5/tileset-2d/utils.js.map +1 -0
  38. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  39. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  40. package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
  41. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  42. package/dist/esm/h3-layers/h3-cluster-layer.js +1 -1
  43. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  44. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  45. package/dist/esm/index.js +3 -3
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  48. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  49. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  50. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  51. package/dist/esm/mvt-layer/mvt-layer.js +3 -3
  52. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  53. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  54. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  55. package/dist/esm/terrain-layer/terrain-layer.js +2 -5
  56. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  57. package/dist/esm/tile-3d-layer/tile-3d-layer.js +9 -10
  58. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  59. package/dist/esm/tile-layer/tile-layer.js +16 -6
  60. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  61. package/dist/esm/tileset-2d/index.js +4 -0
  62. package/dist/esm/tileset-2d/index.js.map +1 -0
  63. package/dist/esm/tileset-2d/memoize.js +40 -0
  64. package/dist/esm/tileset-2d/memoize.js.map +1 -0
  65. package/dist/esm/{tile-layer → tileset-2d}/tile-2d-header.js +2 -3
  66. package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -0
  67. package/dist/esm/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
  68. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -0
  69. package/dist/esm/{tile-layer → tileset-2d}/tileset-2d.js +48 -16
  70. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -0
  71. package/dist/esm/{tile-layer → tileset-2d}/types.js +0 -0
  72. package/dist/esm/{tile-layer → tileset-2d}/types.js.map +0 -0
  73. package/dist/esm/{tile-layer → tileset-2d}/utils.js +16 -20
  74. package/dist/esm/tileset-2d/utils.js.map +1 -0
  75. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  76. package/dist.min.js +188 -6
  77. package/package.json +11 -11
  78. package/src/geo-cell-layer/GeoCellLayer.ts +2 -2
  79. package/src/geohash-layer/geohash-layer.ts +4 -4
  80. package/src/great-circle-layer/great-circle-layer.ts +2 -2
  81. package/src/h3-layers/h3-cluster-layer.ts +2 -2
  82. package/src/h3-layers/h3-hexagon-layer.ts +4 -1
  83. package/src/index.ts +9 -5
  84. package/src/mesh-layer/mesh-layer.ts +1 -1
  85. package/src/mvt-layer/coordinate-transform.ts +1 -1
  86. package/src/mvt-layer/mvt-layer.ts +18 -11
  87. package/src/quadkey-layer/quadkey-layer.ts +1 -1
  88. package/src/s2-layer/s2-layer.ts +1 -1
  89. package/src/terrain-layer/terrain-layer.ts +11 -9
  90. package/src/tile-3d-layer/tile-3d-layer.ts +13 -11
  91. package/src/tile-layer/tile-layer.ts +23 -11
  92. package/src/tileset-2d/index.ts +25 -0
  93. package/src/tileset-2d/memoize.ts +45 -0
  94. package/src/{tile-layer → tileset-2d}/tile-2d-header.ts +4 -4
  95. package/src/{tile-layer → tileset-2d}/tile-2d-traversal.ts +3 -1
  96. package/src/{tile-layer → tileset-2d}/tileset-2d.ts +91 -39
  97. package/src/{tile-layer → tileset-2d}/types.ts +0 -0
  98. package/src/{tile-layer → tileset-2d}/utils.ts +26 -12
  99. package/src/trips-layer/trips-layer.ts +1 -1
  100. package/typed/geo-cell-layer/GeoCellLayer.d.ts +2 -2
  101. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
  102. package/typed/geo-cell-layer/GeoCellLayer.js +49 -0
  103. package/typed/geohash-layer/geohash-layer.d.ts +3 -3
  104. package/typed/geohash-layer/geohash-layer.d.ts.map +1 -1
  105. package/typed/great-circle-layer/great-circle-layer.d.ts +3 -2
  106. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
  107. package/typed/great-circle-layer/great-circle-layer.js +29 -0
  108. package/typed/h3-layers/h3-cluster-layer.d.ts +1 -1
  109. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
  110. package/typed/h3-layers/h3-cluster-layer.js +33 -0
  111. package/typed/h3-layers/h3-hexagon-layer.d.ts +1 -1
  112. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  113. package/typed/h3-layers/h3-hexagon-layer.js +251 -0
  114. package/typed/index.d.ts +5 -5
  115. package/typed/index.d.ts.map +1 -1
  116. package/typed/index.js +33 -0
  117. package/typed/mesh-layer/mesh-layer-fragment.glsl.js +55 -0
  118. package/typed/mesh-layer/mesh-layer-vertex.glsl.js +80 -0
  119. package/typed/mesh-layer/mesh-layer.d.ts +1 -1
  120. package/typed/mesh-layer/mesh-layer.d.ts.map +1 -1
  121. package/typed/mesh-layer/mesh-layer.js +110 -0
  122. package/typed/mvt-layer/coordinate-transform.d.ts +1 -1
  123. package/typed/mvt-layer/coordinate-transform.d.ts.map +1 -1
  124. package/typed/mvt-layer/coordinate-transform.js +41 -0
  125. package/typed/mvt-layer/find-index-binary.js +96 -0
  126. package/typed/mvt-layer/mvt-layer.d.ts +3 -4
  127. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  128. package/typed/mvt-layer/mvt-layer.js +297 -0
  129. package/typed/quadkey-layer/quadkey-layer.d.ts +1 -1
  130. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
  131. package/typed/quadkey-layer/quadkey-layer.js +18 -0
  132. package/typed/quadkey-layer/quadkey-utils.js +26 -0
  133. package/typed/s2-layer/s2-geometry.js +123 -0
  134. package/typed/s2-layer/s2-layer.d.ts +1 -1
  135. package/typed/s2-layer/s2-layer.d.ts.map +1 -1
  136. package/typed/s2-layer/s2-layer.js +37 -0
  137. package/typed/s2-layer/s2-utils.js +88 -0
  138. package/typed/terrain-layer/terrain-layer.d.ts +8 -5
  139. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
  140. package/typed/terrain-layer/terrain-layer.js +226 -0
  141. package/typed/tile-3d-layer/tile-3d-layer.d.ts +3 -3
  142. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  143. package/typed/tile-3d-layer/tile-3d-layer.js +294 -0
  144. package/typed/tile-layer/tile-2d-header.js +113 -0
  145. package/typed/tile-layer/tile-2d-traversal.js +181 -0
  146. package/typed/tile-layer/tile-layer.d.ts +6 -7
  147. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  148. package/typed/tile-layer/tile-layer.js +192 -0
  149. package/typed/tile-layer/tileset-2d.d.ts.map +1 -1
  150. package/typed/tile-layer/tileset-2d.js +399 -0
  151. package/typed/tile-layer/types.js +1 -0
  152. package/typed/tile-layer/utils.d.ts +1 -1
  153. package/typed/tile-layer/utils.d.ts.map +1 -1
  154. package/typed/tile-layer/utils.js +197 -0
  155. package/typed/tileset-2d/index.d.ts +7 -0
  156. package/typed/tileset-2d/index.d.ts.map +1 -0
  157. package/typed/tileset-2d/memoize.d.ts +7 -0
  158. package/typed/tileset-2d/memoize.d.ts.map +1 -0
  159. package/typed/tileset-2d/tile-2d-header.d.ts +39 -0
  160. package/typed/tileset-2d/tile-2d-header.d.ts.map +1 -0
  161. package/typed/tileset-2d/tile-2d-traversal.d.ts +4 -0
  162. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  163. package/typed/tileset-2d/tileset-2d.d.ts +121 -0
  164. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -0
  165. package/typed/tileset-2d/types.d.ts +30 -0
  166. package/typed/tileset-2d/types.d.ts.map +1 -0
  167. package/typed/tileset-2d/utils.d.ts +52 -0
  168. package/typed/tileset-2d/utils.d.ts.map +1 -0
  169. package/typed/trips-layer/trips-layer.d.ts +1 -1
  170. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
  171. package/typed/trips-layer/trips-layer.js +92 -0
  172. package/dist/es5/tile-layer/tile-2d-header.js.map +0 -1
  173. package/dist/es5/tile-layer/tile-2d-traversal.js.map +0 -1
  174. package/dist/es5/tile-layer/tileset-2d.js.map +0 -1
  175. package/dist/es5/tile-layer/utils.js.map +0 -1
  176. package/dist/esm/tile-layer/tile-2d-header.js.map +0 -1
  177. package/dist/esm/tile-layer/tile-2d-traversal.js.map +0 -1
  178. package/dist/esm/tile-layer/tileset-2d.js.map +0 -1
  179. package/dist/esm/tile-layer/utils.js.map +0 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/geo-layers",
3
3
  "description": "deck.gl layers supporting geospatial use cases and GIS formats",
4
4
  "license": "MIT",
5
- "version": "8.9.0-alpha.5",
5
+ "version": "8.9.0-beta.2",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -26,17 +26,17 @@
26
26
  ],
27
27
  "sideEffects": false,
28
28
  "scripts": {
29
- "build-bundle": "webpack --config ../../scripts/bundle.config.js",
30
- "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env.dev"
29
+ "build-bundle": "ocular-bundle ./bundle.ts",
30
+ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev"
31
31
  },
32
32
  "dependencies": {
33
- "@loaders.gl/3d-tiles": "^3.2.10",
34
- "@loaders.gl/gis": "^3.2.10",
35
- "@loaders.gl/loader-utils": "^3.2.10",
36
- "@loaders.gl/mvt": "^3.2.10",
37
- "@loaders.gl/schema": "^3.2.10",
38
- "@loaders.gl/terrain": "^3.2.10",
39
- "@loaders.gl/tiles": "^3.2.10",
33
+ "@loaders.gl/3d-tiles": "^3.3.1",
34
+ "@loaders.gl/gis": "^3.3.1",
35
+ "@loaders.gl/loader-utils": "^3.3.1",
36
+ "@loaders.gl/mvt": "^3.3.1",
37
+ "@loaders.gl/schema": "^3.3.1",
38
+ "@loaders.gl/terrain": "^3.3.1",
39
+ "@loaders.gl/tiles": "^3.3.1",
40
40
  "@luma.gl/constants": "^8.5.16",
41
41
  "@luma.gl/experimental": "^8.5.16",
42
42
  "@math.gl/core": "^3.6.2",
@@ -54,5 +54,5 @@
54
54
  "@loaders.gl/core": "^3.0.0",
55
55
  "@luma.gl/core": "^8.0.0"
56
56
  },
57
- "gitHead": "36330f8ca588055b11ed8032dc68ced641cb258b"
57
+ "gitHead": "5dae086e4f3eb46c30d8e761f9d600be4f68e949"
58
58
  }
@@ -8,11 +8,11 @@ const defaultProps: DefaultProps<GeoCellLayerProps> = {
8
8
  /** All properties supported by GeoCellLayer. */
9
9
  export type GeoCellLayerProps<DataT = any> = PolygonLayerProps<DataT> & CompositeLayerProps<DataT>;
10
10
 
11
- export default class GeoCellLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<
11
+ export default class GeoCellLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<
12
12
  Required<GeoCellLayerProps<DataT>> & ExtraProps
13
13
  > {
14
14
  static layerName = 'GeoCellLayer';
15
- static defaultProps = defaultProps;
15
+ static defaultProps: DefaultProps = defaultProps;
16
16
 
17
17
  /** Implement to generate props to create geometry. */
18
18
  indexToBounds(): Partial<GeoCellLayer['props']> | null {
@@ -1,8 +1,8 @@
1
- import {AccessorFunction} from '@deck.gl/core';
1
+ import {AccessorFunction, DefaultProps} from '@deck.gl/core';
2
2
  import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
3
3
  import {getGeohashPolygon} from './geohash-utils';
4
4
 
5
- const defaultProps = {
5
+ const defaultProps: DefaultProps<GeohashLayerProps> = {
6
6
  getGeohash: {type: 'accessor', value: d => d.geohash}
7
7
  };
8
8
 
@@ -19,12 +19,12 @@ type GeohashLayerProps<DataT = any> = {
19
19
  };
20
20
 
21
21
  /** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */
22
- export default class GeohashLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
22
+ export default class GeohashLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<
23
23
  DataT,
24
24
  Required<GeohashLayerProps> & ExtraProps
25
25
  > {
26
26
  static layerName = 'GeohashLayer';
27
- static defaultProps: any = defaultProps;
27
+ static defaultProps = defaultProps;
28
28
 
29
29
  indexToBounds(): Partial<GeoCellLayer['props']> | null {
30
30
  const {data, getGeohash} = this.props;
@@ -31,10 +31,10 @@ export type GreatCircleLayerProps<DataT = any> = ArcLayerProps<DataT>;
31
31
  // This layer has been merged into the core ArcLayer
32
32
  // Keeping for backward-compatibility
33
33
  /** @deprecated Use ArcLayer with `greatCircle: true` instead */
34
- export default class GreatCircleLayer<DataT = any, ExtraProps = {}> extends ArcLayer<
34
+ export default class GreatCircleLayer<DataT = any, ExtraProps extends {} = {}> extends ArcLayer<
35
35
  DataT,
36
36
  ExtraProps
37
37
  > {
38
38
  static layerName = 'GreatCircleLayer';
39
- static defaultProps: any = defaultProps;
39
+ static defaultProps = defaultProps;
40
40
  }
@@ -1,7 +1,7 @@
1
1
  import {h3SetToMultiPolygon, H3IndexInput} from 'h3-js';
2
2
 
3
3
  import {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';
4
- import {H3HexagonLayer} from '@deck.gl/geo-layers';
4
+ import {default as H3HexagonLayer} from './h3-hexagon-layer';
5
5
  import GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';
6
6
 
7
7
  const defaultProps: DefaultProps<H3ClusterLayerProps> = {
@@ -22,7 +22,7 @@ type _H3ClusterLayerProps<DataT> = {
22
22
  getHexagons?: AccessorFunction<DataT, H3IndexInput[]>;
23
23
  };
24
24
 
25
- export default class H3ClusterLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
25
+ export default class H3ClusterLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<
26
26
  DataT,
27
27
  Required<_H3ClusterLayerProps<DataT>> & ExtraProps
28
28
  > {
@@ -145,7 +145,10 @@ type _H3HexagonLayerProps<DataT> = {
145
145
  /**
146
146
  * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.
147
147
  */
148
- export default class H3HexagonLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
148
+ export default class H3HexagonLayer<
149
+ DataT = any,
150
+ ExtraPropsT extends {} = {}
151
+ > extends CompositeLayer<
149
152
  ExtraPropsT & Required<_H3HexagonLayerProps<DataT> & Required<PolygonLayerProps<DataT>>>
150
153
  > {
151
154
  static defaultProps = defaultProps;
package/src/index.ts CHANGED
@@ -32,9 +32,6 @@ export {default as MVTLayer} from './mvt-layer/mvt-layer';
32
32
  export {default as GeohashLayer} from './geohash-layer/geohash-layer';
33
33
 
34
34
  export {default as _GeoCellLayer} from './geo-cell-layer/GeoCellLayer';
35
- export {getURLFromTemplate as _getURLFromTemplate} from './tile-layer/utils';
36
- export {default as _Tileset2D} from './tile-layer/tileset-2d';
37
- export {default as _Tile2DHeader} from './tile-layer/tile-2d-header';
38
35
 
39
36
  // Types
40
37
  export type {H3ClusterLayerProps} from './h3-layers/h3-cluster-layer';
@@ -42,10 +39,17 @@ export type {H3HexagonLayerProps} from './h3-layers/h3-hexagon-layer';
42
39
  export type {GreatCircleLayerProps} from './great-circle-layer/great-circle-layer';
43
40
  export type {S2LayerProps} from './s2-layer/s2-layer';
44
41
  export type {TileLayerProps} from './tile-layer/tile-layer';
45
- export type {GeoBoundingBox, NonGeoBoundingBox} from './tile-layer/types';
46
42
  export type {QuadkeyLayerProps} from './quadkey-layer/quadkey-layer';
47
- export type {TileLoadProps as _TileLoadProps} from './tile-layer/types';
48
43
  export type {TerrainLayerProps} from './terrain-layer/terrain-layer';
49
44
  export type {Tile3DLayerProps} from './tile-3d-layer/tile-3d-layer';
50
45
  export type {MVTLayerProps} from './mvt-layer/mvt-layer';
51
46
  export type {GeoCellLayerProps as _GeoCellLayerProps} from './geo-cell-layer/GeoCellLayer';
47
+
48
+ // Tileset2D
49
+
50
+ export type {GeoBoundingBox, NonGeoBoundingBox} from './tileset-2d';
51
+ export type {TileLoadProps as _TileLoadProps} from './tileset-2d';
52
+
53
+ export {getURLFromTemplate as _getURLFromTemplate} from './tileset-2d';
54
+ export {Tileset2D as _Tileset2D} from './tileset-2d';
55
+ export {Tile2DHeader as _Tile2DHeader} from './tileset-2d';
@@ -42,7 +42,7 @@ type _MeshLayerProps<DataT> = {
42
42
  featureIds?: NumericArray | null;
43
43
  };
44
44
 
45
- export default class MeshLayer<DataT = any, ExtraProps = {}> extends SimpleMeshLayer<
45
+ export default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<
46
46
  DataT,
47
47
  Required<_MeshLayerProps<DataT>> & ExtraProps
48
48
  > {
@@ -1,6 +1,6 @@
1
1
  import {Viewport} from '@deck.gl/core';
2
2
  import {lerp} from '@math.gl/core';
3
- import {GeoBoundingBox} from '../tile-layer/types';
3
+ import {GeoBoundingBox} from '../tileset-2d';
4
4
 
5
5
  const availableTransformations = {
6
6
  Point,
@@ -10,23 +10,30 @@ import {
10
10
  DefaultProps
11
11
  } from '@deck.gl/core';
12
12
  import {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';
13
+ import {ClipExtension} from '@deck.gl/extensions';
14
+
13
15
  import {Matrix4} from '@math.gl/core';
14
16
  import {MVTWorkerLoader} from '@loaders.gl/mvt';
15
17
  import {binaryToGeojson} from '@loaders.gl/gis';
16
- import {ClipExtension} from '@deck.gl/extensions';
17
18
 
18
19
  import type {Loader} from '@loaders.gl/loader-utils';
19
20
  import type {BinaryFeatures} from '@loaders.gl/schema';
20
21
  import type {Feature} from 'geojson';
21
22
 
22
- import TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';
23
- import Tileset2D, {Tileset2DProps} from '../tile-layer/tileset-2d';
24
- import {getURLFromTemplate, isGeoBoundingBox, isURLTemplate} from '../tile-layer/utils';
25
- import {GeoBoundingBox, TileLoadProps} from '../tile-layer/types';
26
- import Tile2DHeader from '../tile-layer/tile-2d-header';
27
23
  import {transform} from './coordinate-transform';
28
24
  import findIndexBinary from './find-index-binary';
29
25
 
26
+ import TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';
27
+
28
+ import type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d';
29
+ import {
30
+ Tileset2D,
31
+ Tile2DHeader,
32
+ getURLFromTemplate,
33
+ isGeoBoundingBox,
34
+ isURLTemplate
35
+ } from '../tileset-2d';
36
+
30
37
  const WORLD_SIZE = 512;
31
38
 
32
39
  const defaultProps: DefaultProps<MVTLayerProps> = {
@@ -86,10 +93,10 @@ export type _MVTLayerProps = {
86
93
  type ContentWGS84Cache = {_contentWGS84?: Feature[]};
87
94
 
88
95
  /** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */
89
- export default class MVTLayer<DataT extends Feature = Feature, ExtraProps = {}> extends TileLayer<
90
- ParsedMvtTile,
91
- Required<_MVTLayerProps> & ExtraProps
92
- > {
96
+ export default class MVTLayer<
97
+ DataT extends Feature = Feature,
98
+ ExtraProps extends {} = {}
99
+ > extends TileLayer<ParsedMvtTile, Required<_MVTLayerProps> & ExtraProps> {
93
100
  static layerName = 'MVTLayer';
94
101
  static defaultProps = defaultProps;
95
102
 
@@ -285,7 +292,7 @@ export default class MVTLayer<DataT extends Feature = Feature, ExtraProps = {}>
285
292
  if (info.object && !isWGS84) {
286
293
  info.object = transformTileCoordsToWGS84(
287
294
  info.object,
288
- info.tile!.bbox as GeoBoundingBox,
295
+ info.tile!.bbox as GeoBoundingBox, // eslint-disable-line
289
296
  this.context.viewport
290
297
  );
291
298
  }
@@ -20,7 +20,7 @@ type _QuadkeyLayerProps<DataT> = {
20
20
  };
21
21
 
22
22
  /** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */
23
- export default class QuadkeyLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
23
+ export default class QuadkeyLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<
24
24
  DataT,
25
25
  Required<_QuadkeyLayerProps<DataT>> & ExtraProps
26
26
  > {
@@ -40,7 +40,7 @@ type _S2LayerProps<DataT> = {
40
40
  };
41
41
 
42
42
  /** Render filled and/or stroked polygons based on the [S2](http://s2geometry.io/) geospatial indexing system. */
43
- export default class S2Layer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
43
+ export default class S2Layer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<
44
44
  DataT,
45
45
  Required<_S2LayerProps<DataT>> & ExtraProps
46
46
  > {
@@ -35,9 +35,8 @@ import {COORDINATE_SYSTEM} from '@deck.gl/core';
35
35
  import type {MeshAttributes} from '@loaders.gl/schema';
36
36
  import {TerrainWorkerLoader} from '@loaders.gl/terrain';
37
37
  import TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';
38
- import Tile2DHeader from '../tile-layer/tile-2d-header';
39
- import {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tile-layer/types';
40
- import {urlType, getURLFromTemplate} from '../tile-layer/utils';
38
+ import type {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tileset-2d';
39
+ import {Tile2DHeader, urlType, getURLFromTemplate, URLTemplate} from '../tileset-2d';
41
40
 
42
41
  const DUMMY_DATA = [1];
43
42
 
@@ -64,7 +63,7 @@ const defaultProps: DefaultProps<TerrainLayerProps> = {
64
63
  }
65
64
  },
66
65
  // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.
67
- workerUrl: {type: 'string', value: null},
66
+ workerUrl: '',
68
67
  // Same as SimpleMeshLayer wireframe
69
68
  wireframe: false,
70
69
  material: true,
@@ -72,10 +71,8 @@ const defaultProps: DefaultProps<TerrainLayerProps> = {
72
71
  loaders: [TerrainWorkerLoader]
73
72
  };
74
73
 
75
- type URLTemplate = string | string[];
76
-
77
74
  // Turns array of templates into a single string to work around shallow change
78
- function urlTemplateToUpdateTrigger(template: URLTemplate | null): string {
75
+ function urlTemplateToUpdateTrigger(template: URLTemplate): string {
79
76
  if (Array.isArray(template)) {
80
77
  return template.join(';');
81
78
  }
@@ -104,7 +101,7 @@ type _TerrainLayerProps = {
104
101
  elevationData: URLTemplate;
105
102
 
106
103
  /** Image url to use as texture. **/
107
- texture?: URLTemplate | null;
104
+ texture?: URLTemplate;
108
105
 
109
106
  /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/
110
107
  meshMaxError?: number;
@@ -123,10 +120,15 @@ type _TerrainLayerProps = {
123
120
 
124
121
  /** Material props for lighting effect. **/
125
122
  material?: Material;
123
+
124
+ /**
125
+ * @deprecated Use `loadOptions.terrain.workerUrl` instead
126
+ */
127
+ workerUrl?: string;
126
128
  };
127
129
 
128
130
  /** Render mesh surfaces from height map images. */
129
- export default class TerrainLayer<ExtraPropsT = {}> extends CompositeLayer<
131
+ export default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<
130
132
  ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>
131
133
  > {
132
134
  static defaultProps = defaultProps;
@@ -76,10 +76,10 @@ type _Tile3DLayerProps<DataT> = {
76
76
  };
77
77
 
78
78
  /** Render 3d tiles data formatted according to the [3D Tiles Specification](https://www.opengeospatial.org/standards/3DTiles) and [`ESRI I3S`](https://github.com/Esri/i3s-spec) */
79
- export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
79
+ export default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<
80
80
  ExtraPropsT & Required<_Tile3DLayerProps<DataT>>
81
81
  > {
82
- static defaultProps = defaultProps as any;
82
+ static defaultProps = defaultProps;
83
83
  static layerName = 'Tile3DLayer';
84
84
 
85
85
  state!: {
@@ -114,6 +114,7 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends Composit
114
114
 
115
115
  updateState({props, oldProps, changeFlags}: UpdateParameters<this>): void {
116
116
  if (props.data && props.data !== oldProps.data) {
117
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
117
118
  this._loadTileset(props.data);
118
119
  }
119
120
 
@@ -147,14 +148,11 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends Composit
147
148
  }
148
149
 
149
150
  getPickingInfo({info, sourceLayer}: GetPickingInfoParams) {
150
- const {layerMap} = this.state;
151
- const layerId = sourceLayer && sourceLayer.id;
152
- if (layerId) {
153
- // layerId: this.id-[scenegraph|pointcloud]-tileId
154
- const substr = layerId.substring(this.id.length + 1);
155
- const tileId = substr.substring(substr.indexOf('-') + 1);
156
- info.object = layerMap[tileId] && layerMap[tileId].tile;
151
+ const sourceTile = sourceLayer && (sourceLayer.props as any).tile;
152
+ if (info.picked) {
153
+ info.object = sourceTile;
157
154
  }
155
+ (info as any).sourceTile = sourceTile;
158
156
 
159
157
  return info;
160
158
  }
@@ -167,8 +165,10 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends Composit
167
165
  }
168
166
 
169
167
  protected _updateAutoHighlight(info: PickingInfo): void {
170
- if (info.sourceLayer) {
171
- info.sourceLayer.updateAutoHighlight(info);
168
+ const sourceTile = (info as any).sourceTile;
169
+ const layerCache = this.state.layerMap[sourceTile?.id];
170
+ if (layerCache && layerCache.layer) {
171
+ layerCache.layer.updateAutoHighlight(info);
172
172
  }
173
173
  }
174
174
 
@@ -235,6 +235,8 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT = {}> extends Composit
235
235
  if (!timeline || !viewportsNumber || !tileset3d) {
236
236
  return;
237
237
  }
238
+
239
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
238
240
  tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {
239
241
  const tilesetChanged = this.state.frameNumber !== frameNumber;
240
242
  if (tilesetChanged) {
@@ -12,16 +12,21 @@ import {
12
12
  } from '@deck.gl/core';
13
13
  import {GeoJsonLayer} from '@deck.gl/layers';
14
14
  import {LayersList} from '@deck.gl/core';
15
- import Tile2DHeader from './tile-2d-header';
16
15
 
17
- import Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';
18
- import {TileLoadProps, ZRange} from './types';
19
- import {urlType, getURLFromTemplate} from './utils';
16
+ import type {TileLoadProps, ZRange} from '../tileset-2d';
17
+ import {
18
+ Tileset2D,
19
+ Tile2DHeader,
20
+ RefinementStrategy,
21
+ STRATEGY_DEFAULT,
22
+ Tileset2DProps
23
+ } from '../tileset-2d';
24
+ import {urlType, getURLFromTemplate} from '../tileset-2d';
20
25
 
21
26
  const defaultProps: DefaultProps<TileLayerProps> = {
22
27
  TilesetClass: Tileset2D,
23
28
  data: {type: 'data', value: []},
24
- dataComparator: urlType.equals,
29
+ dataComparator: urlType.equal,
25
30
  renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},
26
31
  getTileData: {type: 'function', optional: true, value: null, compare: false},
27
32
  // TODO - change to onViewportLoad to align with Tile3DLayer
@@ -77,7 +82,7 @@ type _TileLayerProps<DataT> = {
77
82
  onTileUnload?: (tile: Tile2DHeader<DataT>) => void;
78
83
 
79
84
  /** Called when a tile failed to load. */
80
- onTileError?: (err: any) => void;
85
+ onTileError?: (err: any, tile?) => void;
81
86
 
82
87
  /** The bounding box of the layer's data. */
83
88
  extent?: number[] | null;
@@ -141,10 +146,10 @@ export type TiledPickingInfo<DataT = any> = PickingInfo & {
141
146
  *
142
147
  * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.
143
148
  */
144
- export default class TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
149
+ export default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<
145
150
  ExtraPropsT & Required<_TileLayerProps<DataT>>
146
151
  > {
147
- static defaultProps = defaultProps as any;
152
+ static defaultProps: DefaultProps = defaultProps;
148
153
  static layerName = 'TileLayer';
149
154
 
150
155
  initializeState() {
@@ -310,13 +315,20 @@ export default class TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeL
310
315
  }
311
316
 
312
317
  getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {
313
- (info as any).tile = (sourceLayer as any).props.tile;
318
+ const sourceTile = (sourceLayer as any).props.tile;
319
+ if (info.picked) {
320
+ (info as any).tile = sourceTile;
321
+ }
322
+ (info as any).sourceTile = sourceTile;
314
323
  return info;
315
324
  }
316
325
 
317
326
  protected _updateAutoHighlight(info: PickingInfo): void {
318
- if (info.sourceLayer) {
319
- info.sourceLayer.updateAutoHighlight(info);
327
+ const sourceTile = (info as any).sourceTile as Tile2DHeader;
328
+ if (sourceTile && sourceTile.layers) {
329
+ for (const layer of sourceTile.layers) {
330
+ layer.updateAutoHighlight(info);
331
+ }
320
332
  }
321
333
  }
322
334
 
@@ -0,0 +1,25 @@
1
+ // deck.gl, MIT license
2
+
3
+ export type {
4
+ TileLoadProps,
5
+ Bounds,
6
+ ZRange,
7
+ GeoBoundingBox,
8
+ NonGeoBoundingBox,
9
+ TileBoundingBox
10
+ } from './types';
11
+
12
+ export type {Tileset2DProps, RefinementStrategy} from './tileset-2d';
13
+ export {Tileset2D, STRATEGY_DEFAULT} from './tileset-2d';
14
+
15
+ export {Tile2DHeader} from './tile-2d-header';
16
+
17
+ export type {URLTemplate} from './utils';
18
+ export {
19
+ isGeoBoundingBox,
20
+ isURLTemplate,
21
+ urlType,
22
+ getURLFromTemplate,
23
+ getTileIndices,
24
+ tileToBoundingBox
25
+ } from './utils';
@@ -0,0 +1,45 @@
1
+ // deck.gl, MIT license
2
+ // @note - this is a duplicate of the deck.gl core export (because Tileset2D should be deck.gl independent)
3
+
4
+ /**
5
+ * Speed up consecutive function calls by caching the result of calls with identical input
6
+ * https://en.wikipedia.org/wiki/Memoization
7
+ * @param compute - the function to be memoized
8
+ */
9
+ export function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {
10
+ let cachedArgs: any = {};
11
+ let cachedResult: Out;
12
+
13
+ return (args: In) => {
14
+ for (const key in args) {
15
+ if (!isEqual(args[key], cachedArgs[key])) {
16
+ cachedResult = compute(args);
17
+ cachedArgs = args;
18
+ break;
19
+ }
20
+ }
21
+ return cachedResult;
22
+ };
23
+ }
24
+
25
+ function isEqual(a, b) {
26
+ if (a === b) {
27
+ return true;
28
+ }
29
+ if (Array.isArray(a)) {
30
+ // Special treatment for arrays: compare 1-level deep
31
+ // This is to support equality of matrix/coordinate props
32
+ const len = a.length;
33
+ if (!b || b.length !== len) {
34
+ return false;
35
+ }
36
+
37
+ for (let i = 0; i < len; i++) {
38
+ if (a[i] !== b[i]) {
39
+ return false;
40
+ }
41
+ }
42
+ return true;
43
+ }
44
+ return false;
45
+ }
@@ -1,5 +1,4 @@
1
1
  /* eslint-env browser */
2
- import {Layer, log} from '@deck.gl/core';
3
2
  import {RequestScheduler} from '@loaders.gl/loader-utils';
4
3
  import {TileBoundingBox, TileIndex, TileLoadProps} from './types';
5
4
 
@@ -10,7 +9,7 @@ export type TileLoadDataProps<DataT = any> = {
10
9
  onError: (error: any, tile: Tile2DHeader<DataT>) => void;
11
10
  };
12
11
 
13
- export default class Tile2DHeader<DataT = any> {
12
+ export class Tile2DHeader<DataT = any> {
14
13
  index: TileIndex;
15
14
  isVisible: boolean;
16
15
  isSelected: boolean;
@@ -18,7 +17,7 @@ export default class Tile2DHeader<DataT = any> {
18
17
  children: Tile2DHeader[] | null;
19
18
  content: DataT | null;
20
19
  state?: number;
21
- layers?: Layer[] | null;
20
+ layers?: any[] | null; // Layer[] | null
22
21
 
23
22
  id!: string; // assigned _always_ with result of `getTileId`
24
23
  bbox!: TileBoundingBox; // assigned _always_ with result of `getTileMetadata`
@@ -68,7 +67,8 @@ export default class Tile2DHeader<DataT = any> {
68
67
  get byteLength(): number {
69
68
  const result = this.content ? (this.content as any).byteLength : 0;
70
69
  if (!Number.isFinite(result)) {
71
- log.error('byteLength not defined in tile data')();
70
+ // eslint-disable-next-line no-console
71
+ console.error('byteLength not defined in tile data');
72
72
  }
73
73
  return result;
74
74
  }
@@ -1,5 +1,5 @@
1
- /* eslint-disable complexity */
2
1
  import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';
2
+
3
3
  import {
4
4
  CullingVolume,
5
5
  Plane,
@@ -63,6 +63,7 @@ class OSMNode {
63
63
  return this._children;
64
64
  }
65
65
 
66
+ // eslint-disable-next-line complexity
66
67
  update(params: {
67
68
  viewport: Viewport;
68
69
  project: ((xyz: number[]) => number[]) | null;
@@ -178,6 +179,7 @@ class OSMNode {
178
179
  }
179
180
  }
180
181
 
182
+ // eslint-disable-next-line complexity
181
183
  export function getOSMTileIndices(
182
184
  viewport: Viewport,
183
185
  maxZ: number,