@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,210 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ /* eslint-env browser */
6
+ import {RequestScheduler} from '@loaders.gl/loader-utils';
7
+ import type {TileBoundingBox, TileIndex, TileLoadProps} from './types';
8
+
9
+ /** Parameters used by {@link SharedTile2DHeader.loadData}. */
10
+ export type Tile2DLoadDataProps<DataT = any> = {
11
+ /** Shared request scheduler for throttling tile fetches. */
12
+ requestScheduler: RequestScheduler;
13
+ /** Application-provided tile data loader. */
14
+ getData: (props: TileLoadProps) => Promise<DataT | null> | DataT | null;
15
+ /** Callback fired after tile content resolves successfully. */
16
+ onLoad: (tile: SharedTile2DHeader<DataT>) => void;
17
+ /** Callback fired after tile content fails to load. */
18
+ onError: (error: any, tile: SharedTile2DHeader<DataT>) => void;
19
+ };
20
+
21
+ /** Shared tile cache entry used by {@link SharedTileset2D}. */
22
+ export class SharedTile2DHeader<DataT = any> {
23
+ /** x/y/z tile coordinate. */
24
+ index: TileIndex;
25
+ /** Closest cached ancestor tile in the current tree. */
26
+ parent: SharedTile2DHeader | null;
27
+ /** Cached child tiles beneath this tile. */
28
+ children: SharedTile2DHeader[] | null;
29
+ /** Loaded tile payload. */
30
+ content: DataT | null;
31
+
32
+ /** Stable tile cache id. */
33
+ id!: string;
34
+ /** Resolved zoom level for the tile. */
35
+ zoom!: number;
36
+ /** Optional application data associated with the tile. */
37
+ userData?: Record<string, any>;
38
+ /** Bounds represented as `[[minX, minY], [maxX, maxY]]` for loaders.gl compatibility. */
39
+ boundingBox!: [min: number[], max: number[]];
40
+
41
+ /** Abort controller for the current request, if one exists. */
42
+ private _abortController: AbortController | null;
43
+ /** Promise tracking the in-flight tile load, if any. */
44
+ private _loader: Promise<void> | undefined;
45
+ /** Monotonic request id used to ignore stale responses. */
46
+ private _loaderId: number;
47
+ /** Indicates whether the last request completed successfully. */
48
+ private _isLoaded: boolean;
49
+ /** Indicates whether the current request was cancelled. */
50
+ private _isCancelled: boolean;
51
+ /** Indicates whether the tile should be refreshed. */
52
+ private _needsReload: boolean;
53
+ /** Structured bounds assigned when the tile is created. */
54
+ private _bbox!: TileBoundingBox;
55
+
56
+ /** Creates a tile header for a specific tile index. */
57
+ constructor(index: TileIndex) {
58
+ this.index = index;
59
+ this.parent = null;
60
+ this.children = [];
61
+ this.content = null;
62
+
63
+ this._loader = undefined;
64
+ this._abortController = null;
65
+ this._loaderId = 0;
66
+ this._isLoaded = false;
67
+ this._isCancelled = false;
68
+ this._needsReload = false;
69
+ }
70
+
71
+ /** Structured bounds for the tile in the active coordinate system. */
72
+ get bbox(): TileBoundingBox {
73
+ return this._bbox;
74
+ }
75
+
76
+ /** Initializes the tile bounds once during tile creation. */
77
+ set bbox(value: TileBoundingBox) {
78
+ if (this._bbox) return;
79
+
80
+ this._bbox = value;
81
+ if ('west' in value) {
82
+ this.boundingBox = [
83
+ [value.west, value.south],
84
+ [value.east, value.north]
85
+ ];
86
+ } else {
87
+ this.boundingBox = [
88
+ [value.left, value.top],
89
+ [value.right, value.bottom]
90
+ ];
91
+ }
92
+ }
93
+
94
+ /** Resolves to loaded content while a request is in flight, otherwise returns the cached content. */
95
+ get data(): Promise<DataT | null> | DataT | null {
96
+ const loader = this._loader;
97
+ if (!this._isCancelled && loader !== undefined) {
98
+ return loader.then(() => this.data);
99
+ }
100
+ return this.content;
101
+ }
102
+
103
+ /** Indicates whether tile content is available and up to date. */
104
+ get isLoaded(): boolean {
105
+ return this._isLoaded && !this._needsReload;
106
+ }
107
+
108
+ /** Indicates whether a tile request is currently in flight. */
109
+ get isLoading(): boolean {
110
+ return Boolean(this._loader) && !this._isCancelled;
111
+ }
112
+
113
+ /** Indicates whether the tile should be requested again. */
114
+ get needsReload(): boolean {
115
+ return this._needsReload || this._isCancelled;
116
+ }
117
+
118
+ /** Estimated byte size of the cached payload. */
119
+ get byteLength(): number {
120
+ const result = this.content ? (this.content as any).byteLength : 0;
121
+ return Number.isFinite(result) ? result : 0;
122
+ }
123
+
124
+ /** Internal request pipeline used by {@link loadData}. */
125
+ private async _loadData({
126
+ getData,
127
+ requestScheduler,
128
+ onLoad,
129
+ onError
130
+ }: Tile2DLoadDataProps<DataT>): Promise<void> {
131
+ const completeLoad = (tileData: DataT | null, error: unknown, loaderId: number): void => {
132
+ if (loaderId !== this._loaderId) {
133
+ return;
134
+ }
135
+
136
+ this._loader = undefined;
137
+ this.content = tileData;
138
+
139
+ if (this._isCancelled && !tileData) {
140
+ this._isLoaded = false;
141
+ return;
142
+ }
143
+
144
+ this._isLoaded = true;
145
+ this._isCancelled = false;
146
+
147
+ if (error) {
148
+ onError(error, this);
149
+ return;
150
+ }
151
+ onLoad(this);
152
+ };
153
+
154
+ const {index, id, bbox, userData, zoom} = this;
155
+ const loaderId = this._loaderId;
156
+
157
+ this._abortController = new AbortController();
158
+ const {signal} = this._abortController;
159
+ const requestToken = await requestScheduler.scheduleRequest(this, () => 1);
160
+
161
+ if (!requestToken) {
162
+ this._isCancelled = true;
163
+ return;
164
+ }
165
+ if (this._isCancelled) {
166
+ requestToken.done();
167
+ return;
168
+ }
169
+
170
+ let tileData: DataT | null = null;
171
+ let error;
172
+ try {
173
+ tileData = await getData({index, id, bbox, userData, zoom, signal});
174
+ } catch (err) {
175
+ error = err || true;
176
+ } finally {
177
+ requestToken.done();
178
+ }
179
+
180
+ completeLoad(tileData, error, loaderId);
181
+ }
182
+
183
+ /** Loads tile data through the shared scheduler. */
184
+ loadData(opts: Tile2DLoadDataProps): Promise<void> {
185
+ this._isLoaded = false;
186
+ this._isCancelled = false;
187
+ this._needsReload = false;
188
+ this._loaderId++;
189
+ this._loader = this._loadData(opts);
190
+ return this._loader;
191
+ }
192
+
193
+ /** Marks the tile stale so it is refreshed on the next traversal. */
194
+ setNeedsReload(): void {
195
+ if (this.isLoading) {
196
+ this.abort();
197
+ this._loader = undefined;
198
+ }
199
+ this._needsReload = true;
200
+ }
201
+
202
+ /** Cancels an in-flight tile request. */
203
+ abort(): void {
204
+ if (this.isLoaded) {
205
+ return;
206
+ }
207
+ this._isCancelled = true;
208
+ this._abortController?.abort();
209
+ }
210
+ }