Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

lerc

Esri2mApache-2.04.0.4TypeScript support: included

Rapid decoding of Lerc compressed raster data for any standard pixel type.

Esri, LERC

readme

npm version

Lerc JS

Rapid decoding of Lerc compressed raster data for any standard pixel type, not just rgb or byte.

Breaking changes

  • Web Assembly support is now required.
  • Lerc.load() must be invoked and the returned promise must be resolved prior to Lerc.decode. This only needs to be done once per worker (or the main thread). There's no extra cost when invoked multiple times as the internal wasm loading promise is cached.

Get started

npm install lerc

// es module
import * as Lerc from 'lerc';

// commonJS
const Lerc = require('lerc');
// use umd via a script tag
<script type="text/javascript" src="https://unpkg.com/lerc@latest/LercDecode.min.js"></script>

Sample usage

await Lerc.load();

const arrayBuffer = await fetch('http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/0/0/0')
  .then(response => response.arrayBuffer());
const pixelBlock = Lerc.decode(arrayBuffer);
const { height, width, pixels, mask } = pixelBlock;
for (let i = 0; i < height; i++) {
  for (let j = 0; j < width; j++) {
    if (!mask || mask[i * width + j]) {
      // do something with valid pixel (i,j)
    }
  }
}

// use options
const pixelBlock = Lerc.decode(arrayBuffer, {
  inputOffset: 10, // start from the 10th byte (default is 0)
  returnInterleaved: true // only applicable to n-depth lerc blobs (default is false)
});

API Reference

Lerc

A module for decoding LERC blobs.

load([options]) ⇒ Promise<void>

Load the dependencies (web assembly). Check whether dependencies has been loaded using Lerc.isLoaded(). The loading promise is cached so it can be invoked multiple times if needed.

Kind: Exported function

Param Type Description
[options.locateFile] (wasmFileName?: string, scriptDir?: string) => string The function to locate lerc-wasm.wasm. Used when the web assembly file is moved to a different location.

decode(input, [options]) ⇒ Object

A function for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.

Kind: Exported function

Param Type Description
input ArrayBuffer The LERC input byte stream
[options] object The decoding options below are optional.
[options.inputOffset] number The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position.
[options.noDataValue] number It is recommended to use the returned mask instead of setting this value.
(Deprecated) [options.returnPixelInterleavedDims] boolean will be removed in next release, use returnInterleaved instead.
[options.returnInterleaved] boolean (ndepth LERC2 only) If true, returned depth values are pixel-interleaved.

Result Object Properties

Name Type Description
width number Width of decoded image.
height number Height of decoded image.
pixels array [band1, band2, …] Each band is a typed array of width * height * depthCount.
pixelType string The type of pixels represented in the output.
mask mask Typed array with a size of width*height, or null if all pixels are valid.
statistics array [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values
(Deprecated) dimCount number Will be removed in next release, use depthCount instead.
depthCount number Depth count
[bandMasks] array [band1_mask, band2_mask, …] Each band is a Uint8Array of width * height * depthCount.

Licensing

Copyright © 2017-2023 Esri

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

A local copy of the license and additional notices are located with the source distribution at:

http://github.com/Esri/lerc/

changelog

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

[4.0.4] - 2023-10-30

  • Removed unnecessary files in the npm package.

[4.0.3] - 2023-10-30

  • Fixed release package -- should include dist only.

[4.0.2] - 2023-10-27

  • Fixed a small memory leak when nDepth is more than 1 and when noData value is actually used in one or more bands.

[4.0.1] - 2022-07-19

  • Export typings.

[4.0.0] - 2022-07-15

Now uses web assembly, as a result:

  • The existing Javascript decoder js/LercDecode.js is deprecated. It will be removed in next major release.
  • Web Assembly support is now required. IE11 is therefore no longer supported.
  • Lerc.load() must be invoked and the returned promise must be resolved prior to Lerc.decode. This only needs to be done once per worker (or the main thread). There's no extra cost when invoked multiple times as the internal wasm loading promise is cached.
  • Updated build script npm run build. A dev build result (unminified UMD bundle) is included in the js/dist folder for convenience.
  • Both UMD and ES modules are included in dist, along with a typing file.
  • Deprecated decodeResult.dimCount, decodeOptions.returnPixelInterleavedDims, prefer to use depthCount, returnInterleaved which is in line with C API concept.

[3.0.0] - 2021-07-30

The decoder is in sync with ArcMap 10.8.1 and ArcGIS Pro 2.8. LERC encoded binary blobs from any previous version of ArcMap or ArcGIS Pro can also be read / decoded.

Added

  • Added an option to return decoded n-dim blob using pixel-interleaved layout

Changed

  • Upgrade Lerc codec to new version Lerc 2.5.

2.0.0 - 2018-11-06

The decoder is in sync with ArcMap 10.7 and ArcGIS Pro 2.3. LERC encoded binary blobs from any previous version of ArcMap or ArcGIS Pro can also be read / decoded.

Added

  • Extend from one value per pixel to nDim values per pixel.

Changed

  • Upgrade Lerc codec to new version Lerc 2.4.

1.0.1 - 2017-02-18

Fixed

  • resolved a Huffman code table parsing issue #31

1.0 - 2016-11-30

This LERC API JavaScript decoder is in sync with ArcMap 10.5 and ArcGIS Pro 1.4. LERC encoded binary blobs from any previous version of ArcMap or ArcGIS Pro can be read / decoded as well.

What will trigger a major version change

  • A change to this LERC API that is not backwards compatible and requires users to update / change their code in order to use an upgraded .dll or .so file.
  • A change to the LERC bitstream that is not backwards compatible and requires users to upgrade their LERC encoder and / or decoder.