@loaders.gl/i3s
Version:
i3s .
1,129 lines • 41.5 kB
TypeScript
import type { Matrix4, Quaternion, Vector3 } from '@math.gl/core';
import type { TypedArray, MeshAttribute, TextureLevel } from '@loaders.gl/schema';
import { TILESET_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D, Tileset3D } from '@loaders.gl/tiles';
import I3SNodePagesTiles from "./lib/helpers/i3s-nodepages-tiles.js";
import { LoaderWithParser } from '@loaders.gl/loader-utils';
export type COLOR = [number, number, number, number];
/**
* Extension of SceneLayer3D JSON with postprocessed loader data
*/
export interface I3STilesetHeader extends SceneLayer3D {
/** Not in spec, but is necessary for woking */
url?: string;
/** Base path that non-absolute paths in tileset are relative to. */
basePath?: string;
/** root node metadata */
root: I3STileHeader;
/** instance of the NodePages to tiles loader */
nodePagesTile?: I3SNodePagesTiles;
/** Type of the tileset */
type: TILESET_TYPE.I3S;
/** LOD metric type per I3S spec*/
lodMetricType?: string;
/** LOD metric value */
lodMetricValue?: number;
/** Loader that has to be used to load content */
loader: LoaderWithParser;
}
/** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/nodePage.cmn.md */
export type NodePage = {
/** Array of nodes. */
nodes: NodeInPage[];
};
/**
* Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/mesh.cmn.md
*/
type NodeMesh = {
/**
* The material definition.
*/
material: MeshMaterial;
/** The geometry definition. */
geometry: MeshGeometry;
/** The attribute set definition. */
attribute: meshAttribute;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/meshMaterial.cmn.md */
export type MeshMaterial = {
/** The index in layer.materialDefinitions array. */
definition: number;
/** Resource id for the material textures. i.e: layers/0/nodes/{material.resource}/textures/{tex_name}. Is required if material declares any textures. */
resource?: number;
/** Estimated number of texel for the highest resolution base color texture. */
texelCountHint?: number;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/meshGeometry.cmn.md */
export type MeshGeometry = {
/** The index in layer.geometryDefinitions array */
definition: number;
/** The resource locator to be used to query geometry resources: layers/0/nodes/{this.resource}/geometries/{layer.geometryDefinitions[this.definition].geometryBuffers[0 or 1]}. */
resource: number;
/** Number of vertices in the geometry buffer of this mesh for the umcompressed mesh buffer. Please note that Draco compressed meshes may have less vertices due to de-duplication (actual number of vertices is part of the Draco binary blob). Default=0 */
vertexCount?: number;
/** Number of features for this mesh. Default=0. (Must omit or set to 0 if mesh doesn't use features.) */
featureCount?: number;
};
/** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/meshAttribute.cmn.md */
type meshAttribute = {
/** The resource identifier to be used to locate attribute resources of this mesh. i.e. layers/0/nodes/<resource id>/attributes/... */
resource: number;
};
/**
* Texture format
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md
*/
export type I3STextureFormat = 'jpg' | 'png' | 'ktx-etc2' | 'dds' | 'ktx2';
/** Postprocessed I3S Node */
export type I3STileHeader = I3SMinimalNodeData & {
/** MBS per I3S spec */
mbs: Mbs;
/** Material definition from the layer metadata per I3S spec */
materialDefinition?: I3SMaterialDefinition;
/** Bounding volume converted to 3DTiles format. It is generic for `tile` module */
boundingVolume: {
box?: number[];
sphere?: number[];
};
/** LOD metric selected for usage */
lodMetricType?: string;
/** LOD metric value */
lodMetricValue?: number;
/** Tile content type */
type: TILE_TYPE.MESH;
/** Tile refinement type. I3S supports only `REPLACE` */
refine: TILE_REFINEMENT.REPLACE;
};
/**
* Minimal I3S node data is needed for loading
* These data can come from 3DNodeIndexDocument (I3S spec) or from `I3SNodePagesTiles` instance
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
*/
export type I3SMinimalNodeData = {
/** Node ID */
id: string;
/** Node base path */
url?: string;
/** LOD selection metrics */
lodSelection?: LodSelection[];
obb?: Obb;
/** MBS per I3S spec */
mbs?: Mbs;
/** Geometry content URL */
contentUrl?: string;
/** Texture image URL */
textureUrl?: string;
/** Feature attributes URLs */
attributeUrls?: string[];
/** Material definition from I3S layer metadata */
materialDefinition?: I3SMaterialDefinition;
/** Texture format per I3S spec */
textureFormat: I3STextureFormat;
/** Loader options for texture loader. The loader might be `CompressedTextureLoader` for `dds`, BasisLoader for `ktx2` or ImageLoader for `jpg`and `png` */
textureLoaderOptions?: {
[key: string]: any;
};
/** Child Nodes references */
children: NodeReference[];
/** Is the node has Draco compressed geometry */
isDracoGeometry: boolean;
};
export type I3SParseOptions = {
/** ArcGIS access token */
token?: string;
/** Is 3DSceneLayer json expected in response */
isTileset?: string;
/** Is 3DNodeIndexDocument json expected in response */
isTileHeader?: string;
/** Tile3D instance. This property used only to load tile content */
/** Tile-specific options */
_tileOptions?: I3STileOptions;
/** Tileset-specific options */
_tilesetOptions?: I3STilesetOptions;
/** Load Draco Compressed geometry if available */
useDracoGeometry?: boolean;
/** Load compressed textures if available */
useCompressedTextures?: boolean;
/** Set false if don't need to parse textures */
decodeTextures?: boolean;
/** deck.gl compatible coordinate system.
* https://github.com/visgl/deck.gl/blob/master/docs/developer-guide/coordinate-systems.md
* Supported coordinate systems: METER_OFFSETS, LNGLAT_OFFSETS
*/
coordinateSystem?: number;
/** Options to colorize 3DObjects by attribute value */
colorsByAttribute?: {
/** Feature attribute name */
attributeName: string;
/** Minimum attribute value */
minValue: number;
/** Maximum attribute value */
maxValue: number;
/** Minimum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */
minColor: COLOR;
/** Maximum color. 3DObject will be colorized with gradient from `minColor to `maxColor` */
maxColor: COLOR;
/** Colorization mode. `replace` - replace vertex colors with a new colors, `multiply` - multiply vertex colors with new colors */
mode: 'multiply' | 'replace';
};
/** @deprecated */
tile?: Tile3D | I3STileOptions;
/** Tileset3D instance. This property used only to load tile content */
/** @deprecated */
tileset?: Tileset3D | I3STilesetOptions;
};
export type I3STileOptions = {
isDracoGeometry: boolean;
textureUrl?: string;
textureFormat?: I3STextureFormat;
textureLoaderOptions?: any;
materialDefinition?: I3SMaterialDefinition;
attributeUrls: string[];
mbs: Mbs;
};
export type I3STilesetOptions = {
store: Store;
attributeStorageInfo: AttributeStorageInfo[];
fields: Field[];
};
export type I3STileContent = {
attributes: I3SMeshAttributes;
indices: TypedArray | null;
featureIds: number[] | TypedArray;
vertexCount: number;
modelMatrix: Matrix4;
coordinateSystem: number;
byteLength: number;
texture: TileContentTexture;
[key: string]: any;
};
export type TileContentTexture = ArrayBuffer | {
compressed: boolean;
mipmaps: boolean;
width: number;
height: number;
data: TextureLevel[];
} | null;
export type BoundingVolumes = {
mbs: Mbs;
obb: Obb;
};
/**
* Oriented bounding box per I3S spec
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/obb.cmn.md
*/
export type Obb = {
center: number[] | Vector3;
halfSize: number[] | Vector3;
quaternion: number[] | Quaternion;
};
/**
* Minimum bounding sphere per I3S spec
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md#properties
*/
export type Mbs = [number, number, number, number];
/** SceneLayer3D based on I3S specification - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/3DSceneLayer.cmn.md */
export type SceneLayer3D = {
/** Unique numeric ID of the layer. */
id: number;
/** The relative URL to the 3DSceneLayerResource. Only present as part of the SceneServiceInfo resource. */
href?: string;
/** The user-visible layer type */
layerType: '3DObject' | 'IntegratedMesh';
/** The spatialReference of the layer including the vertical coordinate reference system (CRS). Well Known Text (WKT) for CRS is included to support custom CRS. */
spatialReference?: SpatialReference;
/** Enables consuming clients to quickly determine whether this layer is compatible (with respect to its horizontal and vertical coordinate system) with existing content. */
heightModelInfo?: HeightModelInfo;
/** The ID of the last update session in which any resource belonging to this layer has been updated. */
version: string;
/** The name of this layer. */
name?: string;
/** The time of the last update. */
serviceUpdateTimeStamp?: {
lastUpdate: number;
};
/** The display alias to be used for this layer. */
alias?: string;
/** Description string for this layer. */
description?: string;
/** Copyright and usage information for the data in this layer. */
copyrightText?: string;
/** Capabilities supported by this layer. */
capabilities: string[];
/** ZFactor to define conversion factor for elevation unit. */
ZFactor?: number;
/** Indicates if any styling information represented as drawingInfo is captured as part of the binary mesh representation. */
cachedDrawingInfo?: CachedDrawingInfo;
/** An object containing drawing information. */
drawingInfo?: DrawingInfo;
/** An object containing elevation drawing information. If absent, any content of the scene layer is drawn at its z coordinate. */
elevationInfo?: ElevationInfo;
/** PopupInfo of the scene layer. */
popupInfo?: PopupInfo;
/** Indicates if client application will show the popup information. Default is FALSE. */
disablePopup: boolean;
/**
* The store object describes the exact physical storage of a layer and
* enables the client to detect when multiple layers are served from
* the same store.
*/
store: Store;
/** A collection of objects that describe each attribute field regarding its field name, datatype, and a user friendly name {name,type,alias}. */
fields?: Field[];
/** Provides the schema and layout used for storing attribute content in binary format in I3S. */
attributeStorageInfo?: AttributeStorageInfo[];
/** Contains the statistical information for a layer. */
statisticsInfo?: StatisticsInfo[];
/** The paged-access index description. */
nodePages?: NodePageDefinition;
/** List of materials classes used in this layer. */
materialDefinitions?: I3SMaterialDefinition[];
/** Defines the set of textures that can be referenced by meshes. */
textureSetDefinitions?: TextureSetDefinition[];
/** Define the layouts of mesh geometry and its attributes */
geometryDefinitions?: GeometryDefinition[];
/** 3D extent. */
fullExtent?: FullExtent;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/cachedDrawingInfo.cmn.md */
export type CachedDrawingInfo = {
/** If true, the drawingInfo is captured as part of the binary scene layer representation. */
color: boolean;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/drawingInfo.cmn.md */
export type DrawingInfo = {
/** An object defining the symbology for the layer. See more information about supported renderer types in ArcGIS clients. */
renderer: any;
/** Scale symbols for the layer. */
scaleSymbols: boolean;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/elevationInfo.cmn.md */
export type ElevationInfo = {
mode: 'relativeToGround' | 'absoluteHeight' | 'onTheGround' | 'relativeToScene';
/** Offset is always added to the result of the above logic except for onTheGround where offset is ignored. */
offset: number;
/** A string value indicating the unit for the values in elevationInfo */
unit: string;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/statisticsInfo.cmn.md */
export type StatisticsInfo = {
/** Key indicating the resource of the statistics. */
key: string;
/** Name of the field of the statistical information. */
name: string;
/** The URL to the statistics information. */
href: string;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/nodePageDefinition.cmn.md */
export type NodePageDefinition = {
/** Number of nodes per page for this layer. Must be a power-of-two less than 4096 */
nodesPerPage: number;
/** Index of the root node. Default = 0. */
rootIndex?: number;
/** Defines the meaning of nodes[].lodThreshold for this layer. */
lodSelectionMetricType: 'maxScreenThresholdSQ';
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialDefinitions.cmn.md */
export type I3SMaterialDefinition = {
/** A set of parameter values that are used to define the metallic-roughness material model from Physically-Based Rendering (PBR) methodology. When not specified, all the default values of pbrMetallicRoughness apply. */
pbrMetallicRoughness: I3SPbrMetallicRoughness;
/** The normal texture map. */
normalTexture?: I3SMaterialTexture;
/** The occlusion texture map. */
occlusionTexture?: I3SMaterialTexture;
/** The emissive texture map. */
emissiveTexture?: I3SMaterialTexture;
/** The emissive color of the material. */
emissiveFactor?: [number, number, number];
/** Defines the meaning of the alpha-channel/alpha-mask. */
alphaMode: 'opaque' | 'mask' | 'blend';
/** The alpha cutoff value of the material. */
alphaCutoff?: number;
/** Specifies whether the material is double sided. */
doubleSided?: boolean;
/** Winding order is counterclockwise. */
cullFace?: 'none' | 'front' | 'back';
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/pbrMetallicRoughness.cmn.md */
export type I3SPbrMetallicRoughness = {
/** The material's base color factor. default=[1,1,1,1] */
baseColorFactor?: [number, number, number, number];
/** The base color texture. */
baseColorTexture?: I3SMaterialTexture;
/** the metalness of the material. default=1.0 */
metallicFactor: number;
/** the roughness of the material. default=1.0 */
roughnessFactor: number;
/** the metallic-roughness texture. */
metallicRoughnessTexture?: I3SMaterialTexture;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialTexture.cmn.md */
export type I3SMaterialTexture = {
/** The index in layer.textureSetDefinitions. */
textureSetDefinitionId: number;
/** The set index of texture's TEXCOORD attribute used for texture coordinate mapping. Default is 0. Deprecated. */
texCoord?: number;
/** The normal texture: scalar multiplier applied to each normal vector of the normal texture. For occlusion texture,scalar multiplier controlling the amount of occlusion applied. Default=1 */
factor?: number;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/attributeStorageInfo.cmn.md */
export type AttributeStorageInfo = {
key: string;
name: string;
header: {
property: string;
valueType: string;
}[];
ordering?: string[];
attributeValues?: AttributeValue;
attributeByteCounts?: AttributeValue;
objectIds?: AttributeValue;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/field.cmn.md */
export type Field = {
name: string;
type: ESRIField;
alias?: string;
domain?: Domain;
};
export type ESRIField = 'esriFieldTypeDate' | 'esriFieldTypeSingle' | 'esriFieldTypeDouble' | 'esriFieldTypeGUID' | 'esriFieldTypeGlobalID' | 'esriFieldTypeInteger' | 'esriFieldTypeOID' | 'esriFieldTypeSmallInteger' | 'esriFieldTypeString';
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/popupInfo.cmn.md */
export type PopupInfo = {
title?: string;
description?: string;
expressionInfos?: any[];
fieldInfos?: FieldInfo[];
mediaInfos?: any[];
popupElements?: {
text?: string;
type?: string;
fieldInfos?: FieldInfo[];
}[];
};
/**
* Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
*/
export type Node3DIndexDocument = {
id: string;
version?: string;
level?: number;
mbs?: Mbs;
obb?: Obb;
lodSelection?: LodSelection[];
children?: NodeReference[];
neighbors?: NodeReference[];
parentNode?: NodeReference;
sharedResource?: Resource;
featureData?: Resource[];
geometryData?: Resource[];
textureData?: Resource[];
attributeData?: Resource[];
created?: string;
expires?: string;
};
/**
* LOD selection metrics per I3S spec
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/lodSelection.cmn.md
*/
export type LodSelection = {
/** */
metricType?: string;
maxError: number;
};
/**
* Node reference per I3S spec
* @see https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md
*/
export type NodeReference = {
/** Tree Key ID of the referenced node represented as string. */
id: string;
/** Version (store update session ID) of the referenced node. */
version?: string;
/** An array of four doubles, corresponding to x, y, z and radius of the minimum bounding sphere of a node. */
mbs?: Mbs;
/** Describes oriented bounding box. */
obb?: Obb;
/** Number of values per element. */
href?: string;
/** Number of features in the referenced node and its descendants, down to the leaf nodes. */
featureCount?: number;
};
export type Resource = {
href: string;
layerContent?: string[];
featureRange?: number[];
multiTextureBundle?: string;
vertexElements?: number[];
faceElements?: number[];
nodePath?: string;
};
export type MaxScreenThresholdSQ = {
maxError: number;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/node.cmn.md */
export type NodeInPage = {
/**
* The index in the node array. May be different than material, geometry and attribute resource id. See mesh for more information.
*/
index: number;
/**
* The index of the parent node in the node array.
*/
parentIndex?: number;
/**
* When to switch LoD. See https://github.com/Esri/i3s-spec/blob/master/docs/1.8/nodePageDefinition.cmn.md for more information.
*/
lodThreshold?: number;
/**
* Oriented bounding box for this node.
*/
obb: Obb;
/**
* index of the children nodes indices.
*/
children?: number[];
/**
* The mesh for this node. WARNING: only SINGLE mesh is supported at version 1.7 (i.e. length must be 0 or 1).
*/
mesh?: NodeMesh;
};
/**
* https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialDefinitionInfo.cmn.md
*/
export type MaterialDefinitionInfo = {
/** A name for the material as assigned in the creating application. */
name?: string;
/** Indicates the material type, chosen from the supported values. */
type?: 'standard' | 'water' | 'billboard' | 'leafcard' | 'reference';
/** The href that resolves to the shared resource bundle in which the material definition is contained. */
$ref?: string;
/** Parameter defined for the material.
* https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialParams.cmn.md
*/
params: {
/** Indicates transparency of this material; 0 = opaque, 1 = fully transparent. */
transparency?: number;
/** Indicates reflectivity of this material. */
reflectivity?: number;
/** Indicates shininess of this material. */
shininess?: number;
/** Ambient color of this material. Ambient color is the color of an object where it is in shadow.
* This color is what the object reflects when illuminated by ambient light rather than direct light. */
ambient?: number[];
/** Diffuse color of this material. Diffuse color is the most instinctive meaning of the color of an object.
* It is that essential color that the object reveals under pure white light. It is perceived as the color
* of the object itself rather than a reflection of the light. */
diffuse?: number[];
/** Specular color of this material. Specular color is the color of the light of a specular reflection
* (specular reflection is the type of reflection that is characteristic of light reflected from a shiny
* surface). */
specular?: number[];
/** Rendering mode. */
renderMode: 'textured' | 'solid' | 'untextured' | 'wireframe';
/** TRUE if features with this material should cast shadows. */
castShadows?: boolean;
/** TRUE if features with this material should receive shadows */
receiveShadows?: boolean;
/** Indicates the material culling options {back, front, none}. */
cullFace?: string;
/** This flag indicates that the vertex color attribute of the geometry should be used to color the geometry
* for rendering. If texture is present, the vertex colors are multiplied by this color.
* e.g. pixel_color = [interpolated]vertex_color * texel_color. Default is false. */
vertexColors?: boolean;
/** This flag indicates that the geometry has uv region vertex attributes. These are used for adressing
* subtextures in a texture atlas. The uv coordinates are relative to this subtexture in this case.
* This is mostly useful for repeated textures in a texture atlas. Default is false. */
vertexRegions?: boolean;
/** Indicates whether Vertex Colors also contain a transparency channel. Default is false. */
useVertexColorAlpha?: boolean;
};
};
/** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/sharedResource.cmn.md */
export type SharedResources = {
/** Materials describe how a Feature or a set of Features is to be rendered. */
materialDefinitions?: {
[key: string]: MaterialDefinitionInfo;
};
/** A Texture is a set of images, with some parameters specific to the texture/uv mapping to geometries. */
textureDefinitions?: {
[key: string]: TextureDefinitionInfo;
};
};
/** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/image.cmn.md */
type TextureImage = {
/** A unique ID for each image. Generated using the BuildID function. */
id: string;
/** width of this image, in pixels. */
size?: number;
/** The maximum size of a single pixel in world units.
* This property is used by the client to pick the image to load and render. */
pixelInWorldUnits?: number;
/** The href to the image(s), one per encoding, in the same order as the encodings. */
href?: string[];
/** The byte offset of this image's encodings. There is one per encoding,
* in the same order as the encodings, in the block in which this texture image resides. */
byteOffset?: string[];
/** The length in bytes of this image's encodings. There is one per encoding,
* in the same order as the encodings. */
length?: number[];
};
export type Attribute = 'OBJECTID' | 'string' | 'double' | 'Int32' | string;
export type Extent = [number, number, number, number];
export type FeatureAttribute = {
id: AttributeValue;
faceRange: AttributeValue;
};
export type BuildingSceneLayerTileset = {
header: BuildingSceneLayer;
sublayers: BuildingSceneSublayer[];
};
export type BuildingSceneLayer = {
id: number;
name: string;
version: string;
alias?: string;
layerType: 'Building';
description?: string;
copyrightText?: string;
fullExtent: FullExtent;
spatialReference: SpatialReference;
heightModelInfo?: HeightModelInfo;
sublayers: BuildingSceneSublayer[];
filters?: Filter[];
activeFilterID?: string;
statisticsHRef?: string;
};
export type BuildingSceneSublayer = {
id: number;
name: string;
alias?: string;
discipline?: 'Mechanical' | 'Architectural' | 'Piping' | 'Electrical' | 'Structural';
modelName?: string;
layerType: 'group' | '3DObject' | 'Point';
visibility?: boolean;
sublayers?: BuildingSceneSublayer[];
isEmpty?: boolean;
url?: string;
};
type Filter = {
id: string;
name: string;
description: string;
isDefaultFilter?: boolean;
isVisible?: boolean;
filterBlocks: FilterBlock[];
filterAuthoringInfo?: FilterAuthoringInfo;
};
type FilterAuthoringInfo = {
type: string;
filterBlocks: FilterBlockAuthoringInfo[];
};
type FilterBlockAuthoringInfo = {
filterTypes: FilterType[];
};
type FilterType = {
filterType: string;
filterValues: string[];
};
type FilterBlock = {
title: string;
filterMode: FilterModeSolid | FilterModeWireFrame;
filterExpression: string;
};
type Edges = {
type: string;
color: number[];
size: number;
transparency: number;
extensionLength: number;
};
type FilterModeSolid = {
type: 'solid';
};
type FilterModeWireFrame = {
type: 'wireFrame';
edges: Edges;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/spatialReference.cmn.md */
export type SpatialReference = {
/** The current WKID value of the vertical coordinate system. */
latestVcsWkid: number;
/** dentifies the current WKID value associated with the same spatial reference. */
latestWkid: number;
/** The WKID value of the vertical coordinate system. */
vcsWkid: number;
/** WKID, or Well-Known ID, of the CRS. Specify either WKID or WKT of the CRS. */
wkid: number;
/** WKT, or Well-Known Text, of the CRS. Specify either WKT or WKID of the CRS but not both. */
wkt?: string;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md */
export type FullExtent = {
/** left longitude in decimal degrees */
xmin: number;
/** right longitude in decimal degrees */
xmax: number;
/** bottom latitude in decimal degrees*/
ymin: number;
/** top latitude in decimal degrees*/
ymax: number;
/** lowest elevation in meters */
zmin: number;
/** highest elevation in meters */
zmax: number;
spatialReference?: SpatialReference;
};
/**
* https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureDefinitionInfo.cmn.md
*/
export type TextureDefinitionInfo = {
/** MIMEtype - The encoding/content type that is used by all images in this map */
encoding?: string[];
/** UV wrapping modes, from {none, repeat, mirror}. */
wrap?: string[];
/** TRUE if the Map represents a texture atlas. */
atlas?: boolean;
/** The name of the UV set to be used as texture coordinates. */
uvSet?: string;
/** Indicates channels description. */
channels?: 'rbg' | 'rgba' | string;
/** An image is a binary resource, containing a single raster that can be used to texture a feature or symbol. */
images: TextureImage[];
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/domain.cmn.md */
type Domain = {
type: string;
name: string;
description?: string;
fieldType?: string;
range?: [number, number];
codedValues?: {
name: string;
code: string | number;
}[];
mergePolicy?: string;
splitPolicy?: string;
};
/**
* spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/store.cmn.md
*/
type Store = {
id?: string | number;
profile: string;
version: number | string;
resourcePattern?: string[];
rootNode?: string;
extent?: number[];
indexCRS?: string;
vertexCRS?: string;
normalReferenceFrame?: string;
lodType?: string;
lodModel?: string;
defaultGeometrySchema: DefaultGeometrySchema;
nidEncoding?: string;
textureEncoding?: string[];
featureEncoding?: string;
geometryEncoding?: string;
attributeEncoding?: string;
indexingScheme?: string;
};
/**
* Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/defaultGeometrySchema.cmn.md
*/
type DefaultGeometrySchema = {
geometryType?: 'triangles';
topology: 'PerAttributeArray' | 'Indexed';
header: HeaderAttribute[];
ordering: string[];
vertexAttributes: VertexAttribute;
faces?: VertexAttribute;
featureAttributeOrder: string[];
featureAttributes: FeatureAttribute;
attributesOrder?: string[];
};
/**
* spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/headerAttribute.cmn.md
*/
export type HeaderAttribute = {
property: HeaderAttributeProperty.vertexCount | HeaderAttributeProperty.featureCount | string;
type: 'UInt8' | 'UInt16' | 'UInt32' | 'UInt64' | 'Int16' | 'Int32' | 'Int64' | 'Float32' | 'Float64';
};
export declare enum HeaderAttributeProperty {
vertexCount = "vertexCount",
featureCount = "featureCount"
}
export type VertexAttribute = {
position: GeometryAttribute;
normal: GeometryAttribute;
uv0: GeometryAttribute;
color: GeometryAttribute;
region?: GeometryAttribute;
};
export type GeometryAttribute = {
byteOffset?: number;
valueType: 'UInt8' | 'UInt16' | 'Int16' | 'Int32' | 'Int64' | 'Float32' | 'Float64';
valuesPerElement: number;
};
export type I3SMeshAttributes = {
[key: string]: I3SMeshAttribute;
};
export interface I3SMeshAttribute extends MeshAttribute {
type?: number;
metadata?: any;
}
/** https://github.com/Esri/i3s-spec/blob/master/docs/1.8/heightModelInfo.cmn.md */
type HeightModelInfo = {
heightModel: 'gravity_related_height' | 'ellipsoidal';
vertCRS: string;
heightUnit: 'meter' | 'us-foot' | 'foot' | 'clarke-foot' | 'clarke-yard' | 'clarke-link' | 'sears-yard' | 'sears-foot' | 'sears-chain' | 'benoit-1895-b-chain' | 'indian-yard' | 'indian-1937-yard' | 'gold-coast-foot' | 'sears-1922-truncated-chain' | 'us-inch' | 'us-mile' | 'us-yard' | 'millimeter' | 'decimeter' | 'centimeter' | 'kilometer';
};
export type TextureSetDefinitionFormats = {
name: string;
format: I3STextureFormat;
}[];
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinition.cmn.md */
type TextureSetDefinition = {
formats: TextureSetDefinitionFormats;
atlas?: boolean;
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/geometryDefinition.cmn.md */
type GeometryDefinition = {
topology?: 'triangle';
geometryBuffers: GeometryBuffer[];
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/geometryBuffer.cmn.md */
type GeometryBuffer = {
offset?: number;
position?: GeometryBufferItem;
normal?: GeometryBufferItem;
uv0?: GeometryBufferItem;
color?: GeometryBufferItem;
uvRegion?: GeometryBufferItem;
featureId?: GeometryBufferItem;
faceRange?: GeometryBufferItem;
compressedAttributes?: {
encoding: string;
attributes: string[];
};
};
type GeometryBufferItem = {
type: string;
component: number;
encoding?: string;
binding?: string;
};
type AttributeValue = {
valueType: string;
encoding?: string;
valuesPerElement?: number;
};
export type FieldInfo = {
fieldName: string;
visible: boolean;
isEditable: boolean;
label: string;
};
export type ArcGISWebSceneData = {
header: ArcGISWebScene;
layers: OperationalLayer[];
unsupportedLayers: OperationalLayer[];
};
/**
* ArcGIS WebScene spec - https://developers.arcgis.com/web-scene-specification/objects/webscene/
*/
export type ArcGISWebScene = {
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/applicationProperties/
* Configuration of application and UI elements.
*/
applicationProperties?: any;
/**
* Operational layers contain business data which are used to make thematic scenes.
*/
operationalLayers: OperationalLayer[];
/**
* Basemaps give the web scene a geographic context.
*/
baseMap: BaseMap;
/**
* Ground defines the main surface of the web scene, based on elevation layers.
*/
ground: Ground;
/**
* An object that defines the characteristics of the vertical coordinate system used by the web scene.
*/
heightModelInfo: HeightModelInfo;
/**
* Root element in the web scene specifying a string value indicating the web scene version.
* Valid values: 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27
*/
version: string;
/**
* String value indicating the application which authored the webmap
*/
authoringApp: string;
/**
* String value indicating the authoring App's version number.
*/
authoringAppVersion: string;
/**
* A presentation consists of multiple slides, where each slide is a specific view into the web scene.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/presentation/
* @todo Add presentation type.
*/
presentation: ArcGISPresentation;
/**
* An object that provides information about the initial environment settings and viewpoint of the web scene.
*/
initialState: InitialState;
/**
* An object used to specify the spatial reference of the given geometry.
*/
spatialReference: SpatialReference;
viewingMode: 'global' | 'local';
/**
* @todo add type.
* Defines area to be clipped for display.
*/
clippingArea?: any;
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/mapFloorInfo/
* Contains floor-awareness information for the web scene.
*/
mapFloorInfo?: any;
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/mapRangeInfo/
* Map Range Information
*/
mapRangeInfo?: any;
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/table/
* An array of table objects.
*/
tables?: any;
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/transportationNetwork/
* Used to specify the transportation networks of the scene.
*/
transportationNetworks?: any;
/**
* @todo add type.
* Spec - https://developers.arcgis.com/web-scene-specification/objects/widgets/
* The widgets object contains widgets that should be exposed to the user.
*/
widgets?: any;
};
/**
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Presentation.html
*/
type ArcGISPresentation = {
slides: Slide[];
};
/**
* A slide stores a snapshot of several pre-set properties of the WebScene and SceneView,
* such as the basemap, viewpoint and visible layers.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html
*/
type Slide = {
id: string;
title: {
text: string;
};
thumbnail: {
url: string;
};
description: {
text: string;
};
ground: {
transparency: number;
};
baseMap: ArcGISBaseMap;
visibleLayers: ArcGISVisibleLayer[];
viewpoint: ArcGISViewPoint;
};
/**
* The basemap of the scene. Only the base and reference layers of the basemap are stored in a slide.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html
*/
type ArcGISBaseMap = {
id: string;
title: string;
baseMapLayers: ArcGISBaseMapLayer[];
};
/**
* The visible layers of the scene.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html#visibleLayers
*/
type ArcGISVisibleLayer = {
id: string;
sublayerIds: number[];
};
/**
* The basemap of the scene.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-Basemap.html
*/
type ArcGISBaseMapLayer = {
id: string;
title: string;
url: string;
layerType: string;
visibility: boolean;
};
/**
* The viewpoint of the slide. This acts like a bookmark, saving a predefined location or point of view from which to view the scene.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-Viewpoint.html
*/
type ArcGISViewPoint = {
scale: number;
rotation?: number;
/**
* Spec - https://developers.arcgis.com/web-scene-specification/objects/viewpoint/
*/
targetGeometry: any;
camera: ArcGISCamera;
};
/**
* The camera defines the position, tilt, and heading of the point from which the SceneView's visible extent is observed.
* It is not associated with device hardware. This class only applies to 3D SceneViews.
* Spec - https://developers.arcgis.com/javascript/latest/api-reference/esri-Camera.html
*/
export type ArcGISCamera = {
position: {
x: number;
y: number;
z: number;
};
spatialReference: {
wkid: number;
latestWkid: number;
};
heading: number;
tilt: number;
};
/**
* Operational layers contain your data. Usually, a basemap sits beneath your operational layers to give them geographic context.
* Spec- https://developers.arcgis.com/web-scene-specification/objects/operationalLayers/
*/
export type OperationalLayer = {
id: string;
opacity: number;
title: string;
url: string;
visibility: boolean;
itemId: string;
layerType: string;
LayerDefinition: LayerDefinition;
screenSizePerspective: boolean;
showLabels?: boolean;
disablePopup?: boolean;
showLegend?: boolean;
layers?: OperationalLayer[];
};
type LayerDefinition = {
elevationInfo: ElevationInfo;
drawingInfo: DrawingInfo;
};
type BaseMap = {
id: string;
title: string;
baseMapLayers: BaseMapLayer[];
elevationLayers: ElevationLayer[];
};
type BaseMapLayer = {
id: string;
opacity: number;
title: string;
url: string;
visibility: boolean;
layerType: string;
};
type ElevationLayer = {
id: string;
listMode: string;
title: string;
url: string;
visibility: boolean;
layerType: string;
};
type Ground = {
layers: ElevationLayer[];
transparency: number;
navigationConstraint: NavigationConstraint;
};
type NavigationConstraint = {
type: string;
};
type InitialState = {
environment: Enviroment;
viewpoint: ViewPoint;
};
type Enviroment = {
lighting: Lighting;
atmosphereEnabled?: string;
starsEnabled?: string;
};
type Lighting = {
datetime?: number;
displayUTCOffset?: number;
};
type ViewPoint = {
camera: Camera;
};
type Camera = {
position: CameraPosition;
heading: number;
tilt: number;
};
type CameraPosition = {
spatialReference: SpatialReference;
x: number;
y: number;
z: number;
};
/**
* Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/statsInfo.cmn.md
*/
export type StatsInfo = {
/** Represents the count of the value. */
totalValuesCount?: number;
/** Minimum attribute value for the entire layer. */
min?: number;
/** Maximum attribute value for the entire layer. */
max?: number;
/** Count for the entire layer. */
count?: number;
/** Sum of the attribute values over the entire layer. */
sum?: number;
/** Representing average or mean value. For example, sum/count. */
avg?: number;
/** Representing the standard deviation. */
stddev?: number;
/** Representing variance. For example, stats.stddev *stats.stddev. */
variance?: number;
/** Represents the histogram. */
histogram?: Histogram;
/** An array of most frequently used values within the point cloud scene layer. */
mostFrequentValues?: ValueCount[];
};
/** Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/histogram.cmn.md */
export type Histogram = {
/** Minimum attribute value for the entire layer. */
minimum: number;
/** Maximum attribute value for the entire layer. Maximum array size for stats.histo.counts is 256. */
maximum: number;
/** Count for the entire layer. */
counts: number[];
};
export type ValueCount = {
/** Type of the attribute values after decompression, if applicable. Please note that string is not supported for point cloud scene layer attributes. */
value: number | string;
/** Count of the number of values. May exceed 32 bits. */
count: number;
};
export {};
//# sourceMappingURL=types.d.ts.map