@loaders.gl/tiles 5.0.0-alpha.1 → 5.0.0-alpha.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.
- package/LICENSE +14 -3
- package/README.md +26 -0
- package/dist/dist.dev.js +20271 -5055
- package/dist/dist.min.js +3 -1
- package/dist/index.cjs +7849 -2081
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +25 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -1
- package/dist/point-cloud/point-cloud-tile.js +3 -0
- package/dist/point-cloud/point-cloud-tile.js.map +1 -1
- package/dist/point-cloud/point-cloud-tileset.d.ts +4 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -1
- package/dist/point-cloud/point-cloud-tileset.js +54 -12
- package/dist/point-cloud/point-cloud-tileset.js.map +1 -1
- package/dist/point-cloud/types.d.ts +17 -0
- package/dist/point-cloud/types.d.ts.map +1 -1
- package/dist/point-cloud/types.js +3 -0
- package/dist/point-cloud/types.js.map +1 -1
- package/dist/raster-set.d.ts +48 -31
- package/dist/raster-set.d.ts.map +1 -1
- package/dist/raster-set.js +104 -24
- package/dist/raster-set.js.map +1 -1
- package/dist/spatial/format-spatial-reference.d.ts +68 -0
- package/dist/spatial/format-spatial-reference.d.ts.map +1 -0
- package/dist/spatial/format-spatial-reference.js +291 -0
- package/dist/spatial/format-spatial-reference.js.map +1 -0
- package/dist/spatial/get-spatial-coordinate-frame.d.ts +20 -0
- package/dist/spatial/get-spatial-coordinate-frame.d.ts.map +1 -0
- package/dist/spatial/get-spatial-coordinate-frame.js +139 -0
- package/dist/spatial/get-spatial-coordinate-frame.js.map +1 -0
- package/dist/spatial/i3s-elevation.d.ts +20 -0
- package/dist/spatial/i3s-elevation.d.ts.map +1 -0
- package/dist/spatial/i3s-elevation.js +90 -0
- package/dist/spatial/i3s-elevation.js.map +1 -0
- package/dist/spatial/i3s-spatial-transformer.d.ts +189 -0
- package/dist/spatial/i3s-spatial-transformer.d.ts.map +1 -0
- package/dist/spatial/i3s-spatial-transformer.js +686 -0
- package/dist/spatial/i3s-spatial-transformer.js.map +1 -0
- package/dist/spatial/normalize-crs-identifier.d.ts +15 -0
- package/dist/spatial/normalize-crs-identifier.d.ts.map +1 -0
- package/dist/spatial/normalize-crs-identifier.js +22 -0
- package/dist/spatial/normalize-crs-identifier.js.map +1 -0
- package/dist/spatial/spatial-coordinate-transformer.d.ts +52 -0
- package/dist/spatial/spatial-coordinate-transformer.d.ts.map +1 -0
- package/dist/spatial/spatial-coordinate-transformer.js +295 -0
- package/dist/spatial/spatial-coordinate-transformer.js.map +1 -0
- package/dist/spatial/spatial-resource-registry.d.ts +44 -0
- package/dist/spatial/spatial-resource-registry.d.ts.map +1 -0
- package/dist/spatial/spatial-resource-registry.js +67 -0
- package/dist/spatial/spatial-resource-registry.js.map +1 -0
- package/dist/spatial/spatial-types.d.ts +190 -0
- package/dist/spatial/spatial-types.d.ts.map +1 -0
- package/dist/spatial/spatial-types.js +192 -0
- package/dist/spatial/spatial-types.js.map +1 -0
- package/dist/spatial/tiles-3d-spatial-transformer.d.ts +32 -0
- package/dist/spatial/tiles-3d-spatial-transformer.d.ts.map +1 -0
- package/dist/spatial/tiles-3d-spatial-transformer.js +175 -0
- package/dist/spatial/tiles-3d-spatial-transformer.js.map +1 -0
- package/dist/tileset-2d/adapter.d.ts +2 -3
- package/dist/tileset-2d/adapter.d.ts.map +1 -1
- package/dist/tileset-2d/tileset-2d.d.ts +2 -3
- package/dist/tileset-2d/tileset-2d.d.ts.map +1 -1
- package/dist/tileset-2d/tileset-2d.js.map +1 -1
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +3 -3
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -1
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js +9 -4
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -1
- package/dist/tileset-3d/common/tile-3d-contracts.d.ts +63 -0
- package/dist/tileset-3d/common/tile-3d-contracts.d.ts.map +1 -0
- package/dist/tileset-3d/common/tile-3d-contracts.js +51 -0
- package/dist/tileset-3d/common/tile-3d-contracts.js.map +1 -0
- package/dist/tileset-3d/common/tile-3d.d.ts +176 -5
- package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -1
- package/dist/tileset-3d/common/tile-3d.js +523 -89
- package/dist/tileset-3d/common/tile-3d.js.map +1 -1
- package/dist/tileset-3d/common/tileset-3d.d.ts +192 -9
- package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -1
- package/dist/tileset-3d/common/tileset-3d.js +303 -23
- package/dist/tileset-3d/common/tileset-3d.js.map +1 -1
- package/dist/tileset-3d/common/tileset-cache.d.ts +11 -1
- package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -1
- package/dist/tileset-3d/common/tileset-cache.js +11 -3
- package/dist/tileset-3d/common/tileset-cache.js.map +1 -1
- package/dist/tileset-3d/common/tileset-content-traversal.d.ts +37 -0
- package/dist/tileset-3d/common/tileset-content-traversal.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-content-traversal.js +80 -0
- package/dist/tileset-3d/common/tileset-content-traversal.js.map +1 -0
- package/dist/tileset-3d/common/tileset-observability.d.ts +60 -0
- package/dist/tileset-3d/common/tileset-observability.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-observability.js +39 -0
- package/dist/tileset-3d/common/tileset-observability.js.map +1 -0
- package/dist/tileset-3d/common/tileset-source.d.ts +51 -9
- package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -1
- package/dist/tileset-3d/common/tileset-source.js.map +1 -1
- package/dist/tileset-3d/common/tileset-traverser.d.ts +33 -1
- package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -1
- package/dist/tileset-3d/common/tileset-traverser.js +59 -11
- package/dist/tileset-3d/common/tileset-traverser.js.map +1 -1
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +182 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +681 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +127 -6
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -1
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +485 -27
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -1
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +103 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -1
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +278 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js +3 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts +23 -6
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-source.js +176 -25
- package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.js +3 -0
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -1
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js +4 -1
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -1
- package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -1
- package/dist/tileset-3d/helpers/3d-tiles-options.js +3 -0
- package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -1
- package/dist/tileset-3d/helpers/bounding-volume.d.ts +7 -3
- package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -1
- package/dist/tileset-3d/helpers/bounding-volume.js +20 -91
- package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -1
- package/dist/tileset-3d/helpers/frame-state.d.ts +67 -2
- package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset-3d/helpers/frame-state.js +92 -10
- package/dist/tileset-3d/helpers/frame-state.js.map +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.js +20 -8
- package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -1
- package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts +17 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.js +20 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.js.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +61 -9
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -1
- package/dist/tileset-3d/helpers/tiles-3d-lod.js +198 -93
- package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +134 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +179 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/doubly-linked-list.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list.js +1 -0
- package/dist/utils/doubly-linked-list.js.map +1 -1
- package/dist/utils/managed-array.d.ts.map +1 -1
- package/dist/utils/managed-array.js +1 -0
- package/dist/utils/managed-array.js.map +1 -1
- package/package.json +12 -10
- package/src/index.ts +78 -1
- package/src/point-cloud/point-cloud-tile.ts +4 -0
- package/src/point-cloud/point-cloud-tileset.ts +70 -12
- package/src/point-cloud/types.ts +21 -0
- package/src/raster-set.ts +197 -67
- package/src/spatial/format-spatial-reference.ts +385 -0
- package/src/spatial/get-spatial-coordinate-frame.ts +169 -0
- package/src/spatial/i3s-elevation.ts +96 -0
- package/src/spatial/i3s-spatial-transformer.ts +957 -0
- package/src/spatial/normalize-crs-identifier.ts +26 -0
- package/src/spatial/spatial-coordinate-transformer.ts +376 -0
- package/src/spatial/spatial-resource-registry.ts +79 -0
- package/src/spatial/spatial-types.ts +422 -0
- package/src/spatial/tiles-3d-spatial-transformer.ts +206 -0
- package/src/tileset-2d/adapter.ts +2 -3
- package/src/tileset-2d/tileset-2d.ts +2 -3
- package/src/tileset-3d/common/indexed-archive-tileset-source.ts +13 -13
- package/src/tileset-3d/common/tile-3d-contracts.ts +115 -0
- package/src/tileset-3d/common/tile-3d.ts +629 -98
- package/src/tileset-3d/common/tileset-3d.ts +459 -29
- package/src/tileset-3d/common/tileset-cache.ts +15 -7
- package/src/tileset-3d/common/tileset-content-traversal.ts +114 -0
- package/src/tileset-3d/common/tileset-observability.ts +100 -0
- package/src/tileset-3d/common/tileset-source.ts +63 -13
- package/src/tileset-3d/common/tileset-traverser.ts +71 -11
- package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +1059 -0
- package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +674 -28
- package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +316 -0
- package/src/tileset-3d/format-i3s/i3s-pending-tiles-register.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-source.ts +220 -29
- package/src/tileset-3d/format-i3s/i3s-tile-manager.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-tileset-traverser.ts +6 -1
- package/src/tileset-3d/helpers/3d-tiles-options.ts +4 -0
- package/src/tileset-3d/helpers/bounding-volume.ts +31 -114
- package/src/tileset-3d/helpers/frame-state.ts +152 -13
- package/src/tileset-3d/helpers/i3s-lod.ts +22 -8
- package/src/tileset-3d/helpers/s2-bounding-volume.ts +35 -0
- package/src/tileset-3d/helpers/tiles-3d-lod.ts +291 -112
- package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
- package/src/types.ts +11 -0
- package/src/utils/doubly-linked-list.ts +2 -0
- package/src/utils/managed-array.ts +2 -0
package/dist/raster-set.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// loaders.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
|
-
// Copyright (c) vis.gl contributors
|
|
3
|
+
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
|
+
import { waitForPromiseWithSignals } from '@loaders.gl/loader-utils';
|
|
4
5
|
const DEFAULT_RASTERSET_PROPS = {
|
|
5
6
|
getMetadata: async () => ({
|
|
6
7
|
width: 0,
|
|
@@ -18,19 +19,30 @@ const DEFAULT_RASTERSET_PROPS = {
|
|
|
18
19
|
debounceTime: 0,
|
|
19
20
|
shouldRefetch: () => true
|
|
20
21
|
};
|
|
21
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Shared raster request manager used by viewport-driven raster examples and layers.
|
|
24
|
+
*
|
|
25
|
+
* @typeParam DataT Raster payload retained by the manager.
|
|
26
|
+
* @typeParam ParametersT Request parameters accepted by the source.
|
|
27
|
+
* @typeParam MetadataT Metadata returned by the source.
|
|
28
|
+
*/
|
|
22
29
|
export class RasterSet {
|
|
23
30
|
/** Cached metadata returned by the backing source, if any. */
|
|
24
31
|
metadata = null;
|
|
25
32
|
_opts;
|
|
26
33
|
_listeners = new Set();
|
|
27
34
|
_currentRequest = null;
|
|
28
|
-
_lastAcceptedRequestId = -1;
|
|
29
35
|
_nextRequestId = 0;
|
|
30
36
|
_loadCounter = 0;
|
|
31
37
|
_timeoutId = null;
|
|
32
38
|
_abortController = null;
|
|
39
|
+
/** Controller owned by the newest metadata request. */
|
|
40
|
+
_metadataAbortController = null;
|
|
33
41
|
_finalized = false;
|
|
42
|
+
/** Generation invalidates metadata from replaced sources. */
|
|
43
|
+
_sourceGeneration = 0;
|
|
44
|
+
/** Monotonic metadata request identity. */
|
|
45
|
+
_metadataRequestId = 0;
|
|
34
46
|
/** Creates a raster manager from a source or direct callbacks. */
|
|
35
47
|
constructor(opts) {
|
|
36
48
|
this._opts = this._normalizeOptions(opts);
|
|
@@ -42,6 +54,10 @@ export class RasterSet {
|
|
|
42
54
|
static fromRasterSource(rasterSource, opts = {}) {
|
|
43
55
|
return new RasterSet({ ...opts, rasterSource });
|
|
44
56
|
}
|
|
57
|
+
/** Convenience factory for sources whose requests are not viewport-shaped. */
|
|
58
|
+
static fromCallbacks(opts) {
|
|
59
|
+
return new RasterSet(opts);
|
|
60
|
+
}
|
|
45
61
|
/** Whether the manager has no requests in flight and a current raster. */
|
|
46
62
|
get isLoaded() {
|
|
47
63
|
return this._loadCounter === 0 && Boolean(this._currentRequest);
|
|
@@ -66,26 +82,46 @@ export class RasterSet {
|
|
|
66
82
|
/** Updates source callbacks or debounce settings, resetting state when the source changes. */
|
|
67
83
|
setOptions(opts) {
|
|
68
84
|
const previousRasterSource = this._opts.rasterSource;
|
|
69
|
-
const
|
|
85
|
+
const mergedOptions = { ...this._opts, ...opts };
|
|
86
|
+
if (opts.rasterSource && opts.rasterSource !== previousRasterSource) {
|
|
87
|
+
mergedOptions.getRaster = opts.getRaster;
|
|
88
|
+
mergedOptions.getMetadata = opts.getMetadata;
|
|
89
|
+
}
|
|
90
|
+
const nextOptions = this._normalizeOptions(mergedOptions);
|
|
70
91
|
const sourceChanged = previousRasterSource !== nextOptions.rasterSource ||
|
|
71
92
|
this._opts.getRaster !== nextOptions.getRaster ||
|
|
72
93
|
this._opts.getMetadata !== nextOptions.getMetadata;
|
|
73
94
|
this._opts = nextOptions;
|
|
74
95
|
if (sourceChanged) {
|
|
75
96
|
this._cancelScheduledRaster();
|
|
97
|
+
this._abortActiveRequest();
|
|
98
|
+
this._metadataAbortController?.abort();
|
|
99
|
+
this._sourceGeneration++;
|
|
76
100
|
this.metadata = null;
|
|
77
101
|
this._currentRequest = null;
|
|
78
|
-
this._lastAcceptedRequestId = -1;
|
|
79
|
-
this._nextRequestId = 0;
|
|
80
102
|
this._emitUpdate();
|
|
81
103
|
}
|
|
82
104
|
}
|
|
83
105
|
/** Loads metadata from the current raster source or callbacks. */
|
|
84
|
-
async loadMetadata() {
|
|
85
|
-
this.
|
|
106
|
+
async loadMetadata(options = {}) {
|
|
107
|
+
if (this._finalized)
|
|
108
|
+
throw new Error('RasterSet is finalized');
|
|
109
|
+
options.signal?.throwIfAborted();
|
|
110
|
+
this._metadataAbortController?.abort();
|
|
111
|
+
const abortController = new AbortController();
|
|
112
|
+
this._metadataAbortController = abortController;
|
|
113
|
+
const abortFromCaller = () => abortController.abort(options.signal?.reason);
|
|
114
|
+
options.signal?.addEventListener('abort', abortFromCaller, { once: true });
|
|
115
|
+
const metadataRequestId = ++this._metadataRequestId;
|
|
116
|
+
const generation = this._sourceGeneration;
|
|
86
117
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
118
|
+
this._startLoading();
|
|
119
|
+
abortController.signal.throwIfAborted();
|
|
120
|
+
const metadata = await waitForPromiseWithSignals(signal => this._opts.getMetadata({ signal }), [abortController.signal]);
|
|
121
|
+
abortController.signal.throwIfAborted();
|
|
122
|
+
if (this._finalized ||
|
|
123
|
+
generation !== this._sourceGeneration ||
|
|
124
|
+
metadataRequestId !== this._metadataRequestId) {
|
|
89
125
|
return metadata;
|
|
90
126
|
}
|
|
91
127
|
this.metadata = metadata;
|
|
@@ -96,8 +132,14 @@ export class RasterSet {
|
|
|
96
132
|
return metadata;
|
|
97
133
|
}
|
|
98
134
|
catch (error) {
|
|
135
|
+
if (abortController.signal.aborted)
|
|
136
|
+
throw abortController.signal.reason;
|
|
137
|
+
if (isAbortError(error))
|
|
138
|
+
throw error;
|
|
99
139
|
const normalizedError = normalizeRasterSetError(error, 'Raster metadata request failed');
|
|
100
|
-
if (!this._finalized
|
|
140
|
+
if (!this._finalized &&
|
|
141
|
+
generation === this._sourceGeneration &&
|
|
142
|
+
metadataRequestId === this._metadataRequestId) {
|
|
101
143
|
for (const listener of this._listeners) {
|
|
102
144
|
listener.onMetadataLoadError?.(normalizedError);
|
|
103
145
|
}
|
|
@@ -105,16 +147,25 @@ export class RasterSet {
|
|
|
105
147
|
throw normalizedError;
|
|
106
148
|
}
|
|
107
149
|
finally {
|
|
150
|
+
options.signal?.removeEventListener('abort', abortFromCaller);
|
|
151
|
+
if (this._metadataAbortController === abortController)
|
|
152
|
+
this._metadataAbortController = null;
|
|
108
153
|
this._finishLoading();
|
|
109
154
|
}
|
|
110
155
|
}
|
|
111
156
|
/** Debounces and issues a new raster request for the supplied parameters. */
|
|
112
157
|
requestRaster(parameters, debounceTime = this._opts.debounceTime) {
|
|
158
|
+
if (this._finalized)
|
|
159
|
+
return -1;
|
|
113
160
|
if (!this.shouldRefetchRaster(parameters)) {
|
|
161
|
+
this._cancelScheduledRaster();
|
|
162
|
+
this._abortActiveRequest();
|
|
163
|
+
this._nextRequestId++;
|
|
114
164
|
return this._currentRequest?.requestId ?? -1;
|
|
115
165
|
}
|
|
116
166
|
const requestId = this._nextRequestId++;
|
|
117
167
|
this._cancelScheduledRaster();
|
|
168
|
+
this._abortActiveRequest();
|
|
118
169
|
if (debounceTime > 0) {
|
|
119
170
|
this._timeoutId = setTimeout(() => {
|
|
120
171
|
this._timeoutId = null;
|
|
@@ -139,6 +190,9 @@ export class RasterSet {
|
|
|
139
190
|
this._finalized = true;
|
|
140
191
|
this._cancelScheduledRaster();
|
|
141
192
|
this._abortActiveRequest();
|
|
193
|
+
this._metadataAbortController?.abort();
|
|
194
|
+
this._metadataAbortController = null;
|
|
195
|
+
this._loadCounter = 0;
|
|
142
196
|
this._listeners.clear();
|
|
143
197
|
}
|
|
144
198
|
/** Loads a raster immediately and accepts it only if it is the newest completed request. */
|
|
@@ -146,20 +200,25 @@ export class RasterSet {
|
|
|
146
200
|
if (this._finalized) {
|
|
147
201
|
return;
|
|
148
202
|
}
|
|
203
|
+
const callerSignal = parameters.signal;
|
|
204
|
+
if (callerSignal?.aborted)
|
|
205
|
+
return;
|
|
206
|
+
const abortController = new AbortController();
|
|
207
|
+
this._abortController = abortController;
|
|
208
|
+
const abortFromCaller = () => abortController.abort(callerSignal?.reason);
|
|
209
|
+
callerSignal?.addEventListener('abort', abortFromCaller, { once: true });
|
|
149
210
|
this._startLoading();
|
|
150
|
-
for (const listener of this._listeners) {
|
|
151
|
-
listener.onRasterLoadStart?.(requestId, parameters);
|
|
152
|
-
}
|
|
153
211
|
try {
|
|
154
|
-
|
|
155
|
-
this.
|
|
156
|
-
|
|
212
|
+
abortController.signal.throwIfAborted();
|
|
213
|
+
for (const listener of this._listeners)
|
|
214
|
+
listener.onRasterLoadStart?.(requestId, parameters);
|
|
215
|
+
abortController.signal.throwIfAborted();
|
|
216
|
+
const raster = await waitForPromiseWithSignals(signal => this._opts.getRaster(withAbortSignal(parameters, signal)), [abortController.signal]);
|
|
157
217
|
if (this._finalized ||
|
|
158
218
|
abortController.signal.aborted ||
|
|
159
|
-
requestId
|
|
219
|
+
requestId !== this._nextRequestId - 1) {
|
|
160
220
|
return;
|
|
161
221
|
}
|
|
162
|
-
this._lastAcceptedRequestId = requestId;
|
|
163
222
|
this._currentRequest = { requestId, parameters, raster };
|
|
164
223
|
for (const listener of this._listeners) {
|
|
165
224
|
listener.onRasterLoad?.(this._currentRequest);
|
|
@@ -167,18 +226,20 @@ export class RasterSet {
|
|
|
167
226
|
this._emitUpdate();
|
|
168
227
|
}
|
|
169
228
|
catch (error) {
|
|
170
|
-
if (isAbortError(error)) {
|
|
229
|
+
if (abortController.signal.aborted || isAbortError(error)) {
|
|
171
230
|
return;
|
|
172
231
|
}
|
|
173
232
|
const normalizedError = normalizeRasterSetError(error, 'Raster request failed');
|
|
174
|
-
if (!this._finalized) {
|
|
233
|
+
if (!this._finalized && requestId === this._nextRequestId - 1) {
|
|
175
234
|
for (const listener of this._listeners) {
|
|
176
235
|
listener.onRasterLoadError?.(requestId, normalizedError, parameters);
|
|
177
236
|
}
|
|
178
237
|
}
|
|
179
238
|
}
|
|
180
239
|
finally {
|
|
181
|
-
|
|
240
|
+
callerSignal?.removeEventListener('abort', abortFromCaller);
|
|
241
|
+
if (this._abortController === abortController)
|
|
242
|
+
this._abortController = null;
|
|
182
243
|
this._finishLoading();
|
|
183
244
|
}
|
|
184
245
|
}
|
|
@@ -190,9 +251,9 @@ export class RasterSet {
|
|
|
190
251
|
...opts,
|
|
191
252
|
rasterSource,
|
|
192
253
|
getMetadata: opts.getMetadata ||
|
|
193
|
-
(
|
|
254
|
+
(options => {
|
|
194
255
|
if (rasterSource) {
|
|
195
|
-
return rasterSource.getMetadata();
|
|
256
|
+
return rasterSource.getMetadata(options);
|
|
196
257
|
}
|
|
197
258
|
return DEFAULT_RASTERSET_PROPS.getMetadata();
|
|
198
259
|
}),
|
|
@@ -210,12 +271,16 @@ export class RasterSet {
|
|
|
210
271
|
}
|
|
211
272
|
/** Emits one generic update notification to all subscribers. */
|
|
212
273
|
_emitUpdate() {
|
|
274
|
+
if (this._finalized)
|
|
275
|
+
return;
|
|
213
276
|
for (const listener of this._listeners) {
|
|
214
277
|
listener.onUpdate?.();
|
|
215
278
|
}
|
|
216
279
|
}
|
|
217
280
|
/** Emits one loading-state transition to all subscribers. */
|
|
218
281
|
_emitLoadingStateChange(isLoading) {
|
|
282
|
+
if (this._finalized)
|
|
283
|
+
return;
|
|
219
284
|
for (const listener of this._listeners) {
|
|
220
285
|
listener.onLoadingStateChange?.(isLoading);
|
|
221
286
|
}
|
|
@@ -251,6 +316,21 @@ export class RasterSet {
|
|
|
251
316
|
this._abortController = null;
|
|
252
317
|
}
|
|
253
318
|
}
|
|
319
|
+
/** Adds cancellation to a request while preserving its array/prototype shape. */
|
|
320
|
+
function withAbortSignal(parameters, signal) {
|
|
321
|
+
const descriptors = Object.getOwnPropertyDescriptors(parameters);
|
|
322
|
+
delete descriptors.signal;
|
|
323
|
+
const request = Array.isArray(parameters)
|
|
324
|
+
? Object.defineProperties(parameters.slice(), descriptors)
|
|
325
|
+
: Object.create(Object.getPrototypeOf(parameters), descriptors);
|
|
326
|
+
Object.defineProperty(request, 'signal', {
|
|
327
|
+
configurable: true,
|
|
328
|
+
enumerable: true,
|
|
329
|
+
value: signal,
|
|
330
|
+
writable: true
|
|
331
|
+
});
|
|
332
|
+
return request;
|
|
333
|
+
}
|
|
254
334
|
/** Normalizes arbitrary thrown values to `Error` instances for raster-set callbacks. */
|
|
255
335
|
function normalizeRasterSetError(error, message) {
|
|
256
336
|
if (error instanceof Error) {
|
package/dist/raster-set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-set.js","sourceRoot":"","sources":["../src/raster-set.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raster-set.js","sourceRoot":"","sources":["../src/raster-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ReadonlyCRSDefinition } from '@math.gl/crs';
|
|
2
|
+
import type { TilesetSpatialReference } from "./spatial-types.js";
|
|
3
|
+
/** ArcGIS/I3S spatial reference fields used without depending on the I3S package. */
|
|
4
|
+
type I3SSpatialReferenceLike = {
|
|
5
|
+
wkid?: number;
|
|
6
|
+
latestWkid?: number;
|
|
7
|
+
vcsWkid?: number;
|
|
8
|
+
latestVcsWkid?: number;
|
|
9
|
+
wkt?: string;
|
|
10
|
+
};
|
|
11
|
+
/** I3S layer fields needed for spatial metadata discovery. */
|
|
12
|
+
type I3SLayerLike = {
|
|
13
|
+
spatialReference?: I3SSpatialReferenceLike;
|
|
14
|
+
fullExtent?: {
|
|
15
|
+
spatialReference?: I3SSpatialReferenceLike;
|
|
16
|
+
};
|
|
17
|
+
heightModelInfo?: {
|
|
18
|
+
heightModel?: string;
|
|
19
|
+
vertCRS?: ReadonlyCRSDefinition;
|
|
20
|
+
heightUnit?: string;
|
|
21
|
+
};
|
|
22
|
+
ZFactor?: number;
|
|
23
|
+
elevationInfo?: {
|
|
24
|
+
mode?: string;
|
|
25
|
+
offset?: number;
|
|
26
|
+
unit?: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/** 3D Tiles document fields needed for CRS semantic discovery. */
|
|
30
|
+
type Tiles3DLike = {
|
|
31
|
+
schema?: {
|
|
32
|
+
classes?: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
schemaUri?: string;
|
|
35
|
+
metadata?: {
|
|
36
|
+
class?: string;
|
|
37
|
+
properties?: Record<string, unknown>;
|
|
38
|
+
};
|
|
39
|
+
root?: {
|
|
40
|
+
boundingVolume?: {
|
|
41
|
+
region?: unknown;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
extensions?: Record<string, unknown>;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Discovers normalized spatial metadata from an I3S scene-layer document.
|
|
48
|
+
*
|
|
49
|
+
* I3S encodes geographic coordinates in longitude/latitude wire order even for authority
|
|
50
|
+
* definitions whose formal axis order differs.
|
|
51
|
+
*
|
|
52
|
+
* @param layer - Parsed I3S layer document.
|
|
53
|
+
* @returns Normalized source spatial metadata.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getI3SSpatialReference(layer: I3SLayerLike): TilesetSpatialReference;
|
|
56
|
+
/**
|
|
57
|
+
* Discovers the 3D Tiles geocentric CRS and coordinate epoch from structured metadata semantics.
|
|
58
|
+
*
|
|
59
|
+
* The method intentionally does not infer ECEF from coordinate magnitude. A root `region`
|
|
60
|
+
* establishes the format's global ellipsoidal frame, while local tilesets without an explicit
|
|
61
|
+
* semantic remain unknown.
|
|
62
|
+
*
|
|
63
|
+
* @param tileset - Parsed 3D Tiles tileset document.
|
|
64
|
+
* @returns Normalized source spatial metadata.
|
|
65
|
+
*/
|
|
66
|
+
export declare function get3DTilesSpatialReference(tileset: Tiles3DLike): TilesetSpatialReference;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=format-spatial-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-spatial-reference.d.ts","sourceRoot":"","sources":["../../src/spatial/format-spatial-reference.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAOxD,OAAO,KAAK,EAAuB,uBAAuB,EAAC,2BAAwB;AAEnF,qFAAqF;AACrF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,8DAA8D;AAC9D,KAAK,YAAY,GAAG;IAClB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,UAAU,CAAC,EAAE;QAAC,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;KAAC,CAAC;IAC1D,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,qBAAqB,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;CACjE,CAAC;AAKF,kEAAkE;AAClE,KAAK,WAAW,GAAG;IACjB,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,CAAC;IAClE,IAAI,CAAC,EAAE;QAAC,cAAc,CAAC,EAAE;YAAC,MAAM,CAAC,EAAE,OAAO,CAAA;SAAC,CAAA;KAAC,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,uBAAuB,CAqEnF;AA8BD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,GAAG,uBAAuB,CA8CxF"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { getI3SLinearUnitScale, getI3SVerticalUnitScale } from "./i3s-elevation.js";
|
|
5
|
+
import { getKnownCrsIdentifierCoordinateFrame, getSpatialCoordinateFrame } from "./get-spatial-coordinate-frame.js";
|
|
6
|
+
import { createTilesetSpatialReference } from "./spatial-types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Discovers normalized spatial metadata from an I3S scene-layer document.
|
|
9
|
+
*
|
|
10
|
+
* I3S encodes geographic coordinates in longitude/latitude wire order even for authority
|
|
11
|
+
* definitions whose formal axis order differs.
|
|
12
|
+
*
|
|
13
|
+
* @param layer - Parsed I3S layer document.
|
|
14
|
+
* @returns Normalized source spatial metadata.
|
|
15
|
+
*/
|
|
16
|
+
export function getI3SSpatialReference(layer) {
|
|
17
|
+
const spatialReference = layer.spatialReference || layer.fullExtent?.spatialReference;
|
|
18
|
+
const sourceCrs = getI3SCrsDefinition(spatialReference);
|
|
19
|
+
const verticalCrs = layer.heightModelInfo?.vertCRS || getI3SVerticalCrsDefinition(spatialReference);
|
|
20
|
+
const heightModel = layer.heightModelInfo?.heightModel;
|
|
21
|
+
const verticalUnit = layer.heightModelInfo?.heightUnit;
|
|
22
|
+
const verticalUnitScale = getI3SVerticalUnitScale(verticalUnit, layer.ZFactor);
|
|
23
|
+
const heightReference = heightModel === 'ellipsoidal'
|
|
24
|
+
? 'ellipsoidal'
|
|
25
|
+
: heightModel === 'gravity_related_height'
|
|
26
|
+
? 'orthometric'
|
|
27
|
+
: 'unknown';
|
|
28
|
+
const sourceIdentifier = getCrsIdentifier(spatialReference);
|
|
29
|
+
const coordinateFrame = sourceIdentifier === undefined
|
|
30
|
+
? sourceCrs
|
|
31
|
+
? getSpatialCoordinateFrame(sourceCrs)
|
|
32
|
+
: 'unknown'
|
|
33
|
+
: getSpatialCoordinateFrame(`EPSG:${sourceIdentifier}`);
|
|
34
|
+
const units = getI3SCoordinateUnits(coordinateFrame, verticalUnit, layer.ZFactor);
|
|
35
|
+
const warnings = [];
|
|
36
|
+
const elevationMode = getI3SElevationMode(layer.elevationInfo?.mode);
|
|
37
|
+
const elevationUnit = layer.elevationInfo ? layer.elevationInfo.unit || 'meter' : undefined;
|
|
38
|
+
const elevationUnitScale = getI3SLinearUnitScale(elevationUnit);
|
|
39
|
+
if (verticalUnitScale === undefined) {
|
|
40
|
+
warnings.push(layer.ZFactor !== undefined
|
|
41
|
+
? `I3S ZFactor ${layer.ZFactor} is not a positive finite conversion factor`
|
|
42
|
+
: `Unsupported I3S vertical unit ${verticalUnit}`);
|
|
43
|
+
}
|
|
44
|
+
if (layer.elevationInfo && elevationUnitScale === undefined) {
|
|
45
|
+
warnings.push(`Unsupported I3S elevation unit ${elevationUnit}`);
|
|
46
|
+
}
|
|
47
|
+
if (layer.elevationInfo?.mode && !elevationMode) {
|
|
48
|
+
warnings.push(`Unsupported I3S elevation mode ${layer.elevationInfo.mode}`);
|
|
49
|
+
}
|
|
50
|
+
if (elevationMode && elevationMode !== 'absoluteHeight') {
|
|
51
|
+
warnings.push(`I3S elevation mode ${elevationMode} requires a terrain or scene elevation provider`);
|
|
52
|
+
}
|
|
53
|
+
return createTilesetSpatialReference({
|
|
54
|
+
sourceCrs,
|
|
55
|
+
sourceCrsRepresentation: sourceIdentifier !== undefined ? 'identifier' : sourceCrs ? 'wkt' : undefined,
|
|
56
|
+
sourceCrsAlternatives: sourceIdentifier !== undefined && spatialReference?.wkt
|
|
57
|
+
? [{ definition: spatialReference.wkt, representation: 'wkt' }]
|
|
58
|
+
: undefined,
|
|
59
|
+
verticalCrs,
|
|
60
|
+
units,
|
|
61
|
+
verticalUnitScale: verticalUnitScale ?? Number.NaN,
|
|
62
|
+
heightReference,
|
|
63
|
+
elevationMode,
|
|
64
|
+
elevationOffset: layer.elevationInfo?.offset,
|
|
65
|
+
elevationUnit,
|
|
66
|
+
elevationUnitScale: layer.elevationInfo?.mode && !elevationMode
|
|
67
|
+
? Number.NaN
|
|
68
|
+
: (elevationUnitScale ?? (layer.elevationInfo ? Number.NaN : 1)),
|
|
69
|
+
coordinateFrame,
|
|
70
|
+
axisOrder: sourceCrs ? 'xyz' : 'unknown',
|
|
71
|
+
provenance: sourceCrs ? 'metadata' : 'unknown',
|
|
72
|
+
warnings
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Return per-component I3S units only when their coordinate association is unambiguous. */
|
|
76
|
+
function getI3SCoordinateUnits(coordinateFrame, verticalUnit, zFactor) {
|
|
77
|
+
if (coordinateFrame === 'geocentric') {
|
|
78
|
+
return ['meter', 'meter', 'meter'];
|
|
79
|
+
}
|
|
80
|
+
if (coordinateFrame === 'geographic' && (verticalUnit || zFactor === undefined)) {
|
|
81
|
+
return ['degree', 'degree', verticalUnit || 'meter'];
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
/** Return a supported I3S elevation mode without widening the public descriptor. */
|
|
86
|
+
function getI3SElevationMode(mode) {
|
|
87
|
+
switch (mode) {
|
|
88
|
+
case 'absoluteHeight':
|
|
89
|
+
case 'onTheGround':
|
|
90
|
+
case 'relativeToGround':
|
|
91
|
+
case 'relativeToScene':
|
|
92
|
+
return mode;
|
|
93
|
+
default:
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Discovers the 3D Tiles geocentric CRS and coordinate epoch from structured metadata semantics.
|
|
99
|
+
*
|
|
100
|
+
* The method intentionally does not infer ECEF from coordinate magnitude. A root `region`
|
|
101
|
+
* establishes the format's global ellipsoidal frame, while local tilesets without an explicit
|
|
102
|
+
* semantic remain unknown.
|
|
103
|
+
*
|
|
104
|
+
* @param tileset - Parsed 3D Tiles tileset document.
|
|
105
|
+
* @returns Normalized source spatial metadata.
|
|
106
|
+
*/
|
|
107
|
+
export function get3DTilesSpatialReference(tileset) {
|
|
108
|
+
const draftSpatialReference = getDraft3DTilesSpatialReference(tileset);
|
|
109
|
+
if (draftSpatialReference) {
|
|
110
|
+
return draftSpatialReference;
|
|
111
|
+
}
|
|
112
|
+
const geocentricCrs = getTilesetSemanticValue(tileset, 'TILESET_CRS_GEOCENTRIC');
|
|
113
|
+
const coordinateEpoch = getTilesetSemanticValue(tileset, 'TILESET_CRS_COORDINATE_EPOCH');
|
|
114
|
+
const warnings = [];
|
|
115
|
+
let sourceCrs;
|
|
116
|
+
let provenance = 'unknown';
|
|
117
|
+
let sourceCrsState;
|
|
118
|
+
if (typeof geocentricCrs === 'string' && geocentricCrs.toUpperCase() !== 'UNKNOWN') {
|
|
119
|
+
sourceCrs = geocentricCrs;
|
|
120
|
+
provenance = 'metadata';
|
|
121
|
+
sourceCrsState = 'explicit';
|
|
122
|
+
}
|
|
123
|
+
else if (geocentricCrs !== undefined) {
|
|
124
|
+
warnings.push('3D Tiles geocentric CRS is explicitly unknown');
|
|
125
|
+
provenance = 'metadata';
|
|
126
|
+
sourceCrsState = 'unknown';
|
|
127
|
+
}
|
|
128
|
+
else if (tileset.root?.boundingVolume?.region) {
|
|
129
|
+
sourceCrs = 'EPSG:4978';
|
|
130
|
+
provenance = 'format-default';
|
|
131
|
+
sourceCrsState = 'default';
|
|
132
|
+
}
|
|
133
|
+
else if (tileset.schemaUri && !tileset.schema) {
|
|
134
|
+
warnings.push('External 3D Tiles metadata schema must be loaded before CRS semantics can resolve');
|
|
135
|
+
}
|
|
136
|
+
const epoch = parseCoordinateEpoch(coordinateEpoch);
|
|
137
|
+
if (coordinateEpoch !== undefined && epoch === undefined) {
|
|
138
|
+
warnings.push('3D Tiles coordinate epoch is not a finite decimal year');
|
|
139
|
+
}
|
|
140
|
+
return createTilesetSpatialReference({
|
|
141
|
+
sourceCrs,
|
|
142
|
+
sourceCrsState,
|
|
143
|
+
sourceCrsRepresentation: sourceCrs ? 'identifier' : undefined,
|
|
144
|
+
coordinateEpoch: epoch,
|
|
145
|
+
heightReference: sourceCrs ? 'ellipsoidal' : 'unknown',
|
|
146
|
+
coordinateFrame: sourceCrs ? 'geocentric' : 'unknown',
|
|
147
|
+
axisOrder: sourceCrs ? 'xyz' : 'unknown',
|
|
148
|
+
provenance,
|
|
149
|
+
warnings
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** Resolves the draft glTF EXT_geospatial_crs WKID or WKT2 declaration. */
|
|
153
|
+
function getDraft3DTilesSpatialReference(tileset) {
|
|
154
|
+
const extension = tileset.extensions?.EXT_geospatial_crs;
|
|
155
|
+
if (!extension) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const warnings = [];
|
|
159
|
+
let sourceCrs;
|
|
160
|
+
let verticalCrs;
|
|
161
|
+
let epoch;
|
|
162
|
+
let representation;
|
|
163
|
+
if (extension.format === 'wkid') {
|
|
164
|
+
const wkidExtension = extension.extensions?.EXT_geospatial_crs_wkid;
|
|
165
|
+
if (typeof wkidExtension?.authority === 'string' && Number.isInteger(wkidExtension.wkid)) {
|
|
166
|
+
sourceCrs = `${wkidExtension.authority}:${wkidExtension.wkid}`;
|
|
167
|
+
representation = 'identifier';
|
|
168
|
+
if (Number.isInteger(wkidExtension.vcsWkid)) {
|
|
169
|
+
verticalCrs = `${wkidExtension.authority}:${wkidExtension.vcsWkid}`;
|
|
170
|
+
}
|
|
171
|
+
epoch = parseCoordinateEpoch(wkidExtension.epoch);
|
|
172
|
+
if (wkidExtension.epoch !== undefined && epoch === undefined) {
|
|
173
|
+
warnings.push('EXT_geospatial_crs_wkid epoch is not a finite decimal year');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
warnings.push('EXT_geospatial_crs_wkid requires string authority and integer wkid');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (extension.format === 'wkt2') {
|
|
181
|
+
const wktExtension = extension.extensions?.EXT_geospatial_crs_wkt2;
|
|
182
|
+
if (typeof wktExtension?.wkt2 === 'string' && wktExtension.wkt2.trim()) {
|
|
183
|
+
sourceCrs = wktExtension.wkt2;
|
|
184
|
+
representation = 'wkt';
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
warnings.push('EXT_geospatial_crs_wkt2 requires a nonempty wkt2 string');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
warnings.push(`Unsupported EXT_geospatial_crs format ${String(extension.format)}`);
|
|
192
|
+
}
|
|
193
|
+
const coordinateFrame = representation === 'wkt'
|
|
194
|
+
? getSpatialCoordinateFrame(sourceCrs)
|
|
195
|
+
: getKnownCrsIdentifierCoordinateFrame(sourceCrs) || 'unknown';
|
|
196
|
+
const verticalSemantics = getDraftVerticalCrsSemantics(verticalCrs);
|
|
197
|
+
if (verticalCrs && !verticalSemantics) {
|
|
198
|
+
warnings.push(`Unsupported vertical CRS ${String(verticalCrs)}; vertical unit and height reference are unknown`);
|
|
199
|
+
}
|
|
200
|
+
const verticalUnit = verticalCrs ? verticalSemantics?.unit : 'meter';
|
|
201
|
+
return createTilesetSpatialReference({
|
|
202
|
+
sourceCrs,
|
|
203
|
+
sourceCrsState: sourceCrs ? 'explicit' : 'unknown',
|
|
204
|
+
sourceCrsRepresentation: representation,
|
|
205
|
+
verticalCrs,
|
|
206
|
+
coordinateEpoch: epoch,
|
|
207
|
+
units: coordinateFrame === 'geocentric'
|
|
208
|
+
? ['meter', 'meter', 'meter']
|
|
209
|
+
: coordinateFrame === 'geographic' && verticalUnit
|
|
210
|
+
? ['degree', 'degree', verticalUnit]
|
|
211
|
+
: undefined,
|
|
212
|
+
verticalUnitScale: verticalCrs ? (verticalSemantics?.verticalUnitScale ?? Number.NaN) : 1,
|
|
213
|
+
heightReference: verticalCrs
|
|
214
|
+
? (verticalSemantics?.heightReference ?? 'unknown')
|
|
215
|
+
: sourceCrs
|
|
216
|
+
? 'ellipsoidal'
|
|
217
|
+
: 'unknown',
|
|
218
|
+
coordinateFrame,
|
|
219
|
+
axisOrder: sourceCrs ? 'xyz' : 'unknown',
|
|
220
|
+
provenance: 'metadata',
|
|
221
|
+
warnings
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/** Resolves vertical units and height interpretation for known EPSG vertical CRSs. */
|
|
225
|
+
function getDraftVerticalCrsSemantics(verticalCrs) {
|
|
226
|
+
if (typeof verticalCrs !== 'string') {
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
const epsgMatch = /^EPSG:(\d+)$/i.exec(verticalCrs);
|
|
230
|
+
if (!epsgMatch) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
switch (Number(epsgMatch[1])) {
|
|
234
|
+
case 5702: // NGVD29 height (ftUS)
|
|
235
|
+
case 6360: // NAVD88 height (ftUS)
|
|
236
|
+
return {
|
|
237
|
+
unit: 'us-foot',
|
|
238
|
+
verticalUnitScale: 1200 / 3937,
|
|
239
|
+
heightReference: 'orthometric'
|
|
240
|
+
};
|
|
241
|
+
case 5703: // NAVD88 height
|
|
242
|
+
return { unit: 'meter', verticalUnitScale: 1, heightReference: 'orthometric' };
|
|
243
|
+
default:
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** Parse the 3D Tiles decimal-year string while tolerating legacy numeric producer output. */
|
|
248
|
+
function parseCoordinateEpoch(value) {
|
|
249
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
if (typeof value === 'string' && !value.trim()) {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
const epoch = Number(value);
|
|
256
|
+
return Number.isFinite(epoch) ? epoch : undefined;
|
|
257
|
+
}
|
|
258
|
+
/** Return an I3S horizontal CRS definition, preferring current WKID aliases over legacy values. */
|
|
259
|
+
function getI3SCrsDefinition(spatialReference) {
|
|
260
|
+
const identifier = getCrsIdentifier(spatialReference);
|
|
261
|
+
if (identifier !== undefined) {
|
|
262
|
+
return `EPSG:${identifier}`;
|
|
263
|
+
}
|
|
264
|
+
return spatialReference?.wkt;
|
|
265
|
+
}
|
|
266
|
+
/** Return an I3S vertical CRS definition. */
|
|
267
|
+
function getI3SVerticalCrsDefinition(spatialReference) {
|
|
268
|
+
const identifier = spatialReference?.latestVcsWkid ?? spatialReference?.vcsWkid;
|
|
269
|
+
return identifier === undefined ? undefined : `EPSG:${identifier}`;
|
|
270
|
+
}
|
|
271
|
+
/** Return the preferred horizontal WKID. */
|
|
272
|
+
function getCrsIdentifier(spatialReference) {
|
|
273
|
+
return spatialReference?.latestWkid ?? spatialReference?.wkid;
|
|
274
|
+
}
|
|
275
|
+
/** Resolve a tileset-wide structured metadata property by its standard semantic. */
|
|
276
|
+
function getTilesetSemanticValue(tileset, semantic) {
|
|
277
|
+
const classIdentifier = tileset.metadata?.class;
|
|
278
|
+
if (!classIdentifier) {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
const classDefinition = tileset.schema?.classes?.[classIdentifier];
|
|
282
|
+
const propertyDefinitions = classDefinition?.properties;
|
|
283
|
+
const propertyValues = tileset.metadata?.properties;
|
|
284
|
+
for (const [propertyIdentifier, propertyDefinition] of Object.entries(propertyDefinitions || {})) {
|
|
285
|
+
if (propertyDefinition.semantic === semantic) {
|
|
286
|
+
return propertyValues?.[propertyIdentifier];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=format-spatial-reference.js.map
|