// Tile level x y index ----- tex missing() start/end (tarzoom) ----- time, priority size(byte) /** * @typedef {Object} TileProperties * @property {number} index - Unique identifier for the tile * @property {number[]} bbox - Bounding box coordinates [minX, minY, maxX, maxY] * @property {number} level - Zoom level in the pyramid (for tiled layouts) * @property {number} x - Horizontal grid position * @property {number} y - Vertical grid position * @property {number} w - Tile width (for image layouts) * @property {number} h - Tile height (for image layouts) * @property {number} start - Starting byte position in dataset (for tar-based formats) * @property {number} end - Ending byte position in dataset (for tar-based formats) * @property {WebGLTexture[]} tex - Array of WebGL textures (one per channel) * @property {number} missing - Count of pending channel data requests * @property {number} time - Creation timestamp for cache management * @property {number} priority - Loading priority for cache management * @property {number} size - Total size in bytes for cache management */ /** * * Represents a single tile in an image tiling system. * Tiles are fundamental units used to manage large images through regular grid subdivision. * Supports both traditional pyramid tiling and specialized formats like RTI/BRDF. * * Features: * - Multi-channel texture support * - Cache management properties * - Format-specific byte positioning * - Flexible layout compatibility * - Priority-based loading * * Usage Contexts: * 1. Tiled Layouts: * - Part of zoom level pyramid * - Grid-based positioning (x, y, level) * * 2. Image Layouts: * - Direct image subdivision * - Dimensional specification (w, h) * * 3. Specialized Formats: * - RTI (Reflectance Transformation Imaging) * - BRDF (Bidirectional Reflectance Distribution Function) * - TAR-based formats (tarzoom, itarzoom) * * * Implementation Details * * Property Categories: * * 1. Identification: * ```javascript * { * index: number, // Unique tile ID * bbox: number[], // Spatial bounds * } * ``` * * 2. Positioning: * ```javascript * { * // Tiled Layout Properties * level: number, // Zoom level * x: number, // Grid X * y: number, // Grid Y * * // Image Layout Properties * w: number, // Width * h: number, // Height * } * ``` * * 3. Data Access: * ```javascript * { * start: number, // Byte start * end: number, // Byte end * tex: WebGLTexture[], // Channel textures * missing: number, // Pending channels * } * ``` * * 4. Cache Management: * ```javascript * { * time: number, // Creation time * priority: number, // Load priority * size: number // Memory size * } * ``` * * Format-Specific Considerations: * * 1. Standard Tiling: * - Uses level, x, y for pyramid positioning * - Single texture per tile * * 2. RTI/BRDF: * - Multiple textures per tile (channels) * - Missing counter tracks channel loading * * 3. TAR Formats: * - Uses start/end for byte positioning * - Enables direct data access in archives * * Cache Management: * - time: Used for LRU (Least Recently Used) calculations * - priority: Influences loading order * - size: Helps manage memory constraints */ class Tile { /** * Creates a new Tile instance with default properties * * @example * ```javascript * // Create a basic tile * const tile = new Tile(); * tile.level = 2; * tile.x = 3; * tile.y = 4; * tile.priority = 1; * ``` * * @example * ```javascript * // Create a multi-channel tile * const tile = new Tile(); * tile.tex = new Array(3); // For RGB channels * tile.missing = 3; // Waiting for all channels * ``` */ constructor() { Object.assign(this, { index: null, bbox: null, level: null, //used only in LayoutTiles x: null, y: null, w: null, // used only in LayoutImages h: null, // used only in LayoutImages start: null, end: null, tex: [], missing: null, time: null, priority: null, size: null }); } }; export { Tile }