Package-level declarations
Types
Compressed-buffer descriptor; encoding is "draco" in every known package.
One storage form of a geometry: uncompressed SoA when compressedAttributes is null.
heightModelInfo: heightModel is "gravity_related_height" (orthometric/MSL) or "ellipsoidal" — the spec defines no default; vertCRS names the datum ("EGM96_height"); heightUnit scales z values, see heightUnitToMeters.
One attribute block in an I3S geometry buffer.
Transcodes an I3S node's default (uncompressed) geometry buffer to a GltfModel so the existing 3D-Tiles mesh pipeline consumes it unchanged (the JIT "I3S→glTF" strategy CesiumJS uses).
Binary layout of an I3S default geometry buffer: integer headerFields, then each vertexOrdering attribute as one contiguous vertexCount-long block, then each featureOrdering attribute as one featureCount-long block. DEFAULT is the common Esri schema.
DTOs + decoders for the I3S documents a tile tree is built from: 3dSceneLayer.json and node pages (nodepages/{n}.json). Scope: I3S 1.7+ compact form (node pages) for the hierarchy; legacy 1.6 per-node 3dNodeIndexDocuments are consulted only for texture names when a package omits textureSetDefinitions. Only consumed fields are modelled; unknown keys ignored.
Primitive value types used by I3S geometry/feature attributes, with their byte width.
Maps a raw I3S vertex (Δlon°, Δlat°, Δheight relative to the node origin) to a local Cartesian offset from the tile origin, written into out[offset..offset+2]. Backed by the real projection so tiles share a consistent curved surface (no tangent-plane seams). Δheight arrives in the layer's declared height unit; applying heightUnitToMeters is the mapper's job.
Web Mercator (EPSG:3857) support for projected-CRS I3S layers: detection plus the spherical metre↔degree conversions the standard defines. Projected packages store OBB centers and vertex offsets in Mercator metres; x is linear in longitude while y needs the exact inverse projection (linearizing y across a node drifts tens of centimetres at mid latitudes).
Mesh resource references for a node.
Legacy per-node 3dNodeIndexDocument.json — only the texture href is consumed.
One nodepages/{n}.json file: a flattened slice of the node tree.
Node-page pagination + LoD metric config.
Oriented bounding box. center is [x, y, height] in the layer's horizontal CRS — geographic [longitude°, latitude°] for 4326, metres for Web Mercator; halfSize is CRS-unit metres in the box's local frame; quaternion is [x, y, z, w].
Root 3dSceneLayer.json document.
SLPK (I3S Scene Layer Package) container reader — the shared ReadOnlyArchive, aliased to keep an SLPK-flavoured name at the I3S call sites.
One texture-set encoding: name under nodes/{res}/textures/, format = jpg|png|dds|ktx2.
Functions
Metres per heightModelInfo.heightUnit — the scale every z value in the package needs to reach the engine's metres. Applies to OBB centre heights and vertex z offsets, not to obb.halfSize, which the spec fixes in metres. Unset or unrecognised means metres; "meter" is what ArcGIS writes, the rest of the enum comes from surveyed data in legacy units.
A vertical CRS wkid is gravity-related unless it falls in the Esri block defining ellipsoidal height per datum (115700 = WGS_1984, 115702 = NAD_1983, …). Every EPSG vertical CRS is gravity-related (3855 = EGM2008, 5703 = NAVD88, 5714 = MSL, 5773 = EGM96), as is the Esri 1057xx block (105700 = WGS_1984_Geoid).
Heights are orthometric (gravity-related/MSL), so an ellipsoid-datum consumer must add the geoid undulation. Sources in declaration-strength order: heightModelInfo.heightModel, the vertical CRS wkid, an embedded VERTCS/VERTCRS in spatialReference.wkt, then the vertCRS name. Nothing declared means ellipsoidal (HAE), matching how a package without a vertical CRS reads. The undulation applied downstream is always EGM96, so an EGM2008/NAVD88 package lands within the sub-metre difference between those geoids.