@deck.gl/geo-layers 9.0.0-beta.1 → 9.0.0-beta.10

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 (262) hide show
  1. package/dist/dist.dev.js +2574 -5077
  2. package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
  3. package/{typed → dist}/geohash-layer/geohash-layer.d.ts +1 -1
  4. package/dist/geohash-layer/geohash-layer.d.ts.map +1 -0
  5. package/dist/geohash-layer/geohash-layer.js +19 -0
  6. package/dist/geohash-layer/geohash-utils.js +50 -0
  7. package/dist/great-circle-layer/great-circle-layer.js +12 -0
  8. package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +1 -1
  9. package/dist/h3-layers/h3-cluster-layer.d.ts.map +1 -0
  10. package/dist/h3-layers/h3-cluster-layer.js +47 -0
  11. package/dist/h3-layers/h3-hexagon-layer.js +204 -0
  12. package/dist/h3-layers/h3-utils.js +56 -0
  13. package/dist/index.cjs +3160 -0
  14. package/dist/index.cjs.map +7 -0
  15. package/dist/index.d.ts +31 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +36 -0
  18. package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +3 -0
  19. package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -1
  20. package/dist/mesh-layer/mesh-layer-fragment.glsl.js +33 -0
  21. package/dist/mesh-layer/mesh-layer-vertex.glsl.js +63 -0
  22. package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +1 -1
  23. package/dist/mesh-layer/mesh-layer.js +128 -0
  24. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
  25. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
  26. package/dist/mvt-layer/coordinate-transform.js +41 -0
  27. package/dist/mvt-layer/find-index-binary.d.ts +11 -0
  28. package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
  29. package/dist/mvt-layer/find-index-binary.js +96 -0
  30. package/{typed → dist}/mvt-layer/mvt-layer.d.ts +13 -11
  31. package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
  32. package/dist/mvt-layer/mvt-layer.js +305 -0
  33. package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +1 -1
  34. package/dist/quadkey-layer/quadkey-layer.d.ts.map +1 -0
  35. package/dist/quadkey-layer/quadkey-layer.js +22 -0
  36. package/dist/quadkey-layer/quadkey-utils.js +26 -0
  37. package/dist/s2-layer/s2-geometry.js +123 -0
  38. package/{typed → dist}/s2-layer/s2-layer.d.ts +1 -1
  39. package/dist/s2-layer/s2-layer.d.ts.map +1 -0
  40. package/dist/s2-layer/s2-layer.js +38 -0
  41. package/dist/s2-layer/s2-utils.js +87 -0
  42. package/{typed → dist}/terrain-layer/terrain-layer.d.ts +4 -4
  43. package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
  44. package/dist/terrain-layer/terrain-layer.js +233 -0
  45. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +15 -1
  46. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  47. package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
  48. package/{typed → dist}/tile-layer/tile-layer.d.ts +14 -5
  49. package/dist/tile-layer/tile-layer.d.ts.map +1 -0
  50. package/dist/tile-layer/tile-layer.js +207 -0
  51. package/dist/tileset-2d/index.d.ts +7 -0
  52. package/dist/tileset-2d/index.d.ts.map +1 -0
  53. package/dist/tileset-2d/index.js +4 -0
  54. package/dist/tileset-2d/memoize.js +41 -0
  55. package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +3 -2
  56. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  57. package/dist/tileset-2d/tile-2d-header.js +135 -0
  58. package/dist/tileset-2d/tile-2d-traversal.d.ts +4 -0
  59. package/dist/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  60. package/dist/tileset-2d/tile-2d-traversal.js +182 -0
  61. package/{typed → dist}/tileset-2d/tileset-2d.d.ts +9 -7
  62. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  63. package/dist/tileset-2d/tileset-2d.js +458 -0
  64. package/dist/tileset-2d/types.js +1 -0
  65. package/{typed → dist}/tileset-2d/utils.d.ts +3 -3
  66. package/dist/tileset-2d/utils.d.ts.map +1 -0
  67. package/dist/tileset-2d/utils.js +234 -0
  68. package/{typed → dist}/trips-layer/trips-layer.d.ts +1 -1
  69. package/{typed → dist}/trips-layer/trips-layer.d.ts.map +1 -1
  70. package/dist/trips-layer/trips-layer.js +93 -0
  71. package/dist/wms-layer/utils.js +13 -0
  72. package/dist/wms-layer/wms-layer.js +192 -0
  73. package/dist.min.js +243 -564
  74. package/package.json +30 -23
  75. package/src/index.ts +7 -7
  76. package/src/mesh-layer/mesh-layer-fragment.glsl.ts +1 -9
  77. package/src/mesh-layer/mesh-layer.ts +1 -2
  78. package/src/mvt-layer/coordinate-transform.ts +1 -1
  79. package/src/mvt-layer/find-index-binary.ts +5 -9
  80. package/src/mvt-layer/mvt-layer.ts +36 -25
  81. package/src/terrain-layer/terrain-layer.ts +13 -3
  82. package/src/tile-layer/tile-layer.ts +30 -14
  83. package/src/tileset-2d/tile-2d-header.ts +2 -1
  84. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  85. package/src/tileset-2d/tileset-2d.ts +14 -7
  86. package/src/tileset-2d/utils.ts +2 -2
  87. package/src/trips-layer/trips-layer.ts +1 -1
  88. package/src/wms-layer/wms-layer.ts +1 -1
  89. package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
  90. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
  91. package/dist/es5/geohash-layer/geohash-layer.js +0 -67
  92. package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
  93. package/dist/es5/geohash-layer/geohash-utils.js +0 -77
  94. package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
  95. package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
  96. package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
  97. package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
  98. package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
  99. package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
  100. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
  101. package/dist/es5/h3-layers/h3-utils.js +0 -111
  102. package/dist/es5/h3-layers/h3-utils.js.map +0 -1
  103. package/dist/es5/index.js +0 -132
  104. package/dist/es5/index.js.map +0 -1
  105. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
  106. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  107. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
  108. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  109. package/dist/es5/mesh-layer/mesh-layer.js +0 -217
  110. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  111. package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
  112. package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
  113. package/dist/es5/mvt-layer/find-index-binary.js +0 -127
  114. package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
  115. package/dist/es5/mvt-layer/mvt-layer.js +0 -533
  116. package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
  117. package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
  118. package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
  119. package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
  120. package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
  121. package/dist/es5/s2-layer/s2-geometry.js +0 -158
  122. package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
  123. package/dist/es5/s2-layer/s2-layer.js +0 -67
  124. package/dist/es5/s2-layer/s2-layer.js.map +0 -1
  125. package/dist/es5/s2-layer/s2-utils.js +0 -80
  126. package/dist/es5/s2-layer/s2-utils.js.map +0 -1
  127. package/dist/es5/terrain-layer/terrain-layer.js +0 -347
  128. package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
  129. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
  130. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  131. package/dist/es5/tile-layer/tile-layer.js +0 -363
  132. package/dist/es5/tile-layer/tile-layer.js.map +0 -1
  133. package/dist/es5/tileset-2d/index.js +0 -66
  134. package/dist/es5/tileset-2d/index.js.map +0 -1
  135. package/dist/es5/tileset-2d/memoize.js +0 -47
  136. package/dist/es5/tileset-2d/memoize.js.map +0 -1
  137. package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
  138. package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
  139. package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
  140. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
  141. package/dist/es5/tileset-2d/tileset-2d.js +0 -757
  142. package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
  143. package/dist/es5/tileset-2d/types.js +0 -2
  144. package/dist/es5/tileset-2d/types.js.map +0 -1
  145. package/dist/es5/tileset-2d/utils.js +0 -302
  146. package/dist/es5/tileset-2d/utils.js.map +0 -1
  147. package/dist/es5/trips-layer/trips-layer.js +0 -114
  148. package/dist/es5/trips-layer/trips-layer.js.map +0 -1
  149. package/dist/es5/wms-layer/utils.js +0 -18
  150. package/dist/es5/wms-layer/utils.js.map +0 -1
  151. package/dist/es5/wms-layer/wms-layer.js +0 -376
  152. package/dist/es5/wms-layer/wms-layer.js.map +0 -1
  153. package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
  154. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
  155. package/dist/esm/geohash-layer/geohash-layer.js +0 -26
  156. package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
  157. package/dist/esm/geohash-layer/geohash-utils.js +0 -56
  158. package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
  159. package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
  160. package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
  161. package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
  162. package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
  163. package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
  164. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
  165. package/dist/esm/h3-layers/h3-utils.js +0 -54
  166. package/dist/esm/h3-layers/h3-utils.js.map +0 -1
  167. package/dist/esm/index.js +0 -17
  168. package/dist/esm/index.js.map +0 -1
  169. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +0 -56
  170. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  171. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +0 -85
  172. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  173. package/dist/esm/mesh-layer/mesh-layer.js +0 -178
  174. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  175. package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
  176. package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
  177. package/dist/esm/mvt-layer/find-index-binary.js +0 -99
  178. package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
  179. package/dist/esm/mvt-layer/mvt-layer.js +0 -427
  180. package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
  181. package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
  182. package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
  183. package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
  184. package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
  185. package/dist/esm/s2-layer/s2-geometry.js +0 -126
  186. package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
  187. package/dist/esm/s2-layer/s2-layer.js +0 -26
  188. package/dist/esm/s2-layer/s2-layer.js.map +0 -1
  189. package/dist/esm/s2-layer/s2-utils.js +0 -69
  190. package/dist/esm/s2-layer/s2-utils.js.map +0 -1
  191. package/dist/esm/terrain-layer/terrain-layer.js +0 -292
  192. package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
  193. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
  194. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  195. package/dist/esm/tile-layer/tile-layer.js +0 -299
  196. package/dist/esm/tile-layer/tile-layer.js.map +0 -1
  197. package/dist/esm/tileset-2d/index.js +0 -4
  198. package/dist/esm/tileset-2d/index.js.map +0 -1
  199. package/dist/esm/tileset-2d/memoize.js +0 -40
  200. package/dist/esm/tileset-2d/memoize.js.map +0 -1
  201. package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
  202. package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
  203. package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
  204. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
  205. package/dist/esm/tileset-2d/tileset-2d.js +0 -509
  206. package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
  207. package/dist/esm/tileset-2d/types.js +0 -2
  208. package/dist/esm/tileset-2d/types.js.map +0 -1
  209. package/dist/esm/tileset-2d/utils.js +0 -233
  210. package/dist/esm/tileset-2d/utils.js.map +0 -1
  211. package/dist/esm/trips-layer/trips-layer.js +0 -88
  212. package/dist/esm/trips-layer/trips-layer.js.map +0 -1
  213. package/dist/esm/wms-layer/utils.js +0 -9
  214. package/dist/esm/wms-layer/utils.js.map +0 -1
  215. package/dist/esm/wms-layer/wms-layer.js +0 -231
  216. package/dist/esm/wms-layer/wms-layer.js.map +0 -1
  217. package/typed/geohash-layer/geohash-layer.d.ts.map +0 -1
  218. package/typed/h3-layers/h3-cluster-layer.d.ts.map +0 -1
  219. package/typed/index.d.ts +0 -31
  220. package/typed/index.d.ts.map +0 -1
  221. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -3
  222. package/typed/mvt-layer/find-index-binary.d.ts +0 -12
  223. package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
  224. package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
  225. package/typed/quadkey-layer/quadkey-layer.d.ts.map +0 -1
  226. package/typed/s2-layer/s2-layer.d.ts.map +0 -1
  227. package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
  228. package/typed/tile-layer/tile-layer.d.ts.map +0 -1
  229. package/typed/tileset-2d/index.d.ts +0 -7
  230. package/typed/tileset-2d/index.d.ts.map +0 -1
  231. package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
  232. package/typed/tileset-2d/tile-2d-traversal.d.ts +0 -4
  233. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +0 -1
  234. package/typed/tileset-2d/tileset-2d.d.ts.map +0 -1
  235. package/typed/tileset-2d/utils.d.ts.map +0 -1
  236. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
  237. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
  238. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
  239. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
  240. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
  241. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
  242. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
  243. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
  244. /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
  245. /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
  246. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
  247. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
  248. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
  249. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
  250. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
  251. /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
  252. /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
  253. /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
  254. /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
  255. /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
  256. /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
  257. /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
  258. /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
  259. /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
  260. /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
  261. /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
  262. /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
