@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
111 lines (107 loc) • 5.52 kB
TypeScript
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { BandValuesArray, RasterPixelType } from "../raster/types.js";
export interface PixelBlockProperties extends Partial<Pick<PixelBlock, "bandMasks" | "height" | "mask" | "maskIsAlpha" | "pixels" | "pixelType" | "statistics" | "validPixelCount" | "width">> {}
/**
* An object representing the pixel arrays in the view. It stores and decodes source data
* fetched from an image service associated with an [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/). This provides the
* user access to each pixel on the client via the [pixels](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#pixels) property.
* The PixelBlock object is designed to handle generic pixel arrays from any raster data source.
*
* @since 4.0
* @see [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/)
* @see [Sample - Access pixel values in an ImageryLayer](https://developers.arcgis.com/javascript/latest/sample-code/layers-imagery-pixelvalues/)
*/
export default class PixelBlock extends JSONSupport {
constructor(properties?: PixelBlockProperties);
/** Masks for each band. 0 means noData. */
accessor bandMasks: Uint8Array<ArrayBuffer>[] | null | undefined;
/** The height (or number of rows) of the PixelBlock in pixels. */
accessor height: number;
/** An array of nodata mask. All pixels are valid when mask is null. */
accessor mask: Uint8Array<ArrayBuffer> | null | undefined;
/**
* Indicates whether mask should be used as alpha values. If no (default), a pixel is valid when corresponding mask value is truthy
*
* @default false
*/
accessor maskIsAlpha: boolean;
/**
* A two dimensional array representing the pixels from the Image Service
* displayed on the client. The length of the first dimension is the same as
* the number of bands in the layer. The length of the second dimension is
* [height](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#height) * [width](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#width). The length of each band is the same. The
* pixels in each band are arranged row by row in this format:
* `[p_00, p_10, p_20, ... p_10, p_11, ...]` where `p_xy` is the pixel value
* at the column `x` and row `y`.
*
* @example
* let pixels = imgLyr.pixelData.pixelBlock.pixels;
* // Prints the number of bands in the layer
* console.log(pixels.length);
* // An array containing all the pixels in the first band
* let band1 = pixels[0];
*/
accessor pixels: BandValuesArray[];
/**
* The pixel type. Currently pixel block only supports pixels in "u8", "s8", "u16", "s16", "u32", "s32", "f32", "f64" types.
*
* @default "f32"
*/
accessor pixelType: RasterPixelType;
/**
* An array of objects containing numeric statistical properties. Each object
* has the following specification if defined.
*/
accessor statistics: PixelBlockBandStatistics[] | null | undefined;
/** Number of valid pixels */
accessor validPixelCount: number | null | undefined;
/** The width (or number of columns) of the PixelBlock in pixels. */
accessor width: number;
/**
* Adds another band to the PixelBlock.
*
* @param bandData - The data to add to the PixelBlock.
*/
addData(bandData: PixelBlockBandData): void;
/**
* Returns pixels and masks using a single array in bip format
* (e.g. [p_00_r, p_00_g, p_00_b, p_00_a, p_10_r, p_10_g, p_10_b, p_10_a, .....]).
* Use this method to get an unsigned 8 bit pixel array.
* The result can be used to create a webgl texture.
*
* @returns An unsigned 8-bit pixel array.
*/
getAsRGBA(): Uint8ClampedArray<ArrayBuffer>;
/**
* Similar to [getAsRGBA()](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#getAsRGBA), but returns floating point data.
* The result can be used to create a webgl texture (OES_texture_float).
*
* @returns A floating point array.
*/
getAsRGBAFloat(): Float32Array<ArrayBuffer>;
/**
* Returns the plane band count of the PixelBlock.
*
* @returns The plane band count.
*/
getPlaneCount(): number | null | undefined;
}
/** The data to add to the PixelBlock via the [addData()](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#addData) method. */
export interface PixelBlockBandData {
/** An array representing the pixel data to add. */
pixels: number[];
/** An object containing numeric statistical properties. */
statistics?: PixelBlockBandStatistics;
}
/**
* Pixel block band statistics. Returns the minimum and maximum pixel values for a band in a
* [PixelBlock](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/), as well as the no data value.
*/
export interface PixelBlockBandStatistics {
/** The minimum pixel value in the [pixels](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#pixels) array. */
readonly minValue: number;
/** The maximum pixel value in the [pixels](https://developers.arcgis.com/javascript/latest/references/core/layers/support/PixelBlock/#pixels) array. */
readonly maxValue: number;
/** Value representing areas of no data. */
readonly noDataValue?: number | null;
}