@deck.gl-community/geo-layers 9.2.8 → 9.3.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 (82) hide show
  1. package/dist/global-grid-layer/global-grid-cluster-layer.d.ts.map +1 -1
  2. package/dist/global-grid-layer/global-grid-cluster-layer.js +1 -0
  3. package/dist/global-grid-layer/global-grid-cluster-layer.js.map +1 -1
  4. package/dist/index.cjs +1799 -7
  5. package/dist/index.cjs.map +4 -4
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/shared-tile-2d-layer/deck-tile-traversal.d.ts +5 -0
  11. package/dist/shared-tile-2d-layer/deck-tile-traversal.d.ts.map +1 -0
  12. package/dist/shared-tile-2d-layer/deck-tile-traversal.js +173 -0
  13. package/dist/shared-tile-2d-layer/deck-tile-traversal.js.map +1 -0
  14. package/dist/shared-tile-2d-layer/deck-tileset-adapter.d.ts +26 -0
  15. package/dist/shared-tile-2d-layer/deck-tileset-adapter.d.ts.map +1 -0
  16. package/dist/shared-tile-2d-layer/deck-tileset-adapter.js +174 -0
  17. package/dist/shared-tile-2d-layer/deck-tileset-adapter.js.map +1 -0
  18. package/dist/shared-tile-2d-layer/index.d.ts +4 -0
  19. package/dist/shared-tile-2d-layer/index.d.ts.map +1 -0
  20. package/dist/shared-tile-2d-layer/index.js +6 -0
  21. package/dist/shared-tile-2d-layer/index.js.map +1 -0
  22. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.d.ts +151 -0
  23. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.d.ts.map +1 -0
  24. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.js +422 -0
  25. package/dist/shared-tile-2d-layer/shared-tile-2d-layer.js.map +1 -0
  26. package/dist/shared-tile-2d-layer/shared-tile-2d-view.d.ts +57 -0
  27. package/dist/shared-tile-2d-layer/shared-tile-2d-view.d.ts.map +1 -0
  28. package/dist/shared-tile-2d-layer/shared-tile-2d-view.js +253 -0
  29. package/dist/shared-tile-2d-layer/shared-tile-2d-view.js.map +1 -0
  30. package/dist/shared-tile-2d-layer/url-template.d.ts +9 -0
  31. package/dist/shared-tile-2d-layer/url-template.d.ts.map +1 -0
  32. package/dist/shared-tile-2d-layer/url-template.js +25 -0
  33. package/dist/shared-tile-2d-layer/url-template.js.map +1 -0
  34. package/dist/tile-grid-layer/tile-grid-layer.d.ts +47 -0
  35. package/dist/tile-grid-layer/tile-grid-layer.d.ts.map +1 -0
  36. package/dist/tile-grid-layer/tile-grid-layer.js +94 -0
  37. package/dist/tile-grid-layer/tile-grid-layer.js.map +1 -0
  38. package/dist/tile-source-layer/tile-source-layer.d.ts +2 -2
  39. package/dist/tile-source-layer/tile-source-layer.d.ts.map +1 -1
  40. package/dist/tileset/adapter.d.ts +38 -0
  41. package/dist/tileset/adapter.d.ts.map +1 -0
  42. package/dist/tileset/adapter.js +5 -0
  43. package/dist/tileset/adapter.js.map +1 -0
  44. package/dist/tileset/index.cjs +721 -0
  45. package/dist/tileset/index.cjs.map +7 -0
  46. package/dist/tileset/index.d.ts +8 -0
  47. package/dist/tileset/index.d.ts.map +1 -0
  48. package/dist/tileset/index.js +7 -0
  49. package/dist/tileset/index.js.map +1 -0
  50. package/dist/tileset/tile-2d-header.d.ts +71 -0
  51. package/dist/tileset/tile-2d-header.d.ts.map +1 -0
  52. package/dist/tileset/tile-2d-header.js +168 -0
  53. package/dist/tileset/tile-2d-header.js.map +1 -0
  54. package/dist/tileset/tileset-2d.d.ts +210 -0
  55. package/dist/tileset/tileset-2d.d.ts.map +1 -0
  56. package/dist/tileset/tileset-2d.js +531 -0
  57. package/dist/tileset/tileset-2d.js.map +1 -0
  58. package/dist/tileset/types.d.ts +44 -0
  59. package/dist/tileset/types.d.ts.map +1 -0
  60. package/dist/tileset/types.js +5 -0
  61. package/dist/tileset/types.js.map +1 -0
  62. package/dist/utils/memoize.d.ts +2 -0
  63. package/dist/utils/memoize.d.ts.map +1 -0
  64. package/dist/utils/memoize.js +36 -0
  65. package/dist/utils/memoize.js.map +1 -0
  66. package/package.json +17 -11
  67. package/src/global-grid-layer/global-grid-cluster-layer.ts +1 -1
  68. package/src/index.ts +14 -0
  69. package/src/shared-tile-2d-layer/deck-tile-traversal.ts +247 -0
  70. package/src/shared-tile-2d-layer/deck-tileset-adapter.ts +262 -0
  71. package/src/shared-tile-2d-layer/index.ts +7 -0
  72. package/src/shared-tile-2d-layer/shared-tile-2d-layer.ts +681 -0
  73. package/src/shared-tile-2d-layer/shared-tile-2d-view.ts +339 -0
  74. package/src/shared-tile-2d-layer/url-template.ts +40 -0
  75. package/src/tile-grid-layer/tile-grid-layer.ts +158 -0
  76. package/src/tile-source-layer/tile-source-layer.ts +2 -2
  77. package/src/tileset/adapter.ts +47 -0
  78. package/src/tileset/index.ts +22 -0
  79. package/src/tileset/tile-2d-header.ts +210 -0
  80. package/src/tileset/tileset-2d.ts +705 -0
  81. package/src/tileset/types.ts +38 -0
  82. package/src/utils/memoize.ts +38 -0