@@ -0,0 +1,207 @@
1
+ import { CompositeLayer, _flatten as flatten } from '@deck.gl/core';
2
+ import { GeoJsonLayer } from '@deck.gl/layers';
3
+ import { Tileset2D, STRATEGY_DEFAULT } from "../tileset-2d/index.js";
4
+ import { urlType, getURLFromTemplate } from "../tileset-2d/index.js";
5
+ const defaultProps = {
6
+ TilesetClass: Tileset2D,
7
+ data: { type: 'data', value: [] },
8
+ dataComparator: urlType.equal,
9
+ renderSubLayers: { type: 'function', value: (props) => new GeoJsonLayer(props) },
10
+ getTileData: { type: 'function', optional: true, value: null },
11
+ // TODO - change to onViewportLoad to align with Tile3DLayer
12
+ onViewportLoad: { type: 'function', optional: true, value: null },
13
+ onTileLoad: { type: 'function', value: tile => { } },
14
+ onTileUnload: { type: 'function', value: tile => { } },
15
+ // eslint-disable-next-line
16
+ onTileError: { type: 'function', value: err => console.error(err) },
17
+ extent: { type: 'array', optional: true, value: null, compare: true },
18
+ tileSize: 512,
19
+ maxZoom: null,
20
+ minZoom: 0,
21
+ maxCacheSize: null,
22
+ maxCacheByteSize: null,
23
+ refinementStrategy: STRATEGY_DEFAULT,
24
+ zRange: null,
25
+ maxRequests: 6,
26
+ debounceTime: 0,
27
+ zoomOffset: 0
28
+ };
29
+ /**
30
+ * The TileLayer is a composite layer that makes it possible to visualize very large datasets.
31
+ *
32
+ * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.
33
+ */
34
+ export default class TileLayer extends CompositeLayer {
35
+ static { this.defaultProps = defaultProps; }
36
+ static { this.layerName = 'TileLayer'; }
37
+ initializeState() {
38
+ this.state = {
39
+ tileset: null,
40
+ isLoaded: false
41
+ };
42
+ }
43
+ finalizeState() {
44
+ this.state?.tileset?.finalize();
45
+ }
46
+ get isLoaded() {
47
+ return Boolean(this.state?.tileset?.selectedTiles?.every(tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)));
48
+ }
49
+ shouldUpdateState({ changeFlags }) {
50
+ return changeFlags.somethingChanged;
51
+ }
52
+ updateState({ changeFlags }) {
53
+ let { tileset } = this.state;
54
+ const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
55
+ const dataChanged = changeFlags.dataChanged ||
56
+ (changeFlags.updateTriggersChanged &&
57
+ (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));
58
+ if (!tileset) {
59
+ tileset = new this.props.TilesetClass(this._getTilesetOptions());
60
+ this.setState({ tileset });
61
+ }
62
+ else if (propsChanged) {
63
+ tileset.setOptions(this._getTilesetOptions());
64
+ if (dataChanged) {
65
+ // reload all tiles
66
+ // use cached layers until new content is loaded
67
+ tileset.reloadAll();
68
+ }
69
+ else {
70
+ // some render options changed, regenerate sub layers now
71
+ tileset.tiles.forEach(tile => {
72
+ tile.layers = null;
73
+ });
74
+ }
75
+ }
76
+ this._updateTileset();
77
+ }
78
+ _getTilesetOptions() {
79
+ const { tileSize, maxCacheSize, maxCacheByteSize, refinementStrategy, extent, maxZoom, minZoom, maxRequests, debounceTime, zoomOffset } = this.props;
80
+ return {
81
+ maxCacheSize,
82
+ maxCacheByteSize,
83
+ maxZoom,
84
+ minZoom,
85
+ tileSize,
86
+ refinementStrategy,
87
+ extent,
88
+ maxRequests,
89
+ debounceTime,
90
+ zoomOffset,
91
+ getTileData: this.getTileData.bind(this),
92
+ onTileLoad: this._onTileLoad.bind(this),
93
+ onTileError: this._onTileError.bind(this),
94
+ onTileUnload: this._onTileUnload.bind(this)
95
+ };
96
+ }
97
+ _updateTileset() {
98
+ const tileset = this.state.tileset;
99
+ const { zRange, modelMatrix } = this.props;
100
+ const frameNumber = tileset.update(this.context.viewport, { zRange, modelMatrix });
101
+ const { isLoaded } = tileset;
102
+ const loadingStateChanged = this.state.isLoaded !== isLoaded;
103
+ const tilesetChanged = this.state.frameNumber !== frameNumber;
104
+ if (isLoaded && (loadingStateChanged || tilesetChanged)) {
105
+ this._onViewportLoad();
106
+ }
107
+ if (tilesetChanged) {
108
+ // Save the tileset frame number - trigger a rerender
109
+ this.setState({ frameNumber });
110
+ }
111
+ // Save the loaded state - should not trigger a rerender
112
+ this.state.isLoaded = isLoaded;
113
+ }
114
+ _onViewportLoad() {
115
+ const { tileset } = this.state;
116
+ const { onViewportLoad } = this.props;
117
+ if (onViewportLoad) {
118
+ // This method can only be called when tileset is defined and updated
119
+ onViewportLoad(tileset.selectedTiles);
120
+ }
121
+ }
122
+ _onTileLoad(tile) {
123
+ this.props.onTileLoad(tile);
124
+ tile.layers = null;
125
+ this.setNeedsUpdate();
126
+ }
127
+ _onTileError(error, tile) {
128
+ this.props.onTileError(error);
129
+ tile.layers = null;
130
+ this.setNeedsUpdate();
131
+ }
132
+ _onTileUnload(tile) {
133
+ this.props.onTileUnload(tile);
134
+ }
135
+ // Methods for subclass to override
136
+ getTileData(tile) {
137
+ const { data, getTileData, fetch } = this.props;
138
+ const { signal } = tile;
139
+ tile.url =
140
+ typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;
141
+ if (getTileData) {
142
+ return getTileData(tile);
143
+ }
144
+ if (fetch && tile.url) {
145
+ return fetch(tile.url, { propName: 'data', layer: this, signal });
146
+ }
147
+ return null;
148
+ }
149
+ renderSubLayers(props) {
150
+ return this.props.renderSubLayers(props);
151
+ }
152
+ getSubLayerPropsByTile(tile) {
153
+ return null;
154
+ }
155
+ getPickingInfo(params) {
156
+ const sourceTile = params.sourceLayer.props.tile;
157
+ const info = params.info;
158
+ if (info.picked) {
159
+ info.tile = sourceTile;
160
+ }
161
+ info.sourceTile = sourceTile;
162
+ return info;
163
+ }
164
+ _updateAutoHighlight(info) {
165
+ const sourceTile = info.sourceTile;
166
+ if (sourceTile && sourceTile.layers) {
167
+ for (const layer of sourceTile.layers) {
168
+ layer.updateAutoHighlight(info);
169
+ }
170
+ }
171
+ }
172
+ renderLayers() {
173
+ return this.state.tileset.tiles.map((tile) => {
174
+ const subLayerProps = this.getSubLayerPropsByTile(tile);
175
+ // cache the rendered layer in the tile
176
+ if (!tile.isLoaded && !tile.content) {
177
+ // nothing to show
178
+ }
179
+ else if (!tile.layers) {
180
+ const layers = this.renderSubLayers({
181
+ ...this.props,
182
+ ...this.getSubLayerProps({
183
+ id: tile.id,
184
+ updateTriggers: this.props.updateTriggers
185
+ }),
186
+ data: tile.content,
187
+ _offset: 0,
188
+ tile
189
+ });
190
+ tile.layers = flatten(layers, Boolean).map(layer => layer.clone({
191
+ tile,
192
+ ...subLayerProps
193
+ }));
194
+ }
195
+ else if (subLayerProps &&
196
+ tile.layers[0] &&
197
+ Object.keys(subLayerProps).some(propName => tile.layers[0].props[propName] !== subLayerProps[propName])) {
198
+ tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
199
+ }
200
+ return tile.layers;
201
+ });
202
+ }
203
+ filterSubLayer({ layer, cullRect }) {
204
+ const { tile } = layer.props;
205
+ return this.state.tileset.isTileVisible(tile, cullRect);
206
+ }
207
+ }
@@ -0,0 +1,7 @@
1
+ export type { TileLoadProps, Bounds, ZRange, GeoBoundingBox, NonGeoBoundingBox, TileBoundingBox } from "./types.js";
2
+ export type { Tileset2DProps, RefinementStrategy } from "./tileset-2d.js";
3
+ export { Tileset2D, STRATEGY_DEFAULT } from "./tileset-2d.js";
4
+ export { Tile2DHeader } from "./tile-2d-header.js";
5
+ export type { URLTemplate } from "./utils.js";
6
+ export { isGeoBoundingBox, isURLTemplate, urlType, getURLFromTemplate, getTileIndices, tileToBoundingBox } from "./utils.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,aAAa,EACb,MAAM,EACN,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,mBAAgB;AAEjB,YAAY,EAAC,cAAc,EAAE,kBAAkB,EAAC,wBAAqB;AACrE,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAC,wBAAqB;AAEzD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,YAAY,EAAC,WAAW,EAAC,mBAAgB;AACzC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EAClB,mBAAgB"}
@@ -0,0 +1,4 @@
1
+ // deck.gl, MIT license
2
+ export { Tileset2D, STRATEGY_DEFAULT } from "./tileset-2d.js";
3
+ export { Tile2DHeader } from "./tile-2d-header.js";
4
+ export { isGeoBoundingBox, isURLTemplate, urlType, getURLFromTemplate, getTileIndices, tileToBoundingBox } from "./utils.js";
@@ -0,0 +1,41 @@
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
+ * Speed up consecutive function calls by caching the result of calls with identical input
5
+ * https://en.wikipedia.org/wiki/Memoization
6
+ * @param compute - the function to be memoized
7
+ */
8
+ export function memoize(compute) {
9
+ let cachedArgs = {};
10
+ let cachedResult;
11
+ return (args) => {
12
+ for (const key in args) {
13
+ if (!isEqual(args[key], cachedArgs[key])) {
14
+ cachedResult = compute(args);
15
+ cachedArgs = args;
16
+ break;
17
+ }
18
+ }
19
+ return cachedResult;
20
+ };
21
+ }
22
+ function isEqual(a, b) {
23
+ if (a === b) {
24
+ return true;
25
+ }
26
+ if (Array.isArray(a)) {
27
+ // Special treatment for arrays: compare 1-level deep
28
+ // This is to support equality of matrix/coordinate props
29
+ const len = a.length;
30
+ if (!b || b.length !== len) {
31
+ return false;
32
+ }
33
+ for (let i = 0; i < len; i++) {
34
+ if (a[i] !== b[i]) {
35
+ return false;
36
+ }
37
+ }
38
+ return true;
39
+ }
40
+ return false;
41
+ }
@@ -1,5 +1,6 @@
1
1
  import { RequestScheduler } from '@loaders.gl/loader-utils';
