@loaders.gl/tiles 4.5.3 → 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 +136 -1
- package/dist/dist.dev.js +22570 -4947
- package/dist/dist.min.js +3 -1
- package/dist/image-set.d.ts +94 -0
- package/dist/image-set.d.ts.map +1 -0
- package/dist/image-set.js +243 -0
- package/dist/image-set.js.map +1 -0
- package/dist/index.cjs +10171 -2117
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +50 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
- package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tile.js +70 -0
- package/dist/point-cloud/point-cloud-tile.js.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts +135 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.js +549 -0
- package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
- package/dist/point-cloud/types.d.ts +81 -0
- package/dist/point-cloud/types.d.ts.map +1 -0
- package/dist/point-cloud/types.js +5 -0
- package/dist/point-cloud/types.js.map +1 -0
- package/dist/raster-set.d.ts +124 -0
- package/dist/raster-set.d.ts.map +1 -0
- package/dist/raster-set.js +348 -0
- package/dist/raster-set.js.map +1 -0
- 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 +37 -0
- package/dist/tileset-2d/adapter.d.ts.map +1 -0
- package/dist/tileset-2d/adapter.js +5 -0
- package/dist/tileset-2d/adapter.js.map +1 -0
- package/dist/tileset-2d/index.d.ts +7 -0
- package/dist/tileset-2d/index.d.ts.map +1 -0
- package/dist/tileset-2d/index.js +6 -0
- package/dist/tileset-2d/index.js.map +1 -0
- package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
- package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
- package/dist/tileset-2d/tile-2d-header.js +181 -0
- package/dist/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist/tileset-2d/tileset-2d.d.ts +200 -0
- package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d/tileset-2d.js +532 -0
- package/dist/tileset-2d/tileset-2d.js.map +1 -0
- package/dist/tileset-2d/types.d.ts +44 -0
- package/dist/tileset-2d/types.d.ts.map +1 -0
- package/dist/tileset-2d/types.js +5 -0
- package/dist/tileset-2d/types.js.map +1 -0
- package/dist/tileset-2d.d.ts +2 -0
- package/dist/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d.js +5 -0
- package/dist/tileset-2d.js.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js +130 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
- 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 +410 -0
- package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tile-3d.js +1056 -0
- package/dist/tileset-3d/common/tile-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts +360 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.js +846 -0
- package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts +29 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-cache.js +12 -4
- package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
- 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 +228 -0
- package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-source.js +17 -0
- package/dist/tileset-3d/common/tileset-source.js.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +35 -3
- package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +61 -13
- package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
- 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 +221 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +770 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +110 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +331 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +3 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts +116 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js +450 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +5 -2
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +17 -23
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
- package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +3 -0
- package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +7 -3
- package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +20 -91
- package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts +93 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/frame-state.js +92 -10
- package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +21 -9
- package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
- 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 +72 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js +257 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
- 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/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
- package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
- package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/zoom.js.map +1 -0
- package/dist/types.d.ts +14 -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 -9
- package/src/image-set.ts +328 -0
- package/src/index.ts +157 -9
- package/src/point-cloud/point-cloud-tile.ts +80 -0
- package/src/point-cloud/point-cloud-tileset.ts +767 -0
- package/src/point-cloud/types.ts +99 -0
- package/src/raster-set.ts +504 -0
- 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 +46 -0
- package/src/tileset-2d/index.ts +33 -0
- package/src/tileset-2d/tile-2d-header.ts +224 -0
- package/src/tileset-2d/tileset-2d.ts +715 -0
- package/src/tileset-2d/types.ts +39 -0
- package/src/tileset-2d.ts +5 -0
- package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
- package/src/tileset-3d/common/tile-3d-contracts.ts +115 -0
- package/src/tileset-3d/common/tile-3d.ts +1310 -0
- package/src/tileset-3d/common/tileset-3d.ts +1166 -0
- package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
- 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 +284 -0
- package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +74 -14
- package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +1059 -0
- package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +1025 -0
- package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +379 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-source.ts +557 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +6 -2
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +20 -24
- package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
- package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +31 -114
- package/src/tileset-3d/helpers/frame-state.ts +322 -0
- package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +24 -10
- package/src/tileset-3d/helpers/s2-bounding-volume.ts +35 -0
- package/src/tileset-3d/helpers/tiles-3d-lod.ts +370 -0
- package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
- package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
- package/src/types.ts +18 -0
- package/src/utils/doubly-linked-list.ts +2 -0
- package/src/utils/managed-array.ts +2 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +0 -7
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +0 -53
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.d.ts +0 -28
- package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.js +0 -113
- package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.d.ts.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.d.ts +0 -230
- package/dist/tileset/tile-3d.d.ts.map +0 -1
- package/dist/tileset/tile-3d.js +0 -631
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.d.ts +0 -284
- package/dist/tileset/tileset-3d.d.ts.map +0 -1
- package/dist/tileset/tileset-3d.js +0 -814
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.d.ts +0 -19
- package/dist/tileset/tileset-cache.d.ts.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/tileset-traverser.js.map +0 -1
- package/src/tileset/format-3d-tiles/tileset-3d-traverser.ts +0 -63
- package/src/tileset/helpers/frame-state.ts +0 -183
- package/src/tileset/helpers/tiles-3d-lod.ts +0 -149
- package/src/tileset/tile-3d.ts +0 -788
- package/src/tileset/tileset-3d.ts +0 -1037
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
- /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-spatial-reference.js","sourceRoot":"","sources":["../../src/spatial/format-spatial-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ReadonlyCRSDefinition, type SpatialReferenceCoordinateFrame } from '@math.gl/crs';
|
|
2
|
+
/**
|
|
3
|
+
* Classify a CRS definition into the broad coordinate frame used by 3D format adapters.
|
|
4
|
+
*
|
|
5
|
+
* @param definition - CRS definition to classify.
|
|
6
|
+
* @returns The broad geographic, geocentric, projected, local, or unknown frame.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSpatialCoordinateFrame(definition: ReadonlyCRSDefinition): SpatialReferenceCoordinateFrame;
|
|
9
|
+
/**
|
|
10
|
+
* Classifies authority identifiers for which the tiles runtime has explicit frame knowledge.
|
|
11
|
+
*
|
|
12
|
+
* Unlike {@link getSpatialCoordinateFrame}, this function does not assume that an unrecognized
|
|
13
|
+
* authority identifier is projected. Draft formats use this strict result to avoid inventing
|
|
14
|
+
* semantics for unknown authorities or registry codes.
|
|
15
|
+
*
|
|
16
|
+
* @param definition - Serialized CRS identifier.
|
|
17
|
+
* @returns A known frame, or `undefined` when registry semantics are unavailable.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getKnownCrsIdentifierCoordinateFrame(definition: ReadonlyCRSDefinition | undefined): SpatialReferenceCoordinateFrame | undefined;
|
|
20
|
+
//# sourceMappingURL=get-spatial-coordinate-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-spatial-coordinate-frame.d.ts","sourceRoot":"","sources":["../../src/spatial/get-spatial-coordinate-frame.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EAErC,MAAM,cAAc,CAAC;AAOtB;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,qBAAqB,GAChC,+BAA+B,CAoCjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CAClD,UAAU,EAAE,qBAAqB,GAAG,SAAS,GAC5C,+BAA+B,GAAG,SAAS,CA8B7C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { inferCRSRepresentation, parsePROJString, parseWKTCRS } from '@math.gl/crs';
|
|
5
|
+
import { normalizeCrsIdentifier, WGS84_GEOCENTRIC_CRS, WGS84_GEOGRAPHIC_CRS } from "./normalize-crs-identifier.js";
|
|
6
|
+
/**
|
|
7
|
+
* Classify a CRS definition into the broad coordinate frame used by 3D format adapters.
|
|
8
|
+
*
|
|
9
|
+
* @param definition - CRS definition to classify.
|
|
10
|
+
* @returns The broad geographic, geocentric, projected, local, or unknown frame.
|
|
11
|
+
*/
|
|
12
|
+
export function getSpatialCoordinateFrame(definition) {
|
|
13
|
+
if (typeof definition === 'string') {
|
|
14
|
+
const representation = inferCRSRepresentation(definition);
|
|
15
|
+
if (representation === 'wkt') {
|
|
16
|
+
return getWktCoordinateFrame(definition);
|
|
17
|
+
}
|
|
18
|
+
if (representation === 'proj-string') {
|
|
19
|
+
return getProjStringCoordinateFrame(definition);
|
|
20
|
+
}
|
|
21
|
+
return getKnownCrsIdentifierCoordinateFrame(definition) || 'projected';
|
|
22
|
+
}
|
|
23
|
+
const projJsonDefinition = definition;
|
|
24
|
+
if (projJsonDefinition.type === 'BoundCRS' && projJsonDefinition.source_crs) {
|
|
25
|
+
return getSpatialCoordinateFrame(projJsonDefinition.source_crs);
|
|
26
|
+
}
|
|
27
|
+
if (projJsonDefinition.type === 'CompoundCRS' && projJsonDefinition.components?.[0]) {
|
|
28
|
+
return getSpatialCoordinateFrame(projJsonDefinition.components[0]);
|
|
29
|
+
}
|
|
30
|
+
if (String(projJsonDefinition.type).includes('Projected')) {
|
|
31
|
+
return 'projected';
|
|
32
|
+
}
|
|
33
|
+
if (String(projJsonDefinition.type).includes('Geographic')) {
|
|
34
|
+
return 'geographic';
|
|
35
|
+
}
|
|
36
|
+
if (String(projJsonDefinition.type).includes('Geodetic')) {
|
|
37
|
+
return projJsonDefinition.coordinate_system?.subtype === 'Cartesian'
|
|
38
|
+
? 'geocentric'
|
|
39
|
+
: 'geographic';
|
|
40
|
+
}
|
|
41
|
+
return 'unknown';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Classifies authority identifiers for which the tiles runtime has explicit frame knowledge.
|
|
45
|
+
*
|
|
46
|
+
* Unlike {@link getSpatialCoordinateFrame}, this function does not assume that an unrecognized
|
|
47
|
+
* authority identifier is projected. Draft formats use this strict result to avoid inventing
|
|
48
|
+
* semantics for unknown authorities or registry codes.
|
|
49
|
+
*
|
|
50
|
+
* @param definition - Serialized CRS identifier.
|
|
51
|
+
* @returns A known frame, or `undefined` when registry semantics are unavailable.
|
|
52
|
+
*/
|
|
53
|
+
export function getKnownCrsIdentifierCoordinateFrame(definition) {
|
|
54
|
+
if (typeof definition !== 'string') {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const normalized = normalizeCrsIdentifier(definition);
|
|
58
|
+
if (normalized === WGS84_GEOCENTRIC_CRS) {
|
|
59
|
+
return 'geocentric';
|
|
60
|
+
}
|
|
61
|
+
if (normalized === WGS84_GEOGRAPHIC_CRS || normalized === 'OGC:CRS84') {
|
|
62
|
+
return 'geographic';
|
|
63
|
+
}
|
|
64
|
+
const epsgMatch = /^EPSG:(\d+)$/.exec(normalized);
|
|
65
|
+
if (!epsgMatch) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const identifier = Number(epsgMatch[1]);
|
|
69
|
+
if (identifier === 7789) {
|
|
70
|
+
return 'geocentric';
|
|
71
|
+
}
|
|
72
|
+
if (identifier === 4490 || identifier === 4979) {
|
|
73
|
+
return 'geographic';
|
|
74
|
+
}
|
|
75
|
+
if (identifier === 3857 ||
|
|
76
|
+
(identifier >= 32601 && identifier <= 32660) ||
|
|
77
|
+
(identifier >= 32701 && identifier <= 32760)) {
|
|
78
|
+
return 'projected';
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
/** Classifies a WKT definition using the syntax tree parsed by `@math.gl/crs`. */
|
|
83
|
+
function getWktCoordinateFrame(definition) {
|
|
84
|
+
let root;
|
|
85
|
+
try {
|
|
86
|
+
root = parseWKTCRS(definition).root;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return 'unknown';
|
|
90
|
+
}
|
|
91
|
+
switch (root.keyword.toUpperCase()) {
|
|
92
|
+
case 'GEOCCS':
|
|
93
|
+
return 'geocentric';
|
|
94
|
+
case 'GEOGCS':
|
|
95
|
+
case 'GEOGCRS':
|
|
96
|
+
case 'GEOGRAPHICCRS':
|
|
97
|
+
case 'GEOGRAPHIC2DCRS':
|
|
98
|
+
case 'GEOGRAPHIC3DCRS':
|
|
99
|
+
return 'geographic';
|
|
100
|
+
case 'PROJCS':
|
|
101
|
+
case 'PROJCRS':
|
|
102
|
+
case 'PROJECTEDCRS':
|
|
103
|
+
return 'projected';
|
|
104
|
+
case 'GEODCRS':
|
|
105
|
+
case 'GEODETICCRS': {
|
|
106
|
+
const coordinateSystem = root.values.find((value) => value.type === 'node' && value.keyword.toUpperCase() === 'CS');
|
|
107
|
+
const subtype = coordinateSystem?.values[0];
|
|
108
|
+
if (subtype?.type !== 'enumeration' && subtype?.type !== 'string') {
|
|
109
|
+
return 'unknown';
|
|
110
|
+
}
|
|
111
|
+
return subtype.value.toUpperCase() === 'CARTESIAN'
|
|
112
|
+
? 'geocentric'
|
|
113
|
+
: subtype.value.toUpperCase() === 'ELLIPSOIDAL'
|
|
114
|
+
? 'geographic'
|
|
115
|
+
: 'unknown';
|
|
116
|
+
}
|
|
117
|
+
default:
|
|
118
|
+
return 'unknown';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Classifies a PROJ string using the syntax tree parsed by `@math.gl/crs`. */
|
|
122
|
+
function getProjStringCoordinateFrame(definition) {
|
|
123
|
+
try {
|
|
124
|
+
const projection = parsePROJString(definition).parameters.find(parameter => parameter.name.toLowerCase() === 'proj')?.value;
|
|
125
|
+
switch (projection?.toLowerCase()) {
|
|
126
|
+
case 'longlat':
|
|
127
|
+
case 'latlong':
|
|
128
|
+
return 'geographic';
|
|
129
|
+
case 'geocent':
|
|
130
|
+
return 'geocentric';
|
|
131
|
+
default:
|
|
132
|
+
return projection ? 'projected' : 'unknown';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return 'unknown';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=get-spatial-coordinate-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-spatial-coordinate-frame.js","sourceRoot":"","sources":["../../src/spatial/get-spatial-coordinate-frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves an ArcGIS/I3S linear unit to meters.
|
|
3
|
+
*
|
|
4
|
+
* @param unit - I3S `heightUnit`, `elevationInfo.unit`, or provider unit.
|
|
5
|
+
* @returns Meters per unit, or `undefined` when the declaration is unsupported.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getI3SLinearUnitScale(unit: string | undefined): number | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the source-Z conversion declared by an I3S layer.
|
|
10
|
+
*
|
|
11
|
+
* Legacy `ZFactor` is an explicit conversion to meters and takes precedence over the descriptive
|
|
12
|
+
* `heightUnit`. This avoids applying the same feet-to-meters conversion twice on layers that
|
|
13
|
+
* publish both fields.
|
|
14
|
+
*
|
|
15
|
+
* @param heightUnit - Unit declared by `heightModelInfo.heightUnit`.
|
|
16
|
+
* @param zFactor - Legacy layer conversion factor.
|
|
17
|
+
* @returns Meters per stored Z unit, or `undefined` for an invalid declaration.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getI3SVerticalUnitScale(heightUnit: string | undefined, zFactor: number | undefined): number | undefined;
|
|
20
|
+
//# sourceMappingURL=i3s-elevation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i3s-elevation.d.ts","sourceRoot":"","sources":["../../src/spatial/i3s-elevation.ts"],"names":[],"mappings":"AA6DA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOlF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,GAAG,SAAS,CAKpB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const LINEAR_UNIT_TO_METERS = Object.freeze({
|
|
5
|
+
meter: 1,
|
|
6
|
+
millimeter: 0.001,
|
|
7
|
+
centimeter: 0.01,
|
|
8
|
+
decimeter: 0.1,
|
|
9
|
+
kilometer: 1000,
|
|
10
|
+
foot: 0.3048,
|
|
11
|
+
yard: 0.9144,
|
|
12
|
+
mile: 1609.344,
|
|
13
|
+
'us-foot': 1200 / 3937,
|
|
14
|
+
'us-inch': 0.0254000508001016,
|
|
15
|
+
'us-yard': 3600 / 3937,
|
|
16
|
+
'us-mile': 6336000 / 3937,
|
|
17
|
+
'clarke-foot': 0.3047972654,
|
|
18
|
+
'clarke-yard': 0.9143917962,
|
|
19
|
+
'clarke-link': 0.201166195164,
|
|
20
|
+
'sears-yard': 0.914398414616,
|
|
21
|
+
'sears-foot': 0.304799471539,
|
|
22
|
+
'sears-chain': 20.1167651216,
|
|
23
|
+
'sears-1922-truncated-chain': 20.116756,
|
|
24
|
+
'benoit-1895-b-chain': 20.1167824944,
|
|
25
|
+
'indian-yard': 0.914398530744,
|
|
26
|
+
'indian-1937-yard': 0.91439523,
|
|
27
|
+
'gold-coast-foot': 0.304799710181
|
|
28
|
+
});
|
|
29
|
+
const LINEAR_UNIT_ALIASES = Object.freeze({
|
|
30
|
+
m: 'meter',
|
|
31
|
+
metre: 'meter',
|
|
32
|
+
meters: 'meter',
|
|
33
|
+
metres: 'meter',
|
|
34
|
+
mm: 'millimeter',
|
|
35
|
+
millimetre: 'millimeter',
|
|
36
|
+
millimeters: 'millimeter',
|
|
37
|
+
millimetres: 'millimeter',
|
|
38
|
+
cm: 'centimeter',
|
|
39
|
+
centimetre: 'centimeter',
|
|
40
|
+
centimeters: 'centimeter',
|
|
41
|
+
centimetres: 'centimeter',
|
|
42
|
+
dm: 'decimeter',
|
|
43
|
+
decimetre: 'decimeter',
|
|
44
|
+
decimeters: 'decimeter',
|
|
45
|
+
decimetres: 'decimeter',
|
|
46
|
+
km: 'kilometer',
|
|
47
|
+
kilometre: 'kilometer',
|
|
48
|
+
kilometers: 'kilometer',
|
|
49
|
+
kilometres: 'kilometer',
|
|
50
|
+
ft: 'foot',
|
|
51
|
+
feet: 'foot',
|
|
52
|
+
'us-survey-foot': 'us-foot',
|
|
53
|
+
'us-survey-feet': 'us-foot',
|
|
54
|
+
yd: 'yard',
|
|
55
|
+
yards: 'yard',
|
|
56
|
+
mi: 'mile',
|
|
57
|
+
miles: 'mile'
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Resolves an ArcGIS/I3S linear unit to meters.
|
|
61
|
+
*
|
|
62
|
+
* @param unit - I3S `heightUnit`, `elevationInfo.unit`, or provider unit.
|
|
63
|
+
* @returns Meters per unit, or `undefined` when the declaration is unsupported.
|
|
64
|
+
*/
|
|
65
|
+
export function getI3SLinearUnitScale(unit) {
|
|
66
|
+
if (!unit) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const normalized = unit.trim().toLowerCase().replaceAll('_', '-');
|
|
70
|
+
const canonical = LINEAR_UNIT_ALIASES[normalized] || normalized;
|
|
71
|
+
return LINEAR_UNIT_TO_METERS[canonical];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolves the source-Z conversion declared by an I3S layer.
|
|
75
|
+
*
|
|
76
|
+
* Legacy `ZFactor` is an explicit conversion to meters and takes precedence over the descriptive
|
|
77
|
+
* `heightUnit`. This avoids applying the same feet-to-meters conversion twice on layers that
|
|
78
|
+
* publish both fields.
|
|
79
|
+
*
|
|
80
|
+
* @param heightUnit - Unit declared by `heightModelInfo.heightUnit`.
|
|
81
|
+
* @param zFactor - Legacy layer conversion factor.
|
|
82
|
+
* @returns Meters per stored Z unit, or `undefined` for an invalid declaration.
|
|
83
|
+
*/
|
|
84
|
+
export function getI3SVerticalUnitScale(heightUnit, zFactor) {
|
|
85
|
+
if (zFactor !== undefined) {
|
|
86
|
+
return Number.isFinite(zFactor) && zFactor > 0 ? zFactor : undefined;
|
|
87
|
+
}
|
|
88
|
+
return heightUnit ? getI3SLinearUnitScale(heightUnit) : 1;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=i3s-elevation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i3s-elevation.js","sourceRoot":"","sources":["../../src/spatial/i3s-elevation.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,qBAAqB,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC5E,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,IAAI,GAAG,IAAI;IACtB,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,IAAI,GAAG,IAAI;IACtB,SAAS,EAAE,OAAO,GAAG,IAAI;IACzB,aAAa,EAAE,YAAY;IAC3B,aAAa,EAAE,YAAY;IAC3B,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,aAAa;IAC5B,4BAA4B,EAAE,SAAS;IACvC,qBAAqB,EAAE,aAAa;IACpC,aAAa,EAAE,cAAc;IAC7B,kBAAkB,EAAE,UAAU;IAC9B,iBAAiB,EAAE,cAAc;CAClC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC1E,CAAC,EAAE,OAAO;IACV,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;IACf,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,YAAY;IACzB,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,YAAY;IACzB,EAAE,EAAE,WAAW;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;IACvB,EAAE,EAAE,WAAW;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;IACvB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM;IACb,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;IAChE,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA8B,EAC9B,OAA2B;IAE3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|