@@ -0,0 +1,253 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Matrix4, equals } from '@math.gl/core';
5
+ import { memoize } from "../utils/memoize.js";
6
+ import { STRATEGY_DEFAULT, STRATEGY_NEVER, STRATEGY_REPLACE } from "../tileset/index.js";
7
+ import { getCullBounds, sharedTile2DDeckAdapter, transformBox } from "./deck-tileset-adapter.js";
8
+ /** Bit flag marking a tile as visited during refinement traversal. */
9
+ const TILE_STATE_VISITED = 1;
10
+ /** Bit flag marking a tile as visible during refinement traversal. */
11
+ const TILE_STATE_VISIBLE = 2;
12
+ /** Built-in placeholder refinement handlers keyed by strategy name. */
13
+ const STRATEGIES = {
14
+ [STRATEGY_DEFAULT]: updateTileStateDefault,
15
+ [STRATEGY_REPLACE]: updateTileStateReplace,
16
+ [STRATEGY_NEVER]: () => { }
17
+ };
18
+ /** Per-viewport traversal state for the deck-facing shared tile layer. */
19
+ export class SharedTile2DView {
20
+ /** Unique consumer identifier used by the shared tileset cache. */
21
+ id = Symbol('tile-2d-view');
22
+ /** Shared tileset queried by this view. */
23
+ _tileset;
24
+ /** Tiles selected during the latest traversal. */
25
+ _selectedTiles = null;
26
+ /** Incremented whenever this view's visible tile set changes. */
27
+ _frameNumber = 0;
28
+ /** Last viewport used to compute tile selection. */
29
+ _viewport = null;
30
+ /** Last z-range used during tile selection. */
31
+ _zRange = null;
32
+ /** Last model matrix applied to tile selection. */
33
+ _modelMatrix = new Matrix4();
34
+ /** Inverse of the current model matrix. */
35
+ _modelMatrixInverse = new Matrix4();
36
+ /** Per-tile visibility and selection flags for this view. */
37
+ _state = new Map();
38
+ /** Creates a viewport-specific view of a shared tileset. */
39
+ constructor(tileset) {
40
+ this._tileset = tileset;
41
+ if (!this._tileset.adapter) {
42
+ this._tileset.setOptions({ adapter: sharedTile2DDeckAdapter });
43
+ }
44
+ this._tileset.attachConsumer(this.id);
45
+ }
46
+ /** Releases this view and detaches it from the shared tileset. */
47
+ finalize() {
48
+ this._tileset.detachConsumer(this.id);
49
+ this._selectedTiles = null;
50
+ this._state.clear();
51
+ }
52
+ /** Tiles selected for the last viewport update. */
53
+ get selectedTiles() {
54
+ return this._selectedTiles;
55
+ }
56
+ /** Indicates whether all selected tiles are fully loaded for this view. */
57
+ get isLoaded() {
58
+ return this._selectedTiles !== null && this._selectedTiles.every((tile) => tile.isLoaded);
59
+ }
60
+ /** Indicates whether any selected tile needs to be re-requested. */
61
+ get needsReload() {
62
+ return this._selectedTiles !== null && this._selectedTiles.some((tile) => tile.needsReload);
63
+ }
64
+ /** Updates tile selection and visibility for a viewport and returns the current frame number. */
65
+ update(viewport, { zRange, modelMatrix } = { zRange: null, modelMatrix: null }) {
66
+ const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();
67
+ const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
68
+ if (!this._viewport ||
69
+ !viewport.equals(this._viewport) ||
70
+ !equals(this._zRange, zRange) ||
71
+ isModelMatrixNew) {
72
+ if (isModelMatrixNew) {
73
+ this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
74
+ this._modelMatrix = modelMatrixAsMatrix4;
75
+ }
76
+ this._viewport = viewport;
77
+ this._zRange = zRange;
78
+ const tileIndices = this._tileset.getTileIndices({
79
+ viewState: viewport,
80
+ maxZoom: this._tileset.maxZoom,
81
+ minZoom: this._tileset.minZoom,
82
+ zRange,
83
+ modelMatrix: this._modelMatrix,
84
+ modelMatrixInverse: this._modelMatrixInverse
85
+ });
86
+ this._selectedTiles = tileIndices.map((index) => this._tileset.getTile(index, true));
87
+ this._tileset.prepareTiles();
88
+ }
89
+ else if (this.needsReload) {
90
+ this._selectedTiles = (this._selectedTiles || []).map((tile) => this._tileset.getTile(tile.index, true));
91
+ this._tileset.prepareTiles();
92
+ }
93
+ const changed = this._updateTileStates();
94
+ this._tileset.updateConsumer(this.id, this._selectedTiles || [], this._getVisibleTiles());
95
+ if (changed) {
96
+ this._frameNumber++;
97
+ }
98
+ return this._frameNumber;
99
+ }
100
+ /** Tests whether a tile should render in the current viewport and culling rectangle. */
101
+ isTileVisible(tile, cullRect, modelMatrix) {
102
+ const state = this._state.get(tile);
103
+ if (!state?.isVisible) {
104
+ return false;
105
+ }
106
+ if (!cullRect || !this._viewport) {
107
+ return true;
108
+ }
109
+ const boundsArr = this._getCullBounds({
110
+ viewport: this._viewport,
111
+ z: this._zRange,
112
+ cullRect
113
+ });
114
+ return boundsArr.some((bounds) => this._tileOverlapsBounds(tile, bounds, modelMatrix));
115
+ }
116
+ /** Collects tiles currently marked visible for this view. */
117
+ _getVisibleTiles() {
118
+ const result = [];
119
+ for (const tile of this._tileset.tiles) {
120
+ if (this._state.get(tile)?.isVisible) {
121
+ result.push(tile);
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ /** Memoized screen-space culling bounds helper. */
127
+ _getCullBounds = memoize(getCullBounds);
128
+ /** Recomputes selected and placeholder-visible tiles for the current view. */
129
+ _updateTileStates() {
130
+ const refinementStrategy = this._tileset.refinementStrategy || STRATEGY_DEFAULT;
131
+ const allTiles = this._tileset.tiles;
132
+ const previousVisibility = new Map();
133
+ for (const tile of allTiles) {
134
+ const existing = this._state.get(tile);
135
+ previousVisibility.set(tile, existing?.isVisible || false);
136
+ this._state.set(tile, { isSelected: false, isVisible: false, state: 0 });
137
+ }
138
+ for (const tile of this._selectedTiles || []) {
139
+ const state = this._state.get(tile) || { isSelected: false, isVisible: false, state: 0 };
140
+ state.isSelected = true;
141
+ state.isVisible = true;
142
+ this._state.set(tile, state);
143
+ }
144
+ if (typeof refinementStrategy === 'function') {
145
+ refinementStrategy(allTiles);
146
+ }
147
+ else {
148
+ STRATEGIES[refinementStrategy](allTiles, this._state);
149
+ }
150
+ let changed = false;
151
+ for (const tile of allTiles) {
152
+ const state = this._state.get(tile);
153
+ if (state && state.isVisible !== previousVisibility.get(tile)) {
154
+ changed = true;
155
+ }
156
+ }
157
+ return changed;
158
+ }
159
+ /** Tests one tile against one culling bounds rectangle. */
160
+ _tileOverlapsBounds(tile, [minX, minY, maxX, maxY], modelMatrix) {
161
+ const bbox = this._getTileBoundingBox(tile, modelMatrix);
162
+ if ('west' in bbox) {
163
+ return bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;
164
+ }
165
+ const y0 = Math.min(bbox.top, bbox.bottom);
166
+ const y1 = Math.max(bbox.top, bbox.bottom);
167
+ return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;
168
+ }
169
+ /** Applies model-matrix transforms to non-geospatial tile bounds when needed. */
170
+ _getTileBoundingBox(tile, modelMatrix) {
171
+ const { bbox } = tile;
172
+ if ('west' in bbox || !modelMatrix || Matrix4.IDENTITY.equals(modelMatrix)) {
173
+ return bbox;
174
+ }
175
+ const [left, top, right, bottom] = transformBox([bbox.left, bbox.top, bbox.right, bbox.bottom], modelMatrix);
176
+ return { left, top, right, bottom };
177
+ }
178
+ }
179
+ /** Default refinement strategy that prefers best available loaded descendants. */
180
+ function updateTileStateDefault(allTiles, stateMap) {
181
+ for (const tile of allTiles) {
182
+ getTileState(stateMap, tile).state = 0;
183
+ }
184
+ for (const tile of allTiles) {
185
+ if (getTileState(stateMap, tile).isSelected && !getPlaceholderInAncestors(tile, stateMap)) {
186
+ getPlaceholderInChildren(tile, stateMap);
187
+ }
188
+ }
189
+ for (const tile of allTiles) {
190
+ const state = getTileState(stateMap, tile);
191
+ state.isVisible = Boolean(state.state & TILE_STATE_VISIBLE);
192
+ }
193
+ }
194
+ /** Replacement refinement strategy that avoids visible overlap between ancestors and descendants. */
195
+ function updateTileStateReplace(allTiles, stateMap) {
196
+ for (const tile of allTiles) {
197
+ getTileState(stateMap, tile).state = 0;
198
+ }
199
+ for (const tile of allTiles) {
200
+ if (getTileState(stateMap, tile).isSelected) {
201
+ getPlaceholderInAncestors(tile, stateMap);
202
+ }
203
+ }
204
+ const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);
205
+ for (const tile of sortedTiles) {
206
+ const tileState = getTileState(stateMap, tile);
207
+ tileState.isVisible = Boolean(tileState.state & TILE_STATE_VISIBLE);
208
+ if (tile.children && (tileState.isVisible || tileState.state & TILE_STATE_VISITED)) {
209
+ for (const child of tile.children) {
210
+ getTileState(stateMap, child).state = TILE_STATE_VISITED;
211
+ }
212
+ }
213
+ else if (tileState.isSelected) {
214
+ getPlaceholderInChildren(tile, stateMap);
215
+ }
216
+ }
217
+ }
218
+ /** Searches upward for a loaded ancestor that can stand in for an unavailable selected tile. */
219
+ function getPlaceholderInAncestors(startTile, stateMap) {
220
+ let tile = startTile;
221
+ while ((tile = tile.parent)) {
222
+ const state = getTileState(stateMap, tile);
223
+ state.state |= TILE_STATE_VISIBLE | TILE_STATE_VISITED;
224
+ if (tile.isLoaded || tile.content) {
225
+ return true;
226
+ }
227
+ }
228
+ return false;
229
+ }
230
+ /** Searches downward for loaded descendants that can stand in for an unavailable selected tile. */
231
+ function getPlaceholderInChildren(tile, stateMap) {
232
+ const state = getTileState(stateMap, tile);
233
+ state.state |= TILE_STATE_VISIBLE | TILE_STATE_VISITED;
234
+ if (!tile.children || !tile.children.length || tile.isLoaded || tile.content) {
235
+ return;
236
+ }
237
+ for (const child of tile.children) {
238
+ const childState = getTileState(stateMap, child);
239
+ if (!(childState.state & TILE_STATE_VISITED)) {
240
+ getPlaceholderInChildren(child, stateMap);
241
+ }
242
+ }
243
+ }
244
+ /** Returns view state for a tile, creating a default record when needed. */
245
+ function getTileState(stateMap, tile) {
246
+ let tileState = stateMap.get(tile);
247
+ if (!tileState) {
248
+ tileState = { isSelected: false, isVisible: false, state: 0 };
249
+ stateMap.set(tile, tileState);
250
+ }
251
+ return tileState;
252
+ }
253
+ //# sourceMappingURL=shared-tile-2d-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-tile-2d-view.js","sourceRoot":"","sources":["../../src/shared-tile-2d-layer/shared-tile-2d-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TileIndex } from "../tileset/types.js";
2
+ /** URL template accepted by {@link SharedTile2DLayer} when loading tiles directly by URL. */
3
+ export type URLTemplate = string | string[] | null;
4
+ /** Expands one tile URL template for a given tile index. */
5
+ export declare function getURLFromTemplate(template: URLTemplate, tile: {
6
+ index: TileIndex;
7
+ id: string;
8
+ }): string | null;
9
+ //# sourceMappingURL=url-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-template.d.ts","sourceRoot":"","sources":["../../src/shared-tile-2d-layer/url-template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,SAAS,EAAC,4BAAyB;AAEhD,6FAA6F;AAC7F,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;AAMnD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,SAAS,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,GACA,MAAM,GAAG,IAAI,CAmBf"}
@@ -0,0 +1,25 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ function stringHash(s) {
5
+ return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));
6
+ }
7
+ /** Expands one tile URL template for a given tile index. */
8
+ export function getURLFromTemplate(template, tile) {
9
+ if (!template || !template.length) {
10
+ return null;
11
+ }
12
+ const { index, id } = tile;
13
+ if (Array.isArray(template)) {
14
+ template = template[stringHash(id) % template.length];
15
+ }
16
+ let url = template;
17
+ for (const key of Object.keys(index)) {
18
+ url = url.replace(new RegExp(`{${key}}`, 'g'), String(index[key]));
19
+ }
20
+ if (Number.isInteger(index.y) && Number.isInteger(index.z)) {
21
+ url = url.replace(/\{-y\}/g, String(Math.pow(2, index.z) - index.y - 1));
22
+ }
23
+ return url;
24
+ }
25
+ //# sourceMappingURL=url-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-template.js","sourceRoot":"","sources":["../../src/shared-tile-2d-layer/url-template.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAOpC,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,IAGC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAC,KAAK,EAAE,EAAE,EAAC,GAAG,IAAI,CAAC;IAEzB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAsB,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { CompositeLayer, type Color, type DefaultProps } from '@deck.gl/core';
2
+ import { PathLayer, TextLayer } from '@deck.gl/layers';
3
+ import type { SharedTile2DHeader } from "../tileset/index.js";
4
+ /** Label content or formatter used by {@link TileGridLayer}. */
5
+ type TileGridLabelAccessor = string | ((tile: SharedTile2DHeader<unknown>) => string);
6
+ /**
7
+ * Props for {@link TileGridLayer}, a helper overlay for visualizing tile loading
8
+ * and tile selection in tiled layers.
9
+ */
10
+ export type TileGridLayerProps = {
11
+ /** Tile header whose bounds and index should be visualized. */
12
+ tile: SharedTile2DHeader<unknown>;
13
+ /** Whether to draw an outline around the tile bounds. Defaults to `true`. */
14
+ showBorder?: boolean;
15
+ /** Whether to render a label at the tile center. Defaults to `true`. */
16
+ showLabel?: boolean;
17
+ /** Static label text or formatter for per-tile label content. */
18
+ getLabel?: TileGridLabelAccessor;
19
+ /** Stroke color used for the tile border. */
20
+ borderColor?: Color;
21
+ /** Text color used for the tile label. */
22
+ labelColor?: Color;
23
+ /** Background color used behind the tile label text. */
24
+ labelBackgroundColor?: Color;
25
+ /** Minimum screen-space width of the tile border in pixels. */
26
+ borderWidthMinPixels?: number;
27
+ /** Screen-space font size of the tile label in pixels. */
28
+ labelSize?: number;
29
+ };
30
+ /** Internal derived geometry used to render one tile grid overlay. */
31
+ type TileGridLayerItem = {
32
+ path: [number, number][];
33
+ center: [number, number];
34
+ label: string;
35
+ };
36
+ /**
37
+ * Helper layer that renders a tile outline and optional label for visualizing tile
38
+ * loading, coverage, and traversal.
39
+ */
40
+ export declare class TileGridLayer extends CompositeLayer<TileGridLayerProps> {
41
+ static layerName: string;
42
+ static defaultProps: DefaultProps<TileGridLayerProps>;
43
+ /** Builds the tile border and label sublayers. */
44
+ renderLayers(): (PathLayer<TileGridLayerItem, {}> | TextLayer<TileGridLayerItem, {}>)[];
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=tile-grid-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-grid-layer.d.ts","sourceRoot":"","sources":["../../src/tile-grid-layer/tile-grid-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAC,kBAAkB,EAAC,4BAAyB;AAGzD,gEAAgE;AAChE,KAAK,qBAAqB,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+DAA+D;IAC/D,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAC7B,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,sEAAsE;AACtE,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACzB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAiDF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IACnE,MAAM,CAAC,SAAS,SAAmB;IACnC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAgB;IAErE,kDAAkD;IAClD,YAAY;CAwDb"}
@@ -0,0 +1,94 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { CompositeLayer } from '@deck.gl/core';
5
+ import { PathLayer, TextLayer } from '@deck.gl/layers';
6
+ /** Default prop values for {@link TileGridLayer}. */
7
+ const defaultProps = {
8
+ tile: { type: 'object', value: undefined },
9
+ showBorder: true,
10
+ showLabel: true,
11
+ getLabel: {
12
+ type: 'function',
13
+ value: (tile) => `z${tile.index.z} x${tile.index.x} y${tile.index.y}`
14
+ },
15
+ borderColor: [255, 255, 255, 180],
16
+ labelColor: [255, 255, 255, 255],
17
+ labelBackgroundColor: [15, 23, 42, 210],
18
+ borderWidthMinPixels: 1,
19
+ labelSize: 12
20
+ };
21
+ /** Converts a tile bounding box into a closed outline path. */
22
+ function getTilePath(bbox) {
23
+ if ('west' in bbox) {
24
+ return [
25
+ [bbox.west, bbox.north],
26
+ [bbox.west, bbox.south],
27
+ [bbox.east, bbox.south],
28
+ [bbox.east, bbox.north],
29
+ [bbox.west, bbox.north]
30
+ ];
31
+ }
32
+ return [
33
+ [bbox.left, bbox.top],
34
+ [bbox.left, bbox.bottom],
35
+ [bbox.right, bbox.bottom],
36
+ [bbox.right, bbox.top],
37
+ [bbox.left, bbox.top]
38
+ ];
39
+ }
40
+ /** Returns the center point of a tile bounding box. */
41
+ function getTileCenter(bbox) {
42
+ if ('west' in bbox) {
43
+ return [(bbox.west + bbox.east) / 2, (bbox.north + bbox.south) / 2];
44
+ }
45
+ return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
46
+ }
47
+ /**
48
+ * Helper layer that renders a tile outline and optional label for visualizing tile
49
+ * loading, coverage, and traversal.
50
+ */
51
+ export class TileGridLayer extends CompositeLayer {
52
+ static layerName = 'TileGridLayer';
53
+ static defaultProps = defaultProps;
54
+ /** Builds the tile border and label sublayers. */
55
+ renderLayers() {
56
+ const { tile, showBorder, showLabel, getLabel, borderColor, labelColor, labelBackgroundColor, borderWidthMinPixels, labelSize } = this.props;
57
+ const item = {
58
+ path: getTilePath(tile.bbox),
59
+ center: getTileCenter(tile.bbox),
60
+ label: typeof getLabel === 'function' ? getLabel(tile) : getLabel
61
+ };
62
+ return [
63
+ showBorder
64
+ ? new PathLayer(this.getSubLayerProps({
65
+ id: 'border'
66
+ }), {
67
+ data: [item],
68
+ getPath: (d) => d.path,
69
+ getColor: borderColor,
70
+ widthMinPixels: borderWidthMinPixels,
71
+ pickable: false
72
+ })
73
+ : null,
74
+ showLabel
75
+ ? new TextLayer(this.getSubLayerProps({
76
+ id: 'label'
77
+ }), {
78
+ data: [item],
79
+ getPosition: (d) => d.center,
80
+ getText: (d) => d.label,
81
+ getColor: labelColor,
82
+ getBackgroundColor: labelBackgroundColor,
83
+ getSize: labelSize,
84
+ sizeUnits: 'pixels',
85
+ background: true,
86
+ getTextAnchor: 'middle',
87
+ getAlignmentBaseline: 'center',
88
+ pickable: false
89
+ })
90
+ : null
91
+ ];
92
+ }
93
+ }
94
+ //# sourceMappingURL=tile-grid-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-grid-layer.js","sourceRoot":"","sources":["../../src/tile-grid-layer/tile-grid-layer.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAAgC,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAwCrD,qDAAqD;AACrD,MAAM,YAAY,GAAqC;IACrD,IAAI,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAU,EAAC;IACzC,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,CAAC,IAAiC,EAAE,EAAE,CAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;KACvD;IACD,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACjC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAChC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACvC,oBAAoB,EAAE,CAAC;IACvB,SAAS,EAAE,EAAE;CACd,CAAC;AAEF,+DAA+D;AAC/D,SAAS,WAAW,CAAC,IAAqB;IACxC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QACrB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QACxB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QACzB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;QACtB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,SAAS,aAAa,CAAC,IAAqB;IAC1C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,cAAkC;IACnE,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;IACnC,MAAM,CAAC,YAAY,GAAqC,YAAY,CAAC;IAErE,kDAAkD;IAClD,YAAY;QACV,MAAM,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACV,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,MAAM,IAAI,GAAsB;YAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;SAClE,CAAC;QAEF,OAAO;YACL,UAAU;gBACR,CAAC,CAAC,IAAI,SAAS,CACX,IAAI,CAAC,gBAAgB,CAAC;oBACpB,EAAE,EAAE,QAAQ;iBACb,CAAC,EACF;oBACE,IAAI,EAAE,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;oBACtB,QAAQ,EAAE,WAAW;oBACrB,cAAc,EAAE,oBAAoB;oBACpC,QAAQ,EAAE,KAAK;iBAChB,CACF;gBACH,CAAC,CAAC,IAAI;YACR,SAAS;gBACP,CAAC,CAAC,IAAI,SAAS,CACX,IAAI,CAAC,gBAAgB,CAAC;oBACpB,EAAE,EAAE,OAAO;iBACZ,CAAC,EACF;oBACE,IAAI,EAAE,CAAC,IAAI,CAAC;oBACZ,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;oBAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;oBACvB,QAAQ,EAAE,UAAU;oBACpB,kBAAkB,EAAE,oBAAoB;oBACxC,OAAO,EAAE,SAAS;oBAClB,SAAS,EAAE,QAAQ;oBACnB,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,QAAQ;oBACvB,oBAAoB,EAAE,QAAQ;oBAC9B,QAAQ,EAAE,KAAK;iBAChB,CACF;gBACH,CAAC,CAAC,IAAI;SACT,CAAC;IACJ,CAAC"}
@@ -3,7 +3,7 @@ import type { TileLayerProps } from '@deck.gl/geo-layers';
3
3
  import { TileLayer } from '@deck.gl/geo-layers';
4
4
  import type { TileSource } from '@loaders.gl/loader-utils';
5
5
  export type TileSourceLayerProps = TileLayerProps & {
6
- tileSource: TileSource<any>;
6
+ tileSource: TileSource;
7
7
  showTileBorders?: boolean;
8
8
  };
9
9
  /**
@@ -18,7 +18,7 @@ export declare class TileSourceLayer extends CompositeLayer<TileSourceLayerProps
18
18
  showTileBorders: boolean;
19
19
  };
20
20
  state: {
21
- tileSource: TileSource<any> | null;
21
+ tileSource: TileSource | null;
22
22
  };
23
23
  initializeState(): void;
24
24
  updateState({ props, changeFlags }: {
@@ -1 +1 @@
1
- {"version":3,"file":"tile-source-layer.d.ts","sourceRoot":"","sources":["../../src/tile-source-layer/tile-source-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAQ,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAKzD,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,cAAc,CAAC,oBAAoB,CAAC;IACvE,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,YAAY;;MAGjB;IAEF,KAAK,EAAE;QACL,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KACpC,CAAc;IAEf,eAAe;IAMf,WAAW,CAAC,EAAC,KAAK,EAAE,WAAW,EAAC;;;KAAA;IAMhC,YAAY;;;;;;;;;;;;yBAsB8B,GAAG;;;;CAQ9C"}
1
+ {"version":3,"file":"tile-source-layer.d.ts","sourceRoot":"","sources":["../../src/tile-source-layer/tile-source-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAQ,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAKzD,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,cAAc,CAAC,oBAAoB,CAAC;IACvE,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,YAAY;;MAGjB;IAEF,KAAK,EAAE;QACL,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;KAC/B,CAAc;IAEf,eAAe;IAMf,WAAW,CAAC,EAAC,KAAK,EAAE,WAAW,EAAC;;;KAAA;IAMhC,YAAY;;;;;;;;;;;;yBAsB8B,GAAG;;;;CAQ9C"}
@@ -0,0 +1,38 @@
1
+ import type { Matrix4 } from '@math.gl/core';
2
+ import type { Bounds, TileBoundingBox, TileIndex, ZRange } from "./types.js";
3
+ /** Traversal inputs required by a {@link SharedTileset2DAdapter}. */
4
+ export type SharedTileset2DTraversalContext<ViewStateT> = {
5
+ /** Consumer-defined view state used by the adapter. */
6
+ viewState: ViewStateT;
7
+ /** Tile size in pixels. */
8
+ tileSize: number;
9
+ /** Bounding box limiting tile generation. */
10
+ extent?: Bounds | null;
11
+ /** Minimum zoom level to request. */
12
+ minZoom?: number;
13
+ /** Maximum zoom level to request. */
14
+ maxZoom?: number;
15
+ /** Integer zoom offset applied during tile selection. */
16
+ zoomOffset?: number;
17
+ /** Elevation range used during geospatial tile selection. */
18
+ zRange?: ZRange | null;
19
+ /** Optional model matrix applied by the surrounding layer stack. */
20
+ modelMatrix?: Matrix4 | null;
21
+ /** Inverse of the current model matrix. */
22
+ modelMatrixInverse?: Matrix4 | null;
23
+ };
24
+ /** Minimal tile metadata inputs required by a {@link SharedTileset2DAdapter}. */
25
+ export type SharedTileset2DTileContext<ViewStateT> = {
26
+ /** Consumer-defined view state used by the adapter. */
27
+ viewState: ViewStateT;
28
+ /** Tile size in pixels. */
29
+ tileSize: number;
30
+ };
31
+ /** Adapter used by {@link SharedTileset2D} to compute traversal and tile bounds without depending on a specific viewport implementation. */
32
+ export type SharedTileset2DAdapter<ViewStateT> = {
33
+ /** Returns tile indices that should be selected for one traversal context. */
34
+ getTileIndices: (context: SharedTileset2DTraversalContext<ViewStateT>) => TileIndex[];
35
+ /** Returns the structured bounding box for one tile index. */
36
+ getTileBoundingBox: (context: SharedTileset2DTileContext<ViewStateT>, index: TileIndex) => TileBoundingBox;
37
+ };
38
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/tileset/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAC,mBAAgB;AAExE,qEAAqE;AACrE,MAAM,MAAM,+BAA+B,CAAC,UAAU,IAAI;IACxD,uDAAuD;IACvD,SAAS,EAAE,UAAU,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,0BAA0B,CAAC,UAAU,IAAI;IACnD,uDAAuD;IACvD,SAAS,EAAE,UAAU,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,4IAA4I;AAC5I,MAAM,MAAM,sBAAsB,CAAC,UAAU,IAAI;IAC/C,8EAA8E;IAC9E,cAAc,EAAE,CAAC,OAAO,EAAE,+BAA+B,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;IACtF,8DAA8D;IAC9D,kBAAkB,EAAE,CAClB,OAAO,EAAE,0BAA0B,CAAC,UAAU,CAAC,EAC/C,KAAK,EAAE,SAAS,KACb,eAAe,CAAC;CACtB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
5
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/tileset/adapter.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC"}