2
- import { TileBoundingBox, TileIndex, TileLoadProps } from './types';
2
+ import { TileBoundingBox, TileIndex, TileLoadProps } from "./types.js";
3
+ import type { Layer } from '@deck.gl/core';
3
4
  export type TileLoadDataProps<DataT = any> = {
4
5
  requestScheduler: RequestScheduler;
5
6
  getData: (props: TileLoadProps) => Promise<DataT>;
@@ -14,7 +15,7 @@ export declare class Tile2DHeader<DataT = any> {
14
15
  children: Tile2DHeader[] | null;
15
16
  content: DataT | null;
16
17
  state?: number;
17
- layers?: any[] | null;
18
+ layers?: Layer[] | null;
18
19
  id: string;
19
20
  zoom: number;
20
21
  userData?: Record<string, any>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-2d-header.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/tile-2d-header.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,aAAa,EAAC,mBAAgB;AAClE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,GAAG,IAAI;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,qBAAa,YAAY,CAAC,KAAK,GAAG,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAExB,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,EAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,KAAK,CAAmB;gBAEpB,KAAK,EAAE,SAAS;IAiB5B,4CAA4C;IAC5C,IAAI,IAAI,IAAI,eAAe,CAE1B;IAGD,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAgB9B;IAED,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAE/C;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,UAAU,IAAI,MAAM,CAOvB;YAGa,SAAS;IA8DvB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,cAAc,IAAI,IAAI;IAQtB,KAAK,IAAI,IAAI;CAQd"}
@@ -0,0 +1,135 @@
1
+ export class Tile2DHeader {
2
+ constructor(index) {
3
+ this.index = index;
4
+ this.isVisible = false;
5
+ this.isSelected = false;
6
+ this.parent = null;
7
+ this.children = [];
8
+ this.content = null;
9
+ this._loader = undefined;
10
+ this._abortController = null;
11
+ this._loaderId = 0;
12
+ this._isLoaded = false;
13
+ this._isCancelled = false;
14
+ this._needsReload = false;
15
+ }
16
+ /** @deprecated use `boundingBox` instead */
17
+ get bbox() {
18
+ return this._bbox;
19
+ }
20
+ // TODO - remove in v9
21
+ set bbox(value) {
22
+ // Only set once from `Tileset2D.getTileMetadata`
23
+ if (this._bbox)
24
+ return;
25
+ this._bbox = value;
26
+ if ('west' in value) {
27
+ this.boundingBox = [
28
+ [value.west, value.south],
29
+ [value.east, value.north]
30
+ ];
31
+ }
32
+ else {
33
+ this.boundingBox = [
34
+ [value.left, value.top],
35
+ [value.right, value.bottom]
36
+ ];
37
+ }
38
+ }
39
+ get data() {
40
+ return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;
41
+ }
42
+ get isLoaded() {
43
+ return this._isLoaded && !this._needsReload;
44
+ }
45
+ get isLoading() {
46
+ return Boolean(this._loader) && !this._isCancelled;
47
+ }
48
+ get needsReload() {
49
+ return this._needsReload || this._isCancelled;
50
+ }
51
+ get byteLength() {
52
+ const result = this.content ? this.content.byteLength : 0;
53
+ if (!Number.isFinite(result)) {
54
+ // eslint-disable-next-line no-console
55
+ console.error('byteLength not defined in tile data');
56
+ }
57
+ return result;
58
+ }
59
+ /* eslint-disable max-statements */
60
+ async _loadData({ getData, requestScheduler, onLoad, onError }) {
61
+ const { index, id, bbox, userData, zoom } = this;
62
+ const loaderId = this._loaderId;
63
+ this._abortController = new AbortController();
64
+ const { signal } = this._abortController;
65
+ // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...
66
+ const requestToken = await requestScheduler.scheduleRequest(this, tile => {
67
+ return tile.isSelected ? 1 : -1;
68
+ });
69
+ if (!requestToken) {
70
+ this._isCancelled = true;
71
+ return;
72
+ }
73
+ // A tile can be cancelled while being scheduled
74
+ if (this._isCancelled) {
75
+ requestToken.done();
76
+ return;
77
+ }
78
+ let tileData = null;
79
+ let error;
80
+ try {
81
+ tileData = await getData({ index, id, bbox, userData, zoom, signal });
82
+ }
83
+ catch (err) {
84
+ error = err || true;
85
+ }
86
+ finally {
87
+ requestToken.done();
88
+ }
89
+ // If loadData has been called with a newer version, discard the result from this operation
90
+ if (loaderId !== this._loaderId) {
91
+ return;
92
+ }
93
+ // Clear the `isLoading` flag
94
+ this._loader = undefined;
95
+ // Rewrite tile content with the result of getTileData if successful, or `null` in case of
96
+ // error or cancellation
97
+ this.content = tileData;
98
+ // If cancelled, do not invoke the callbacks
99
+ // Consider it loaded if we tried to cancel but `getTileData` still returned data
100
+ if (this._isCancelled && !tileData) {
101
+ this._isLoaded = false;
102
+ return;
103
+ }
104
+ this._isLoaded = true;
105
+ this._isCancelled = false;
106
+ if (error) {
107
+ onError(error, this);
108
+ }
109
+ else {
110
+ onLoad(this);
111
+ }
112
+ }
113
+ loadData(opts) {
114
+ this._isLoaded = false;
115
+ this._isCancelled = false;
116
+ this._needsReload = false;
117
+ this._loaderId++;
118
+ this._loader = this._loadData(opts);
119
+ return this._loader;
120
+ }
121
+ setNeedsReload() {
122
+ if (this.isLoading) {
123
+ this.abort();
124
+ this._loader = undefined;
125
+ }
126
+ this._needsReload = true;
127
+ }
128
+ abort() {
129
+ if (this.isLoaded) {
130
+ return;
131
+ }
132
+ this._isCancelled = true;
133
+ this._abortController?.abort();
134
+ }
135
+ }
@@ -0,0 +1,4 @@
1
+ import { Viewport } from '@deck.gl/core';
2
+ import { Bounds, TileIndex, ZRange } from "./types.js";
3
+ export declare function getOSMTileIndices(viewport: Viewport, maxZ: number, zRange: ZRange | null, bounds?: Bounds): TileIndex[];
4
+ //# sourceMappingURL=tile-2d-traversal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-2d-traversal.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/tile-2d-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAsC,MAAM,eAAe,CAAC;AAS5E,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAC,mBAAgB;AA6KlD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,EAAE,CAiEb"}
@@ -0,0 +1,182 @@
1
+ import { WebMercatorViewport, _GlobeViewport } from '@deck.gl/core';
2
+ import { CullingVolume, Plane, AxisAlignedBoundingBox, makeOrientedBoundingBoxFromPoints } from '@math.gl/culling';
3
+ import { lngLatToWorld } from '@math.gl/web-mercator';
4
+ import { osmTile2lngLat } from "./utils.js";
5
+ const TILE_SIZE = 512;
6
+ // number of world copies to check
7
+ const MAX_MAPS = 3;
8
+ // for calculating bounding volume of a tile in a non-web-mercator viewport
9
+ const REF_POINTS_5 = [
10
+ [0.5, 0.5],
11
+ [0, 0],
12
+ [0, 1],
13
+ [1, 0],
14
+ [1, 1]
15
+ ]; // 4 corners and center
16
+ const REF_POINTS_9 = REF_POINTS_5.concat([
17
+ [0, 0.5],
18
+ [0.5, 0],
19
+ [1, 0.5],
20
+ [0.5, 1]
21
+ ]); // 4 corners, center and 4 mid points
22
+ const REF_POINTS_11 = REF_POINTS_9.concat([
23
+ [0.25, 0.5],
24
+ [0.75, 0.5]
25
+ ]); // 2 additional points on equator for top tile
26
+ class OSMNode {
27
+ constructor(x, y, z) {
28
+ this.x = x;
29
+ this.y = y;
30
+ this.z = z;
31
+ }
32
+ get children() {
33
+ if (!this._children) {
34
+ const x = this.x * 2;
35
+ const y = this.y * 2;
36
+ const z = this.z + 1;
37
+ this._children = [
38
+ new OSMNode(x, y, z),
39
+ new OSMNode(x, y + 1, z),
40
+ new OSMNode(x + 1, y, z),
41
+ new OSMNode(x + 1, y + 1, z)
42
+ ];
43
+ }
44
+ return this._children;
45
+ }
46
+ // eslint-disable-next-line complexity
47
+ update(params) {
48
+ const { viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project } = params;
49
+ const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);
50
+ // First, check if this tile is visible
51
+ if (bounds && !this.insideBounds(bounds)) {
52
+ return false;
53
+ }
54
+ const isInside = cullingVolume.computeVisibility(boundingVolume);
55
+ if (isInside < 0) {
56
+ return false;
57
+ }
58
+ // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester
59
+ if (!this.childVisible) {
60
+ let { z } = this;
61
+ if (z < maxZ && z >= minZ) {
62
+ // Adjust LOD
63
+ // If the tile is far enough from the camera, accept a lower zoom level
64
+ const distance = (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;
65
+ z += Math.floor(Math.log2(distance));
66
+ }
67
+ if (z >= maxZ) {
68
+ // LOD is acceptable
69
+ this.selected = true;
70
+ return true;
71
+ }
72
+ }
73
+ // LOD is not enough, recursively test child tiles
74
+ this.selected = false;
75
+ this.childVisible = true;
76
+ for (const child of this.children) {
77
+ child.update(params);
78
+ }
79
+ return true;
80
+ }
81
+ getSelected(result = []) {
82
+ if (this.selected) {
83
+ result.push(this);
84
+ }
85
+ if (this._children) {
86
+ for (const node of this._children) {
87
+ node.getSelected(result);
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+ insideBounds([minX, minY, maxX, maxY]) {
93
+ const scale = Math.pow(2, this.z);
94
+ const extent = TILE_SIZE / scale;
95
+ return (this.x * extent < maxX &&
96
+ this.y * extent < maxY &&
97
+ (this.x + 1) * extent > minX &&
98
+ (this.y + 1) * extent > minY);
99
+ }
100
+ getBoundingVolume(zRange, worldOffset, project) {
101
+ if (project) {
102
+ // Custom projection
103
+ // Estimate bounding box from sample points
104
+ // At low zoom level we need more samples to calculate the bounding volume correctly
105
+ const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;
106
+ // Convert from tile-relative coordinates to common space
107
+ const refPointPositions = [];
108
+ for (const p of refPoints) {
109
+ const lngLat = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);
110
+ lngLat[2] = zRange[0];
111
+ refPointPositions.push(project(lngLat));
112
+ if (zRange[0] !== zRange[1]) {
113
+ // Account for the elevation volume
114
+ lngLat[2] = zRange[1];
115
+ refPointPositions.push(project(lngLat));
116
+ }
117
+ }
118
+ return makeOrientedBoundingBoxFromPoints(refPointPositions);
119
+ }
120
+ // Use WebMercator projection
121
+ const scale = Math.pow(2, this.z);
122
+ const extent = TILE_SIZE / scale;
123
+ const originX = this.x * extent + worldOffset * TILE_SIZE;
124
+ // deck's common space is y-flipped
125
+ const originY = TILE_SIZE - (this.y + 1) * extent;
126
+ return new AxisAlignedBoundingBox([originX, originY, zRange[0]], [originX + extent, originY + extent, zRange[1]]);
127
+ }
128
+ }
129
+ // eslint-disable-next-line complexity
130
+ export function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
131
+ const project = viewport instanceof _GlobeViewport && viewport.resolution
132
+ ? // eslint-disable-next-line @typescript-eslint/unbound-method
133
+ viewport.projectPosition
134
+ : null;
135
+ // Get the culling volume of the current camera
136
+ const planes = Object.values(viewport.getFrustumPlanes()).map(({ normal, distance }) => new Plane(normal.clone().negate(), distance));
137
+ const cullingVolume = new CullingVolume(planes);
138
+ // Project zRange from meters to common space
139
+ const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];
140
+ const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;
141
+ const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;
142
+ // Always load at the current zoom level if pitch is small
143
+ const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;
144
+ // Map extent to OSM position
145
+ if (bounds) {
146
+ const [minLng, minLat, maxLng, maxLat] = bounds;
147
+ const topLeft = lngLatToWorld([minLng, maxLat]);
148
+ const bottomRight = lngLatToWorld([maxLng, minLat]);
149
+ bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];
150
+ }
151
+ const root = new OSMNode(0, 0, 0);
152
+ const traversalParams = {
153
+ viewport,
154
+ project,
155
+ cullingVolume,
156
+ elevationBounds: [elevationMin, elevationMax],
157
+ minZ,
158
+ maxZ,
159
+ bounds,
160
+ // num. of worlds from the center. For repeated maps
161
+ offset: 0
162
+ };
163
+ root.update(traversalParams);
164
+ if (viewport instanceof WebMercatorViewport &&
165
+ viewport.subViewports &&
166
+ viewport.subViewports.length > 1) {
167
+ // Check worlds in repeated maps
168
+ traversalParams.offset = -1;
169
+ while (root.update(traversalParams)) {
170
+ if (--traversalParams.offset < -MAX_MAPS) {
171
+ break;
172
+ }
173
+ }
174
+ traversalParams.offset = 1;
175
+ while (root.update(traversalParams)) {
176
+ if (++traversalParams.offset > MAX_MAPS) {
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ return root.getSelected();
182
+ }
@@ -1,8 +1,8 @@
1
1
  import { Viewport } from '@deck.gl/core';
2
2
  import { Matrix4, NumericArray } from '@math.gl/core';
3
- import { Tile2DHeader } from './tile-2d-header';
4
- import { TileIndex, ZRange } from './types';
5
- import { TileLoadProps } from './types';
3
+ import { Tile2DHeader } from "./tile-2d-header.js";
4
+ import { TileIndex, ZRange } from "./types.js";
5
+ import { TileLoadProps } from "./types.js";
6
6
  export declare const STRATEGY_NEVER = "never";
7
7
  export declare const STRATEGY_REPLACE = "no-overlap";
8
8
  export declare const STRATEGY_DEFAULT = "best-available";
@@ -29,6 +29,8 @@ export type Tileset2DProps<DataT = any> = {
29
29
  zRange?: ZRange | null;
30
30
  /** The maximum number of concurrent getTileData calls. @default 6 */
31
31
  maxRequests?: number;
32
+ /** Queue tile requests until no new tiles have been requested for at least `debounceTime` milliseconds. @default 0 */
33
+ debounceTime?: number;
32
34
  /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */
33
35
  zoomOffset?: number;
34
36
  /** Called when a tile successfully loads. */
@@ -51,7 +53,7 @@ export declare class Tileset2D {
51
53
  private _tiles;
52
54
  private _cacheByteSize;
53
55
  private _viewport;
54
- private _zRange?;
56
+ private _zRange;
55
57
  private _selectedTiles;
56
58
  private _frameNumber;
57
59
  private _modelMatrix;
@@ -75,8 +77,8 @@ export declare class Tileset2D {
75
77
  * Update the cache with the given viewport and model matrix and triggers callback onUpdate.
76
78
  */
77
79
  update(viewport: Viewport, { zRange, modelMatrix }?: {
78
- zRange?: ZRange | null;
79
- modelMatrix?: NumericArray | null;
80
+ zRange: ZRange | null;
81
+ modelMatrix: NumericArray | null;
80
82
  }): number;
81
83
  isTileVisible(tile: Tile2DHeader, cullRect?: {
82
84
  x: number;
@@ -89,7 +91,7 @@ export declare class Tileset2D {
89
91
  viewport: Viewport;
90
92
  maxZoom?: number;
91
93
  minZoom?: number;
92
- zRange?: ZRange | null;
94
+ zRange: ZRange | null;
93
95
  tileSize?: number;
94
96
  modelMatrix?: Matrix4;
95
97
  modelMatrixInverse?: Matrix4;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tileset-2d.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/tileset-2d.ts"],"names":[],"mappings":"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"}