@loaders.gl/core 5.0.0-alpha.12 → 5.0.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/SCHEMA-README.md +9 -0
- package/SCHEMA-UTILS-README.md +11 -0
- package/dist/dist.dev.js +163 -142
- package/dist/dist.min.js +3 -3
- package/dist/index.cjs +87 -91
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/iterators/make-iterator/make-iterator.js +1 -1
- package/dist/iterators/make-iterator/make-iterator.js.map +1 -1
- package/dist/iterators/make-iterator/make-stream-iterator.js +1 -1
- package/dist/iterators/make-iterator/make-stream-iterator.js.map +1 -1
- package/dist/iterators/make-iterator/make-string-iterator.js +1 -1
- package/dist/iterators/make-iterator/make-string-iterator.js.map +1 -1
- package/dist/lib/api/core-api.d.ts +1 -1
- package/dist/lib/api/core-api.d.ts.map +1 -1
- package/dist/lib/api/create-data-source.d.ts +1 -1
- package/dist/lib/api/create-data-source.d.ts.map +1 -1
- package/dist/lib/api/create-data-source.js +1 -1
- package/dist/lib/api/create-data-source.js.map +1 -1
- package/dist/lib/api/encode-table.d.ts +2 -2
- package/dist/lib/api/encode-table.d.ts.map +1 -1
- package/dist/lib/api/encode-table.js +1 -1
- package/dist/lib/api/encode-table.js.map +1 -1
- package/dist/lib/api/encode.d.ts +1 -1
- package/dist/lib/api/encode.d.ts.map +1 -1
- package/dist/lib/api/encode.js +2 -2
- package/dist/lib/api/encode.js.map +1 -1
- package/dist/lib/api/load-in-batches.d.ts +1 -1
- package/dist/lib/api/load-in-batches.d.ts.map +1 -1
- package/dist/lib/api/load-in-batches.js +1 -1
- package/dist/lib/api/load-in-batches.js.map +1 -1
- package/dist/lib/api/load-loader.d.ts +1 -1
- package/dist/lib/api/load-loader.d.ts.map +1 -1
- package/dist/lib/api/load-loader.js +1 -1
- package/dist/lib/api/load-loader.js.map +1 -1
- package/dist/lib/api/load.d.ts +1 -1
- package/dist/lib/api/load.d.ts.map +1 -1
- package/dist/lib/api/load.js +1 -1
- package/dist/lib/api/load.js.map +1 -1
- package/dist/lib/api/parse-file.d.ts +1 -1
- package/dist/lib/api/parse-file.d.ts.map +1 -1
- package/dist/lib/api/parse-file.js +2 -2
- package/dist/lib/api/parse-file.js.map +1 -1
- package/dist/lib/api/parse-in-batches.d.ts +1 -1
- package/dist/lib/api/parse-in-batches.d.ts.map +1 -1
- package/dist/lib/api/parse-in-batches.js +40 -4
- package/dist/lib/api/parse-in-batches.js.map +1 -1
- package/dist/lib/api/parse-sync.d.ts +1 -1
- package/dist/lib/api/parse-sync.d.ts.map +1 -1
- package/dist/lib/api/parse-sync.js +1 -1
- package/dist/lib/api/parse-sync.js.map +1 -1
- package/dist/lib/api/parse.d.ts +1 -1
- package/dist/lib/api/parse.d.ts.map +1 -1
- package/dist/lib/api/parse.js +3 -3
- package/dist/lib/api/parse.js.map +1 -1
- package/dist/lib/api/preload.d.ts +1 -1
- package/dist/lib/api/preload.d.ts.map +1 -1
- package/dist/lib/api/preload.js.map +1 -1
- package/dist/lib/api/register-loaders.d.ts +1 -1
- package/dist/lib/api/register-loaders.d.ts.map +1 -1
- package/dist/lib/api/select-loader.d.ts +1 -1
- package/dist/lib/api/select-loader.d.ts.map +1 -1
- package/dist/lib/api/select-loader.js +1 -1
- package/dist/lib/api/select-loader.js.map +1 -1
- package/dist/lib/api/select-source.d.ts +1 -1
- package/dist/lib/api/select-source.d.ts.map +1 -1
- package/dist/lib/common.d.ts +1 -1
- package/dist/lib/common.d.ts.map +1 -1
- package/dist/lib/fetch/fetch-file.js +2 -2
- package/dist/lib/fetch/fetch-file.js.map +1 -1
- package/dist/lib/filesystems/browser-filesystem.d.ts +1 -1
- package/dist/lib/filesystems/browser-filesystem.d.ts.map +1 -1
- package/dist/lib/filesystems/browser-filesystem.js +1 -1
- package/dist/lib/filesystems/browser-filesystem.js.map +1 -1
- package/dist/lib/init.js +2 -2
- package/dist/lib/init.js.map +1 -1
- package/dist/lib/loader-utils/get-data.d.ts +1 -1
- package/dist/lib/loader-utils/get-data.d.ts.map +1 -1
- package/dist/lib/loader-utils/get-data.js +1 -1
- package/dist/lib/loader-utils/get-data.js.map +1 -1
- package/dist/lib/loader-utils/get-fetch-function.d.ts +1 -1
- package/dist/lib/loader-utils/get-fetch-function.d.ts.map +1 -1
- package/dist/lib/loader-utils/get-fetch-function.js +1 -1
- package/dist/lib/loader-utils/get-fetch-function.js.map +1 -1
- package/dist/lib/loader-utils/loader-context.d.ts +1 -1
- package/dist/lib/loader-utils/loader-context.d.ts.map +1 -1
- package/dist/lib/loader-utils/loader-context.js +1 -1
- package/dist/lib/loader-utils/loader-context.js.map +1 -1
- package/dist/lib/loader-utils/loggers.d.ts +1 -1
- package/dist/lib/loader-utils/loggers.d.ts.map +1 -1
- package/dist/lib/loader-utils/loggers.js +1 -1
- package/dist/lib/loader-utils/loggers.js.map +1 -1
- package/dist/lib/loader-utils/normalize-loader.d.ts +1 -1
- package/dist/lib/loader-utils/normalize-loader.d.ts.map +1 -1
- package/dist/lib/loader-utils/normalize-loader.js +1 -1
- package/dist/lib/loader-utils/normalize-loader.js.map +1 -1
- package/dist/lib/loader-utils/option-defaults.d.ts +1 -1
- package/dist/lib/loader-utils/option-defaults.d.ts.map +1 -1
- package/dist/lib/loader-utils/option-defaults.js +1 -1
- package/dist/lib/loader-utils/option-defaults.js.map +1 -1
- package/dist/lib/loader-utils/option-utils.d.ts +1 -1
- package/dist/lib/loader-utils/option-utils.d.ts.map +1 -1
- package/dist/lib/loader-utils/option-utils.js +1 -1
- package/dist/lib/loader-utils/option-utils.js.map +1 -1
- package/dist/lib/utils/resource-utils.js +1 -1
- package/dist/lib/utils/resource-utils.js.map +1 -1
- package/dist/lib/utils/response-utils.js +1 -1
- package/dist/lib/utils/response-utils.js.map +1 -1
- package/dist/loader-utils/format-types.d.ts +32 -0
- package/dist/loader-utils/format-types.d.ts.map +1 -0
- package/dist/loader-utils/format-types.js +5 -0
- package/dist/loader-utils/format-types.js.map +1 -0
- package/dist/loader-utils/index.cjs +12416 -0
- package/dist/loader-utils/index.cjs.map +6 -0
- package/dist/loader-utils/index.d.ts +122 -0
- package/dist/loader-utils/index.d.ts.map +1 -0
- package/dist/loader-utils/index.js +91 -0
- package/dist/loader-utils/index.js.map +1 -0
- package/dist/loader-utils/json-loader.d.ts +27 -0
- package/dist/loader-utils/json-loader.d.ts.map +1 -0
- package/dist/loader-utils/json-loader.js +32 -0
- package/dist/loader-utils/json-loader.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/array-buffer-utils.d.ts +32 -0
- package/dist/loader-utils/lib/binary-utils/array-buffer-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/array-buffer-utils.js +88 -0
- package/dist/loader-utils/lib/binary-utils/array-buffer-utils.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/binary-chunk-reader.d.ts +67 -0
- package/dist/loader-utils/lib/binary-utils/binary-chunk-reader.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/binary-chunk-reader.js +245 -0
- package/dist/loader-utils/lib/binary-utils/binary-chunk-reader.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/dataview-copy-utils.d.ts +43 -0
- package/dist/loader-utils/lib/binary-utils/dataview-copy-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/dataview-copy-utils.js +92 -0
- package/dist/loader-utils/lib/binary-utils/dataview-copy-utils.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/encode-array-buffer-to-base64.d.ts +3 -0
- package/dist/loader-utils/lib/binary-utils/encode-array-buffer-to-base64.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/encode-array-buffer-to-base64.js +15 -0
- package/dist/loader-utils/lib/binary-utils/encode-array-buffer-to-base64.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/get-first-characters.d.ts +17 -0
- package/dist/loader-utils/lib/binary-utils/get-first-characters.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/get-first-characters.js +43 -0
- package/dist/loader-utils/lib/binary-utils/get-first-characters.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/hex-transcoder.d.ts +15 -0
- package/dist/loader-utils/lib/binary-utils/hex-transcoder.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/hex-transcoder.js +51 -0
- package/dist/loader-utils/lib/binary-utils/hex-transcoder.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/memory-conversion-utils.d.ts +20 -0
- package/dist/loader-utils/lib/binary-utils/memory-conversion-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/memory-conversion-utils.js +82 -0
- package/dist/loader-utils/lib/binary-utils/memory-conversion-utils.js.map +1 -0
- package/dist/loader-utils/lib/binary-utils/memory-copy-utils.d.ts +25 -0
- package/dist/loader-utils/lib/binary-utils/memory-copy-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/binary-utils/memory-copy-utils.js +59 -0
- package/dist/loader-utils/lib/binary-utils/memory-copy-utils.js.map +1 -0
- package/dist/loader-utils/lib/crs/crs-reprojection.d.ts +31 -0
- package/dist/loader-utils/lib/crs/crs-reprojection.d.ts.map +1 -0
- package/dist/loader-utils/lib/crs/crs-reprojection.js +20 -0
- package/dist/loader-utils/lib/crs/crs-reprojection.js.map +1 -0
- package/dist/loader-utils/lib/env-utils/assert.d.ts +6 -0
- package/dist/loader-utils/lib/env-utils/assert.d.ts.map +1 -0
- package/dist/loader-utils/lib/env-utils/assert.js +13 -0
- package/dist/loader-utils/lib/env-utils/assert.js.map +1 -0
- package/dist/loader-utils/lib/env-utils/globals.d.ts +15 -0
- package/dist/loader-utils/lib/env-utils/globals.d.ts.map +1 -0
- package/dist/loader-utils/lib/env-utils/globals.js +28 -0
- package/dist/loader-utils/lib/env-utils/globals.js.map +1 -0
- package/dist/loader-utils/lib/file-provider/data-view-file.d.ts +40 -0
- package/dist/loader-utils/lib/file-provider/data-view-file.d.ts.map +1 -0
- package/dist/loader-utils/lib/file-provider/data-view-file.js +68 -0
- package/dist/loader-utils/lib/file-provider/data-view-file.js.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-handle-file.d.ts +54 -0
- package/dist/loader-utils/lib/file-provider/file-handle-file.d.ts.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-handle-file.js +102 -0
- package/dist/loader-utils/lib/file-provider/file-handle-file.js.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-provider-interface.d.ts +45 -0
- package/dist/loader-utils/lib/file-provider/file-provider-interface.d.ts.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-provider-interface.js +13 -0
- package/dist/loader-utils/lib/file-provider/file-provider-interface.js.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-provider.d.ts +57 -0
- package/dist/loader-utils/lib/file-provider/file-provider.d.ts.map +1 -0
- package/dist/loader-utils/lib/file-provider/file-provider.js +114 -0
- package/dist/loader-utils/lib/file-provider/file-provider.js.map +1 -0
- package/dist/loader-utils/lib/files/array-buffer-file.d.ts +21 -0
- package/dist/loader-utils/lib/files/array-buffer-file.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/array-buffer-file.js +36 -0
- package/dist/loader-utils/lib/files/array-buffer-file.js.map +1 -0
- package/dist/loader-utils/lib/files/blob-file.d.ts +19 -0
- package/dist/loader-utils/lib/files/blob-file.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/blob-file.js +39 -0
- package/dist/loader-utils/lib/files/blob-file.js.map +1 -0
- package/dist/loader-utils/lib/files/file.d.ts +33 -0
- package/dist/loader-utils/lib/files/file.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/file.js +5 -0
- package/dist/loader-utils/lib/files/file.js.map +1 -0
- package/dist/loader-utils/lib/files/http-file-transport.d.ts +37 -0
- package/dist/loader-utils/lib/files/http-file-transport.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/http-file-transport.js +290 -0
- package/dist/loader-utils/lib/files/http-file-transport.js.map +1 -0
- package/dist/loader-utils/lib/files/http-file-types.d.ts +49 -0
- package/dist/loader-utils/lib/files/http-file-types.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/http-file-types.js +5 -0
- package/dist/loader-utils/lib/files/http-file-types.js.map +1 -0
- package/dist/loader-utils/lib/files/http-file.d.ts +55 -0
- package/dist/loader-utils/lib/files/http-file.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/http-file.js +213 -0
- package/dist/loader-utils/lib/files/http-file.js.map +1 -0
- package/dist/loader-utils/lib/files/node-file-facade.d.ts +22 -0
- package/dist/loader-utils/lib/files/node-file-facade.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/node-file-facade.js +45 -0
- package/dist/loader-utils/lib/files/node-file-facade.js.map +1 -0
- package/dist/loader-utils/lib/files/sources.d.ts +1 -0
- package/dist/loader-utils/lib/files/sources.d.ts.map +1 -0
- package/dist/loader-utils/lib/files/sources.js +155 -0
- package/dist/loader-utils/lib/files/sources.js.map +1 -0
- package/dist/loader-utils/lib/filesystems/filesystem.d.ts +33 -0
- package/dist/loader-utils/lib/filesystems/filesystem.d.ts.map +1 -0
- package/dist/loader-utils/lib/filesystems/filesystem.js +5 -0
- package/dist/loader-utils/lib/filesystems/filesystem.js.map +1 -0
- package/dist/loader-utils/lib/filesystems/node-filesystem-facade.d.ts +23 -0
- package/dist/loader-utils/lib/filesystems/node-filesystem-facade.d.ts.map +1 -0
- package/dist/loader-utils/lib/filesystems/node-filesystem-facade.js +48 -0
- package/dist/loader-utils/lib/filesystems/node-filesystem-facade.js.map +1 -0
- package/dist/loader-utils/lib/iterators/async-iteration.d.ts +20 -0
- package/dist/loader-utils/lib/iterators/async-iteration.d.ts.map +1 -0
- package/dist/loader-utils/lib/iterators/async-iteration.js +102 -0
- package/dist/loader-utils/lib/iterators/async-iteration.js.map +1 -0
- package/dist/loader-utils/lib/iterators/text-iterators.d.ts +19 -0
- package/dist/loader-utils/lib/iterators/text-iterators.d.ts.map +1 -0
- package/dist/loader-utils/lib/iterators/text-iterators.js +60 -0
- package/dist/loader-utils/lib/iterators/text-iterators.js.map +1 -0
- package/dist/loader-utils/lib/javascript-utils/is-type.d.ts +59 -0
- package/dist/loader-utils/lib/javascript-utils/is-type.d.ts.map +1 -0
- package/dist/loader-utils/lib/javascript-utils/is-type.js +68 -0
- package/dist/loader-utils/lib/javascript-utils/is-type.js.map +1 -0
- package/dist/loader-utils/lib/laz/laz-arithmetic-encoder.d.ts +118 -0
- package/dist/loader-utils/lib/laz/laz-arithmetic-encoder.d.ts.map +1 -0
- package/dist/loader-utils/lib/laz/laz-arithmetic-encoder.js +427 -0
- package/dist/loader-utils/lib/laz/laz-arithmetic-encoder.js.map +1 -0
- package/dist/loader-utils/lib/laz/laz-chunk-decoder.d.ts +204 -0
- package/dist/loader-utils/lib/laz/laz-chunk-decoder.d.ts.map +1 -0
- package/dist/loader-utils/lib/laz/laz-chunk-decoder.js +4226 -0
- package/dist/loader-utils/lib/laz/laz-chunk-decoder.js.map +1 -0
- package/dist/loader-utils/lib/laz/laz-chunk-encoder.d.ts +40 -0
- package/dist/loader-utils/lib/laz/laz-chunk-encoder.d.ts.map +1 -0
- package/dist/loader-utils/lib/laz/laz-chunk-encoder.js +1518 -0
- package/dist/loader-utils/lib/laz/laz-chunk-encoder.js.map +1 -0
- package/dist/loader-utils/lib/log-utils/log.d.ts +4 -0
- package/dist/loader-utils/lib/log-utils/log.d.ts.map +1 -0
- package/dist/loader-utils/lib/log-utils/log.js +21 -0
- package/dist/loader-utils/lib/log-utils/log.js.map +1 -0
- package/dist/loader-utils/lib/module-utils/initialize-wasm-module.d.ts +10 -0
- package/dist/loader-utils/lib/module-utils/initialize-wasm-module.d.ts.map +1 -0
- package/dist/loader-utils/lib/module-utils/initialize-wasm-module.js +44 -0
- package/dist/loader-utils/lib/module-utils/initialize-wasm-module.js.map +1 -0
- package/dist/loader-utils/lib/module-utils/js-module-utils.d.ts +18 -0
- package/dist/loader-utils/lib/module-utils/js-module-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/module-utils/js-module-utils.js +40 -0
- package/dist/loader-utils/lib/module-utils/js-module-utils.js.map +1 -0
- package/dist/loader-utils/lib/node/buffer.browser.d.ts +11 -0
- package/dist/loader-utils/lib/node/buffer.browser.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/buffer.browser.js +20 -0
- package/dist/loader-utils/lib/node/buffer.browser.js.map +1 -0
- package/dist/loader-utils/lib/node/buffer.d.ts +11 -0
- package/dist/loader-utils/lib/node/buffer.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/buffer.js +35 -0
- package/dist/loader-utils/lib/node/buffer.js.map +1 -0
- package/dist/loader-utils/lib/node/fs.browser.d.ts +2 -0
- package/dist/loader-utils/lib/node/fs.browser.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/fs.browser.js +5 -0
- package/dist/loader-utils/lib/node/fs.browser.js.map +1 -0
- package/dist/loader-utils/lib/node/promisify.d.ts +13 -0
- package/dist/loader-utils/lib/node/promisify.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/promisify.js +19 -0
- package/dist/loader-utils/lib/node/promisify.js.map +1 -0
- package/dist/loader-utils/lib/node/stream.browser.d.ts +2 -0
- package/dist/loader-utils/lib/node/stream.browser.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/stream.browser.js +5 -0
- package/dist/loader-utils/lib/node/stream.browser.js.map +1 -0
- package/dist/loader-utils/lib/node/stream.d.ts +6 -0
- package/dist/loader-utils/lib/node/stream.d.ts.map +1 -0
- package/dist/loader-utils/lib/node/stream.js +8 -0
- package/dist/loader-utils/lib/node/stream.js.map +1 -0
- package/dist/loader-utils/lib/option-utils/merge-options.d.ts +12 -0
- package/dist/loader-utils/lib/option-utils/merge-options.d.ts.map +1 -0
- package/dist/loader-utils/lib/option-utils/merge-options.js +34 -0
- package/dist/loader-utils/lib/option-utils/merge-options.js.map +1 -0
- package/dist/loader-utils/lib/parser-utils/parse-json.d.ts +5 -0
- package/dist/loader-utils/lib/parser-utils/parse-json.d.ts.map +1 -0
- package/dist/loader-utils/lib/parser-utils/parse-json.js +16 -0
- package/dist/loader-utils/lib/parser-utils/parse-json.js.map +1 -0
- package/dist/loader-utils/lib/path-utils/cached-uri-resolver.d.ts +35 -0
- package/dist/loader-utils/lib/path-utils/cached-uri-resolver.d.ts.map +1 -0
- package/dist/loader-utils/lib/path-utils/cached-uri-resolver.js +64 -0
- package/dist/loader-utils/lib/path-utils/cached-uri-resolver.js.map +1 -0
- package/dist/loader-utils/lib/path-utils/file-aliases.d.ts +17 -0
- package/dist/loader-utils/lib/path-utils/file-aliases.d.ts.map +1 -0
- package/dist/loader-utils/lib/path-utils/file-aliases.js +44 -0
- package/dist/loader-utils/lib/path-utils/file-aliases.js.map +1 -0
- package/dist/loader-utils/lib/path-utils/get-cwd.d.ts +3 -0
- package/dist/loader-utils/lib/path-utils/get-cwd.d.ts.map +1 -0
- package/dist/loader-utils/lib/path-utils/get-cwd.js +12 -0
- package/dist/loader-utils/lib/path-utils/get-cwd.js.map +1 -0
- package/dist/loader-utils/lib/path-utils/path.d.ts +24 -0
- package/dist/loader-utils/lib/path-utils/path.d.ts.map +1 -0
- package/dist/loader-utils/lib/path-utils/path.js +173 -0
- package/dist/loader-utils/lib/path-utils/path.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/abort-utils.d.ts +5 -0
- package/dist/loader-utils/lib/request-utils/abort-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/abort-utils.js +59 -0
- package/dist/loader-utils/lib/request-utils/abort-utils.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/authentication.d.ts +56 -0
- package/dist/loader-utils/lib/request-utils/authentication.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/authentication.js +67 -0
- package/dist/loader-utils/lib/request-utils/authentication.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/parse-content-type.d.ts +7 -0
- package/dist/loader-utils/lib/request-utils/parse-content-type.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/parse-content-type.js +20 -0
- package/dist/loader-utils/lib/request-utils/parse-content-type.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/range-request-cache.d.ts +70 -0
- package/dist/loader-utils/lib/request-utils/range-request-cache.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/range-request-cache.js +203 -0
- package/dist/loader-utils/lib/request-utils/range-request-cache.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/range-request-scheduler.d.ts +201 -0
- package/dist/loader-utils/lib/request-utils/range-request-scheduler.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/range-request-scheduler.js +636 -0
- package/dist/loader-utils/lib/request-utils/range-request-scheduler.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-cache.d.ts +62 -0
- package/dist/loader-utils/lib/request-utils/request-cache.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-cache.js +236 -0
- package/dist/loader-utils/lib/request-utils/request-cache.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-credentials.d.ts +137 -0
- package/dist/loader-utils/lib/request-utils/request-credentials.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-credentials.js +379 -0
- package/dist/loader-utils/lib/request-utils/request-credentials.js.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-scheduler.d.ts +71 -0
- package/dist/loader-utils/lib/request-utils/request-scheduler.d.ts.map +1 -0
- package/dist/loader-utils/lib/request-utils/request-scheduler.js +174 -0
- package/dist/loader-utils/lib/request-utils/request-scheduler.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/columnar-predicate.d.ts +56 -0
- package/dist/loader-utils/lib/scan-utils/columnar-predicate.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/columnar-predicate.js +261 -0
- package/dist/loader-utils/lib/scan-utils/columnar-predicate.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/experimental-scan-options.d.ts +42 -0
- package/dist/loader-utils/lib/scan-utils/experimental-scan-options.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/experimental-scan-options.js +5 -0
- package/dist/loader-utils/lib/scan-utils/experimental-scan-options.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/point-cloud-query.d.ts +56 -0
- package/dist/loader-utils/lib/scan-utils/point-cloud-query.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/point-cloud-query.js +86 -0
- package/dist/loader-utils/lib/scan-utils/point-cloud-query.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/raster-query.d.ts +36 -0
- package/dist/loader-utils/lib/scan-utils/raster-query.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/raster-query.js +49 -0
- package/dist/loader-utils/lib/scan-utils/raster-query.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/relational-query.d.ts +75 -0
- package/dist/loader-utils/lib/scan-utils/relational-query.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/relational-query.js +107 -0
- package/dist/loader-utils/lib/scan-utils/relational-query.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-executor.d.ts +20 -0
- package/dist/loader-utils/lib/scan-utils/scan-executor.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-executor.js +183 -0
- package/dist/loader-utils/lib/scan-utils/scan-executor.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-fragments.d.ts +23 -0
- package/dist/loader-utils/lib/scan-utils/scan-fragments.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-fragments.js +5 -0
- package/dist/loader-utils/lib/scan-utils/scan-fragments.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-query-metadata.d.ts +272 -0
- package/dist/loader-utils/lib/scan-utils/scan-query-metadata.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/scan-query-metadata.js +97 -0
- package/dist/loader-utils/lib/scan-utils/scan-query-metadata.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-query-explain.d.ts +39 -0
- package/dist/loader-utils/lib/scan-utils/table-query-explain.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-query-explain.js +35 -0
- package/dist/loader-utils/lib/scan-utils/table-query-explain.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-query.d.ts +77 -0
- package/dist/loader-utils/lib/scan-utils/table-query.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-query.js +56 -0
- package/dist/loader-utils/lib/scan-utils/table-query.js.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-scan-batch.d.ts +30 -0
- package/dist/loader-utils/lib/scan-utils/table-scan-batch.d.ts.map +1 -0
- package/dist/loader-utils/lib/scan-utils/table-scan-batch.js +161 -0
- package/dist/loader-utils/lib/scan-utils/table-scan-batch.js.map +1 -0
- package/dist/loader-utils/lib/sources/catalog-source.d.ts +36 -0
- package/dist/loader-utils/lib/sources/catalog-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/catalog-source.js +5 -0
- package/dist/loader-utils/lib/sources/catalog-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/data-source-manager.d.ts +136 -0
- package/dist/loader-utils/lib/sources/data-source-manager.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/data-source-manager.js +376 -0
- package/dist/loader-utils/lib/sources/data-source-manager.js.map +1 -0
- package/dist/loader-utils/lib/sources/data-source.d.ts +79 -0
- package/dist/loader-utils/lib/sources/data-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/data-source.js +145 -0
- package/dist/loader-utils/lib/sources/data-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/image-source.d.ts +55 -0
- package/dist/loader-utils/lib/sources/image-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/image-source.js +5 -0
- package/dist/loader-utils/lib/sources/image-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/image-tile-source.d.ts +12 -0
- package/dist/loader-utils/lib/sources/image-tile-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/image-tile-source.js +5 -0
- package/dist/loader-utils/lib/sources/image-tile-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/raster-coverage.d.ts +17 -0
- package/dist/loader-utils/lib/sources/raster-coverage.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/raster-coverage.js +62 -0
- package/dist/loader-utils/lib/sources/raster-coverage.js.map +1 -0
- package/dist/loader-utils/lib/sources/raster-region.d.ts +4 -0
- package/dist/loader-utils/lib/sources/raster-region.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/raster-region.js +22 -0
- package/dist/loader-utils/lib/sources/raster-region.js.map +1 -0
- package/dist/loader-utils/lib/sources/raster-sampling.d.ts +35 -0
- package/dist/loader-utils/lib/sources/raster-sampling.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/raster-sampling.js +152 -0
- package/dist/loader-utils/lib/sources/raster-sampling.js.map +1 -0
- package/dist/loader-utils/lib/sources/raster-source.d.ts +302 -0
- package/dist/loader-utils/lib/sources/raster-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/raster-source.js +20 -0
- package/dist/loader-utils/lib/sources/raster-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/service-capabilities.d.ts +36 -0
- package/dist/loader-utils/lib/sources/service-capabilities.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/service-capabilities.js +5 -0
- package/dist/loader-utils/lib/sources/service-capabilities.js.map +1 -0
- package/dist/loader-utils/lib/sources/tile-grid.d.ts +46 -0
- package/dist/loader-utils/lib/sources/tile-grid.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/tile-grid.js +128 -0
- package/dist/loader-utils/lib/sources/tile-grid.js.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source-adapter.d.ts +24 -0
- package/dist/loader-utils/lib/sources/tile-source-adapter.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source-adapter.js +109 -0
- package/dist/loader-utils/lib/sources/tile-source-adapter.js.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source-utils.d.ts +6 -0
- package/dist/loader-utils/lib/sources/tile-source-utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source-utils.js +13 -0
- package/dist/loader-utils/lib/sources/tile-source-utils.js.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source.d.ts +190 -0
- package/dist/loader-utils/lib/sources/tile-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/tile-source.js +5 -0
- package/dist/loader-utils/lib/sources/tile-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/utils/image-type.d.ts +10 -0
- package/dist/loader-utils/lib/sources/utils/image-type.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/utils/image-type.js +5 -0
- package/dist/loader-utils/lib/sources/utils/image-type.js.map +1 -0
- package/dist/loader-utils/lib/sources/utils/utils.d.ts +13 -0
- package/dist/loader-utils/lib/sources/utils/utils.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/utils/utils.js +26 -0
- package/dist/loader-utils/lib/sources/utils/utils.js.map +1 -0
- package/dist/loader-utils/lib/sources/vector-source.d.ts +76 -0
- package/dist/loader-utils/lib/sources/vector-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/vector-source.js +5 -0
- package/dist/loader-utils/lib/sources/vector-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/vector-tile-source.d.ts +15 -0
- package/dist/loader-utils/lib/sources/vector-tile-source.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/vector-tile-source.js +5 -0
- package/dist/loader-utils/lib/sources/vector-tile-source.js.map +1 -0
- package/dist/loader-utils/lib/sources/xyz-grid.d.ts +9 -0
- package/dist/loader-utils/lib/sources/xyz-grid.d.ts.map +1 -0
- package/dist/loader-utils/lib/sources/xyz-grid.js +63 -0
- package/dist/loader-utils/lib/sources/xyz-grid.js.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/create-loader-worker.d.ts +22 -0
- package/dist/loader-utils/lib/worker-loader-utils/create-loader-worker.d.ts.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/create-loader-worker.js +155 -0
- package/dist/loader-utils/lib/worker-loader-utils/create-loader-worker.js.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/encode-with-worker.d.ts +8 -0
- package/dist/loader-utils/lib/worker-loader-utils/encode-with-worker.d.ts.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/encode-with-worker.js +23 -0
- package/dist/loader-utils/lib/worker-loader-utils/encode-with-worker.js.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/parse-with-worker.d.ts +41 -0
- package/dist/loader-utils/lib/worker-loader-utils/parse-with-worker.d.ts.map +1 -0
- package/dist/loader-utils/lib/worker-loader-utils/parse-with-worker.js +239 -0
- package/dist/loader-utils/lib/worker-loader-utils/parse-with-worker.js.map +1 -0
- package/dist/loader-utils/loader-types.d.ts +322 -0
- package/dist/loader-utils/loader-types.d.ts.map +1 -0
- package/dist/loader-utils/loader-types.js +33 -0
- package/dist/loader-utils/loader-types.js.map +1 -0
- package/dist/loader-utils/source-types.d.ts +42 -0
- package/dist/loader-utils/source-types.d.ts.map +1 -0
- package/dist/loader-utils/source-types.js +8 -0
- package/dist/loader-utils/source-types.js.map +1 -0
- package/dist/loader-utils/types.d.ts +24 -0
- package/dist/loader-utils/types.d.ts.map +1 -0
- package/dist/loader-utils/types.js +6 -0
- package/dist/loader-utils/types.js.map +1 -0
- package/dist/loader-utils/workers/json-worker.d.ts +2 -0
- package/dist/loader-utils/workers/json-worker.d.ts.map +1 -0
- package/dist/loader-utils/workers/json-worker.js +7 -0
- package/dist/loader-utils/workers/json-worker.js.map +1 -0
- package/dist/loader-utils/writer-types.d.ts +74 -0
- package/dist/loader-utils/writer-types.d.ts.map +1 -0
- package/dist/loader-utils/writer-types.js +5 -0
- package/dist/loader-utils/writer-types.js.map +1 -0
- package/dist/null-loader.d.ts +2 -2
- package/dist/null-loader.d.ts.map +1 -1
- package/dist/null-loader.js +1 -1
- package/dist/null-worker-node.js +7 -7
- package/dist/null-worker.js +7 -7
- package/dist/polyfills/buffer/btoa.node.d.ts +3 -0
- package/dist/polyfills/buffer/btoa.node.d.ts.map +1 -0
- package/dist/polyfills/buffer/btoa.node.js +13 -0
- package/dist/polyfills/buffer/btoa.node.js.map +1 -0
- package/dist/polyfills/buffer/to-array-buffer.node.d.ts +2 -0
- package/dist/polyfills/buffer/to-array-buffer.node.d.ts.map +1 -0
- package/dist/polyfills/buffer/to-array-buffer.node.js +12 -0
- package/dist/polyfills/buffer/to-array-buffer.node.js.map +1 -0
- package/dist/polyfills/crypto/node-hash.d.ts +29 -0
- package/dist/polyfills/crypto/node-hash.d.ts.map +1 -0
- package/dist/polyfills/crypto/node-hash.js +63 -0
- package/dist/polyfills/crypto/node-hash.js.map +1 -0
- package/dist/polyfills/fetch/decode-data-uri.d.ts +11 -0
- package/dist/polyfills/fetch/decode-data-uri.d.ts.map +1 -0
- package/dist/polyfills/fetch/decode-data-uri.js +63 -0
- package/dist/polyfills/fetch/decode-data-uri.js.map +1 -0
- package/dist/polyfills/fetch/fetch-polyfill.d.ts +11 -0
- package/dist/polyfills/fetch/fetch-polyfill.d.ts.map +1 -0
- package/dist/polyfills/fetch/fetch-polyfill.js +141 -0
- package/dist/polyfills/fetch/fetch-polyfill.js.map +1 -0
- package/dist/polyfills/fetch/headers-polyfill.d.ts +34 -0
- package/dist/polyfills/fetch/headers-polyfill.d.ts.map +1 -0
- package/dist/polyfills/fetch/headers-polyfill.js +105 -0
- package/dist/polyfills/fetch/headers-polyfill.js.map +1 -0
- package/dist/polyfills/fetch/response-polyfill.d.ts +22 -0
- package/dist/polyfills/fetch/response-polyfill.d.ts.map +1 -0
- package/dist/polyfills/fetch/response-polyfill.js +81 -0
- package/dist/polyfills/fetch/response-polyfill.js.map +1 -0
- package/dist/polyfills/fetch/utils/decode-data-uri.node.d.ts +11 -0
- package/dist/polyfills/fetch/utils/decode-data-uri.node.d.ts.map +1 -0
- package/dist/polyfills/fetch/utils/decode-data-uri.node.js +32 -0
- package/dist/polyfills/fetch/utils/decode-data-uri.node.js.map +1 -0
- package/dist/polyfills/file/blob-stream-controller.d.ts +29 -0
- package/dist/polyfills/file/blob-stream-controller.d.ts.map +1 -0
- package/dist/polyfills/file/blob-stream-controller.js +64 -0
- package/dist/polyfills/file/blob-stream-controller.js.map +1 -0
- package/dist/polyfills/file/blob-stream.d.ts +25 -0
- package/dist/polyfills/file/blob-stream.d.ts.map +1 -0
- package/dist/polyfills/file/blob-stream.js +38 -0
- package/dist/polyfills/file/blob-stream.js.map +1 -0
- package/dist/polyfills/file/blob.d.ts +58 -0
- package/dist/polyfills/file/blob.d.ts.map +1 -0
- package/dist/polyfills/file/blob.js +166 -0
- package/dist/polyfills/file/blob.js.map +1 -0
- package/dist/polyfills/file/file-reader.d.ts +24 -0
- package/dist/polyfills/file/file-reader.d.ts.map +1 -0
- package/dist/polyfills/file/file-reader.js +51 -0
- package/dist/polyfills/file/file-reader.js.map +1 -0
- package/dist/polyfills/file/file.d.ts +24 -0
- package/dist/polyfills/file/file.d.ts.map +1 -0
- package/dist/polyfills/file/file.js +41 -0
- package/dist/polyfills/file/file.js.map +1 -0
- package/dist/polyfills/file/install-blob-polyfills.d.ts +9 -0
- package/dist/polyfills/file/install-blob-polyfills.d.ts.map +1 -0
- package/dist/polyfills/file/install-blob-polyfills.js +14 -0
- package/dist/polyfills/file/install-blob-polyfills.js.map +1 -0
- package/dist/polyfills/file/install-file-polyfills.d.ts +3 -0
- package/dist/polyfills/file/install-file-polyfills.d.ts.map +1 -0
- package/dist/polyfills/file/install-file-polyfills.js +20 -0
- package/dist/polyfills/file/install-file-polyfills.js.map +1 -0
- package/dist/polyfills/file/readable-stream.d.ts +5 -0
- package/dist/polyfills/file/readable-stream.d.ts.map +1 -0
- package/dist/polyfills/file/readable-stream.js +8 -0
- package/dist/polyfills/file/readable-stream.js.map +1 -0
- package/dist/polyfills/filesystems/fetch-node.d.ts +8 -0
- package/dist/polyfills/filesystems/fetch-node.d.ts.map +1 -0
- package/dist/polyfills/filesystems/fetch-node.js +88 -0
- package/dist/polyfills/filesystems/fetch-node.js.map +1 -0
- package/dist/polyfills/filesystems/node-file.d.ts +15 -0
- package/dist/polyfills/filesystems/node-file.d.ts.map +1 -0
- package/dist/polyfills/filesystems/node-file.js +138 -0
- package/dist/polyfills/filesystems/node-file.js.map +1 -0
- package/dist/polyfills/filesystems/node-filesystem.d.ts +19 -0
- package/dist/polyfills/filesystems/node-filesystem.d.ts.map +1 -0
- package/dist/polyfills/filesystems/node-filesystem.js +44 -0
- package/dist/polyfills/filesystems/node-filesystem.js.map +1 -0
- package/dist/polyfills/filesystems/stream-utils.node.d.ts +18 -0
- package/dist/polyfills/filesystems/stream-utils.node.d.ts.map +1 -0
- package/dist/polyfills/filesystems/stream-utils.node.js +67 -0
- package/dist/polyfills/filesystems/stream-utils.node.js.map +1 -0
- package/dist/polyfills/images/encode-image-node.d.ts +20 -0
- package/dist/polyfills/images/encode-image-node.d.ts.map +1 -0
- package/dist/polyfills/images/encode-image-node.js +37 -0
- package/dist/polyfills/images/encode-image-node.js.map +1 -0
- package/dist/polyfills/images/image-codecs-node.d.ts +8 -0
- package/dist/polyfills/images/image-codecs-node.d.ts.map +1 -0
- package/dist/polyfills/images/image-codecs-node.js +27 -0
- package/dist/polyfills/images/image-codecs-node.js.map +1 -0
- package/dist/polyfills/images/node-image-bitmap.d.ts +38 -0
- package/dist/polyfills/images/node-image-bitmap.d.ts.map +1 -0
- package/dist/polyfills/images/node-image-bitmap.js +64 -0
- package/dist/polyfills/images/node-image-bitmap.js.map +1 -0
- package/dist/polyfills/images/node-image-formats.d.ts +3 -0
- package/dist/polyfills/images/node-image-formats.d.ts.map +1 -0
- package/dist/polyfills/images/node-image-formats.js +6 -0
- package/dist/polyfills/images/node-image-formats.js.map +1 -0
- package/dist/polyfills/images/parse-image-node.d.ts +11 -0
- package/dist/polyfills/images/parse-image-node.d.ts.map +1 -0
- package/dist/polyfills/images/parse-image-node.js +36 -0
- package/dist/polyfills/images/parse-image-node.js.map +1 -0
- package/dist/polyfills/index.browser.d.ts +8 -0
- package/dist/polyfills/index.browser.d.ts.map +1 -0
- package/dist/polyfills/index.browser.js +18 -0
- package/dist/polyfills/index.browser.js.map +1 -0
- package/dist/polyfills/index.cjs +2918 -0
- package/dist/polyfills/index.cjs.map +6 -0
- package/dist/polyfills/index.d.ts +7 -0
- package/dist/polyfills/index.d.ts.map +1 -0
- package/dist/polyfills/index.js +110 -0
- package/dist/polyfills/index.js.map +1 -0
- package/dist/polyfills/libs/encoding-indexes-asian.d.ts +10 -0
- package/dist/polyfills/libs/encoding-indexes-asian.d.ts.map +1 -0
- package/dist/polyfills/libs/encoding-indexes-asian.js +14 -0
- package/dist/polyfills/libs/encoding-indexes-asian.js.map +1 -0
- package/dist/polyfills/load-library/require-utils.node.d.ts +19 -0
- package/dist/polyfills/load-library/require-utils.node.d.ts.map +1 -0
- package/dist/polyfills/load-library/require-utils.node.js +88 -0
- package/dist/polyfills/load-library/require-utils.node.js.map +1 -0
- package/dist/polyfills/streams/make-node-stream.d.ts +10 -0
- package/dist/polyfills/streams/make-node-stream.d.ts.map +1 -0
- package/dist/polyfills/streams/make-node-stream.js +70 -0
- package/dist/polyfills/streams/make-node-stream.js.map +1 -0
- package/dist/polyfills/text-encoder/encoding-indexes.d.ts +31 -0
- package/dist/polyfills/text-encoder/encoding-indexes.d.ts.map +1 -0
- package/dist/polyfills/text-encoder/encoding-indexes.js +35 -0
- package/dist/polyfills/text-encoder/encoding-indexes.js.map +1 -0
- package/dist/polyfills/text-encoder/text-encoder.d.ts +15 -0
- package/dist/polyfills/text-encoder/text-encoder.d.ts.map +1 -0
- package/dist/polyfills/text-encoder/text-encoder.js +2778 -0
- package/dist/polyfills/text-encoder/text-encoder.js.map +1 -0
- package/dist/polyfills/utils/assert.d.ts +2 -0
- package/dist/polyfills/utils/assert.d.ts.map +1 -0
- package/dist/polyfills/utils/assert.js +9 -0
- package/dist/polyfills/utils/assert.js.map +1 -0
- package/dist/polyfills/utils/buffer-utils.d.ts +5 -0
- package/dist/polyfills/utils/buffer-utils.d.ts.map +1 -0
- package/dist/polyfills/utils/buffer-utils.js +34 -0
- package/dist/polyfills/utils/buffer-utils.js.map +1 -0
- package/dist/polyfills/utils/filesystem-types.d.ts +10 -0
- package/dist/polyfills/utils/filesystem-types.d.ts.map +1 -0
- package/dist/polyfills/utils/filesystem-types.js +5 -0
- package/dist/polyfills/utils/filesystem-types.js.map +1 -0
- package/dist/polyfills/utils/is-browser.d.ts +2 -0
- package/dist/polyfills/utils/is-browser.d.ts.map +1 -0
- package/dist/polyfills/utils/is-browser.js +8 -0
- package/dist/polyfills/utils/is-browser.js.map +1 -0
- package/dist/polyfills/utils/path-utils.d.ts +7 -0
- package/dist/polyfills/utils/path-utils.d.ts.map +1 -0
- package/dist/polyfills/utils/path-utils.js +28 -0
- package/dist/polyfills/utils/path-utils.js.map +1 -0
- package/dist/schema/categories/category-gis.d.ts +7 -0
- package/dist/schema/categories/category-gis.d.ts.map +1 -0
- package/dist/schema/categories/category-gis.js +5 -0
- package/dist/schema/categories/category-gis.js.map +1 -0
- package/dist/schema/categories/category-image.d.ts +18 -0
- package/dist/schema/categories/category-image.d.ts.map +1 -0
- package/dist/schema/categories/category-image.js +5 -0
- package/dist/schema/categories/category-image.js.map +1 -0
- package/dist/schema/categories/category-mesh.d.ts +99 -0
- package/dist/schema/categories/category-mesh.d.ts.map +1 -0
- package/dist/schema/categories/category-mesh.js +14 -0
- package/dist/schema/categories/category-mesh.js.map +1 -0
- package/dist/schema/categories/category-table.d.ts +106 -0
- package/dist/schema/categories/category-table.d.ts.map +1 -0
- package/dist/schema/categories/category-table.js +5 -0
- package/dist/schema/categories/category-table.js.map +1 -0
- package/dist/schema/categories/category-texture.d.ts +115 -0
- package/dist/schema/categories/category-texture.d.ts.map +1 -0
- package/dist/schema/categories/category-texture.js +5 -0
- package/dist/schema/categories/category-texture.js.map +1 -0
- package/dist/schema/deprecated/mesh-utils.d.ts +12 -0
- package/dist/schema/deprecated/mesh-utils.d.ts.map +1 -0
- package/dist/schema/deprecated/mesh-utils.js +37 -0
- package/dist/schema/deprecated/mesh-utils.js.map +1 -0
- package/dist/schema/float16.d.ts +19 -0
- package/dist/schema/float16.d.ts.map +1 -0
- package/dist/schema/float16.js +90 -0
- package/dist/schema/float16.js.map +1 -0
- package/dist/schema/geoarrow-metadata.schema.json +117 -0
- package/dist/schema/geometry/arrow-binary-features.d.ts +45 -0
- package/dist/schema/geometry/arrow-binary-features.d.ts.map +1 -0
- package/dist/schema/geometry/arrow-binary-features.js +5 -0
- package/dist/schema/geometry/arrow-binary-features.js.map +1 -0
- package/dist/schema/geometry/binary-features.d.ts +30 -0
- package/dist/schema/geometry/binary-features.d.ts.map +1 -0
- package/dist/schema/geometry/binary-features.js +5 -0
- package/dist/schema/geometry/binary-features.js.map +1 -0
- package/dist/schema/geometry/binary-geometries.d.ts +33 -0
- package/dist/schema/geometry/binary-geometries.d.ts.map +1 -0
- package/dist/schema/geometry/binary-geometries.js +5 -0
- package/dist/schema/geometry/binary-geometries.js.map +1 -0
- package/dist/schema/geometry/flat-geometries.d.ts +61 -0
- package/dist/schema/geometry/flat-geometries.d.ts.map +1 -0
- package/dist/schema/geometry/flat-geometries.js +5 -0
- package/dist/schema/geometry/flat-geometries.js.map +1 -0
- package/dist/schema/geometry/geoarrow.d.ts +69 -0
- package/dist/schema/geometry/geoarrow.d.ts.map +1 -0
- package/dist/schema/geometry/geoarrow.js +5 -0
- package/dist/schema/geometry/geoarrow.js.map +1 -0
- package/dist/schema/geoparquet.schema.json +222 -0
- package/dist/schema/geospatial-metadata-zod-schema.cjs +154 -0
- package/dist/schema/geospatial-metadata-zod-schema.cjs.map +6 -0
- package/dist/schema/geospatial-metadata-zod-schema.d.ts +44 -0
- package/dist/schema/geospatial-metadata-zod-schema.d.ts.map +1 -0
- package/dist/schema/geospatial-metadata-zod-schema.js +151 -0
- package/dist/schema/geospatial-metadata-zod-schema.js.map +1 -0
- package/dist/schema/index.cjs +259 -0
- package/dist/schema/index.cjs.map +6 -0
- package/dist/schema/index.d.ts +21 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +9 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/metadata.d.ts +40 -0
- package/dist/schema/metadata.d.ts.map +1 -0
- package/dist/schema/metadata.js +86 -0
- package/dist/schema/metadata.js.map +1 -0
- package/dist/schema/types/batch.d.ts +37 -0
- package/dist/schema/types/batch.d.ts.map +1 -0
- package/dist/schema/types/batch.js +5 -0
- package/dist/schema/types/batch.js.map +1 -0
- package/dist/schema/types/schema.d.ts +70 -0
- package/dist/schema/types/schema.d.ts.map +1 -0
- package/dist/schema/types/schema.js +5 -0
- package/dist/schema/types/schema.js.map +1 -0
- package/dist/schema/types/types.d.ts +16 -0
- package/dist/schema/types/types.d.ts.map +1 -0
- package/dist/schema/types/types.js +6 -0
- package/dist/schema/types/types.js.map +1 -0
- package/dist/schema-utils/arrow-transport.cjs +665 -0
- package/dist/schema-utils/arrow-transport.cjs.map +6 -0
- package/dist/schema-utils/arrow-transport.d.ts +4 -0
- package/dist/schema-utils/arrow-transport.d.ts.map +1 -0
- package/dist/schema-utils/arrow-transport.js +7 -0
- package/dist/schema-utils/arrow-transport.js.map +1 -0
- package/dist/schema-utils/deprecated.d.ts +24 -0
- package/dist/schema-utils/deprecated.d.ts.map +1 -0
- package/dist/schema-utils/deprecated.js +27 -0
- package/dist/schema-utils/deprecated.js.map +1 -0
- package/dist/schema-utils/index.cjs +3423 -0
- package/dist/schema-utils/index.cjs.map +6 -0
- package/dist/schema-utils/index.d.ts +38 -0
- package/dist/schema-utils/index.d.ts.map +1 -0
- package/dist/schema-utils/index.js +77 -0
- package/dist/schema-utils/index.js.map +1 -0
- package/dist/schema-utils/lib/arrow/arrow-table-transport.d.ts +72 -0
- package/dist/schema-utils/lib/arrow/arrow-table-transport.d.ts.map +1 -0
- package/dist/schema-utils/lib/arrow/arrow-table-transport.js +162 -0
- package/dist/schema-utils/lib/arrow/arrow-table-transport.js.map +1 -0
- package/dist/schema-utils/lib/arrow/split-arrow-buffers.d.ts +33 -0
- package/dist/schema-utils/lib/arrow/split-arrow-buffers.d.ts.map +1 -0
- package/dist/schema-utils/lib/arrow/split-arrow-buffers.js +128 -0
- package/dist/schema-utils/lib/arrow/split-arrow-buffers.js.map +1 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-fixed-size-list-utils.d.ts +11 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-fixed-size-list-utils.d.ts.map +1 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-fixed-size-list-utils.js +45 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-fixed-size-list-utils.js.map +1 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-list-of-fixed-size-list-utils.d.ts +11 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-list-of-fixed-size-list-utils.d.ts.map +1 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-list-of-fixed-size-list-utils.js +33 -0
- package/dist/schema-utils/lib/arrow-utils/arrow-list-of-fixed-size-list-utils.js.map +1 -0
- package/dist/schema-utils/lib/converters/convert.d.ts +10 -0
- package/dist/schema-utils/lib/converters/convert.d.ts.map +1 -0
- package/dist/schema-utils/lib/converters/convert.js +98 -0
- package/dist/schema-utils/lib/converters/convert.js.map +1 -0
- package/dist/schema-utils/lib/converters/converters.d.ts +3 -0
- package/dist/schema-utils/lib/converters/converters.d.ts.map +1 -0
- package/dist/schema-utils/lib/converters/converters.js +5 -0
- package/dist/schema-utils/lib/converters/converters.js.map +1 -0
- package/dist/schema-utils/lib/converters/types.d.ts +35 -0
- package/dist/schema-utils/lib/converters/types.d.ts.map +1 -0
- package/dist/schema-utils/lib/converters/types.js +5 -0
- package/dist/schema-utils/lib/converters/types.js.map +1 -0
- package/dist/schema-utils/lib/mesh/convert-mesh-to-table.d.ts +44 -0
- package/dist/schema-utils/lib/mesh/convert-mesh-to-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/mesh/convert-mesh-to-table.js +187 -0
- package/dist/schema-utils/lib/mesh/convert-mesh-to-table.js.map +1 -0
- package/dist/schema-utils/lib/mesh/convert-table-to-mesh.d.ts +14 -0
- package/dist/schema-utils/lib/mesh/convert-table-to-mesh.d.ts.map +1 -0
- package/dist/schema-utils/lib/mesh/convert-table-to-mesh.js +217 -0
- package/dist/schema-utils/lib/mesh/convert-table-to-mesh.js.map +1 -0
- package/dist/schema-utils/lib/mesh/deduce-mesh-schema.d.ts +23 -0
- package/dist/schema-utils/lib/mesh/deduce-mesh-schema.d.ts.map +1 -0
- package/dist/schema-utils/lib/mesh/deduce-mesh-schema.js +72 -0
- package/dist/schema-utils/lib/mesh/deduce-mesh-schema.js.map +1 -0
- package/dist/schema-utils/lib/mesh/mesh-utils.d.ts +23 -0
- package/dist/schema-utils/lib/mesh/mesh-utils.d.ts.map +1 -0
- package/dist/schema-utils/lib/mesh/mesh-utils.js +54 -0
- package/dist/schema-utils/lib/mesh/mesh-utils.js.map +1 -0
- package/dist/schema-utils/lib/mesh/point-cloud-tiler.d.ts +98 -0
- package/dist/schema-utils/lib/mesh/point-cloud-tiler.d.ts.map +1 -0
- package/dist/schema-utils/lib/mesh/point-cloud-tiler.js +407 -0
- package/dist/schema-utils/lib/mesh/point-cloud-tiler.js.map +1 -0
- package/dist/schema-utils/lib/schema/convert-arrow-schema.d.ts +39 -0
- package/dist/schema-utils/lib/schema/convert-arrow-schema.d.ts.map +1 -0
- package/dist/schema-utils/lib/schema/convert-arrow-schema.js +441 -0
- package/dist/schema-utils/lib/schema/convert-arrow-schema.js.map +1 -0
- package/dist/schema-utils/lib/schema/data-type.d.ts +16 -0
- package/dist/schema-utils/lib/schema/data-type.d.ts.map +1 -0
- package/dist/schema-utils/lib/schema/data-type.js +102 -0
- package/dist/schema-utils/lib/schema/data-type.js.map +1 -0
- package/dist/schema-utils/lib/schema/deduce-table-schema.d.ts +14 -0
- package/dist/schema-utils/lib/schema/deduce-table-schema.d.ts.map +1 -0
- package/dist/schema-utils/lib/schema/deduce-table-schema.js +101 -0
- package/dist/schema-utils/lib/schema/deduce-table-schema.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-field.d.ts +19 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-field.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-field.js +37 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-field.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-interface.d.ts +43 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-interface.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-interface.js +5 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-interface.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-schema.d.ts +12 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-schema.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-schema.js +82 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-schema.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-table.d.ts +28 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-table.js +64 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-table.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-type.d.ts +177 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-type.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-type.js +441 -0
- package/dist/schema-utils/lib/table/arrow-api/arrow-like-type.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/enum.d.ts +92 -0
- package/dist/schema-utils/lib/table/arrow-api/enum.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/enum.js +98 -0
- package/dist/schema-utils/lib/table/arrow-api/enum.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/get-type-info.d.ts +13 -0
- package/dist/schema-utils/lib/table/arrow-api/get-type-info.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/get-type-info.js +28 -0
- package/dist/schema-utils/lib/table/arrow-api/get-type-info.js.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/index.d.ts +6 -0
- package/dist/schema-utils/lib/table/arrow-api/index.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/arrow-api/index.js +8 -0
- package/dist/schema-utils/lib/table/arrow-api/index.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator.d.ts +10 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator.js +71 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-builder.d.ts +28 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-builder.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-builder.js +104 -0
- package/dist/schema-utils/lib/table/batch-builder/arrow-table-builder.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/base-table-batch-aggregator.d.ts +19 -0
- package/dist/schema-utils/lib/table/batch-builder/base-table-batch-aggregator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/base-table-batch-aggregator.js +64 -0
- package/dist/schema-utils/lib/table/batch-builder/base-table-batch-aggregator.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/columnar-table-batch-aggregator.d.ts +20 -0
- package/dist/schema-utils/lib/table/batch-builder/columnar-table-batch-aggregator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/columnar-table-batch-aggregator.js +84 -0
- package/dist/schema-utils/lib/table/batch-builder/columnar-table-batch-aggregator.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/row-table-batch-aggregator.d.ts +21 -0
- package/dist/schema-utils/lib/table/batch-builder/row-table-batch-aggregator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/row-table-batch-aggregator.js +86 -0
- package/dist/schema-utils/lib/table/batch-builder/row-table-batch-aggregator.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-aggregator.d.ts +24 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-aggregator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-aggregator.js +5 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-aggregator.js.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-builder.d.ts +52 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-builder.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-builder.js +149 -0
- package/dist/schema-utils/lib/table/batch-builder/table-batch-builder.js.map +1 -0
- package/dist/schema-utils/lib/table/batches/convert-batches.d.ts +10 -0
- package/dist/schema-utils/lib/table/batches/convert-batches.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batches/convert-batches.js +46 -0
- package/dist/schema-utils/lib/table/batches/convert-batches.js.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-arrow-batch-iterator.d.ts +17 -0
- package/dist/schema-utils/lib/table/batches/make-arrow-batch-iterator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-arrow-batch-iterator.js +61 -0
- package/dist/schema-utils/lib/table/batches/make-arrow-batch-iterator.js.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-table-batch-iterator.d.ts +15 -0
- package/dist/schema-utils/lib/table/batches/make-table-batch-iterator.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-table-batch-iterator.js +22 -0
- package/dist/schema-utils/lib/table/batches/make-table-batch-iterator.js.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-table-from-batches.d.ts +9 -0
- package/dist/schema-utils/lib/table/batches/make-table-from-batches.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/batches/make-table-from-batches.js +63 -0
- package/dist/schema-utils/lib/table/batches/make-table-from-batches.js.map +1 -0
- package/dist/schema-utils/lib/table/query-arrow-table.d.ts +23 -0
- package/dist/schema-utils/lib/table/query-arrow-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/query-arrow-table.js +73 -0
- package/dist/schema-utils/lib/table/query-arrow-table.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/convert-arrow-table.d.ts +24 -0
- package/dist/schema-utils/lib/table/tables/convert-arrow-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/convert-arrow-table.js +151 -0
- package/dist/schema-utils/lib/table/tables/convert-arrow-table.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/convert-table.d.ts +43 -0
- package/dist/schema-utils/lib/table/tables/convert-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/convert-table.js +122 -0
- package/dist/schema-utils/lib/table/tables/convert-table.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/make-table.d.ts +67 -0
- package/dist/schema-utils/lib/table/tables/make-table.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/make-table.js +102 -0
- package/dist/schema-utils/lib/table/tables/make-table.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/row-utils.d.ts +15 -0
- package/dist/schema-utils/lib/table/tables/row-utils.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/row-utils.js +50 -0
- package/dist/schema-utils/lib/table/tables/row-utils.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-accessors.d.ts +68 -0
- package/dist/schema-utils/lib/table/tables/table-accessors.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-accessors.js +352 -0
- package/dist/schema-utils/lib/table/tables/table-accessors.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-column.d.ts +7 -0
- package/dist/schema-utils/lib/table/tables/table-column.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-column.js +40 -0
- package/dist/schema-utils/lib/table/tables/table-column.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-converter/convert-tables.d.ts +9 -0
- package/dist/schema-utils/lib/table/tables/table-converter/convert-tables.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-converter/convert-tables.js +19 -0
- package/dist/schema-utils/lib/table/tables/table-converter/convert-tables.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-converter/table-converter.d.ts +16 -0
- package/dist/schema-utils/lib/table/tables/table-converter/table-converter.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-converter/table-converter.js +45 -0
- package/dist/schema-utils/lib/table/tables/table-converter/table-converter.js.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-types.d.ts +12 -0
- package/dist/schema-utils/lib/table/tables/table-types.d.ts.map +1 -0
- package/dist/schema-utils/lib/table/tables/table-types.js +24 -0
- package/dist/schema-utils/lib/table/tables/table-types.js.map +1 -0
- package/dist/schema-utils/lib/utils/assert.d.ts +2 -0
- package/dist/schema-utils/lib/utils/assert.d.ts.map +1 -0
- package/dist/schema-utils/lib/utils/assert.js +12 -0
- package/dist/schema-utils/lib/utils/assert.js.map +1 -0
- package/dist/schema-utils/lib/utils/async-queue.d.ts +18 -0
- package/dist/schema-utils/lib/utils/async-queue.d.ts.map +1 -0
- package/dist/schema-utils/lib/utils/async-queue.js +96 -0
- package/dist/schema-utils/lib/utils/async-queue.js.map +1 -0
- package/dist/schema-utils/types/types.d.ts +15 -0
- package/dist/schema-utils/types/types.d.ts.map +1 -0
- package/dist/schema-utils/types/types.js +5 -0
- package/dist/schema-utils/types/types.js.map +1 -0
- package/dist/worker-utils/index.cjs +1448 -0
- package/dist/worker-utils/index.cjs.map +6 -0
- package/dist/worker-utils/index.d.ts +22 -0
- package/dist/worker-utils/index.d.ts.map +1 -0
- package/dist/worker-utils/index.js +40 -0
- package/dist/worker-utils/index.js.map +1 -0
- package/dist/worker-utils/lib/async-queue/async-queue.d.ts +32 -0
- package/dist/worker-utils/lib/async-queue/async-queue.d.ts.map +1 -0
- package/dist/worker-utils/lib/async-queue/async-queue.js +91 -0
- package/dist/worker-utils/lib/async-queue/async-queue.js.map +1 -0
- package/dist/worker-utils/lib/env-utils/assert.d.ts +3 -0
- package/dist/worker-utils/lib/env-utils/assert.d.ts.map +1 -0
- package/dist/worker-utils/lib/env-utils/assert.js +13 -0
- package/dist/worker-utils/lib/env-utils/assert.js.map +1 -0
- package/dist/worker-utils/lib/env-utils/globals.d.ts +22 -0
- package/dist/worker-utils/lib/env-utils/globals.d.ts.map +1 -0
- package/dist/worker-utils/lib/env-utils/globals.js +30 -0
- package/dist/worker-utils/lib/env-utils/globals.js.map +1 -0
- package/dist/worker-utils/lib/env-utils/version.d.ts +2 -0
- package/dist/worker-utils/lib/env-utils/version.d.ts.map +1 -0
- package/dist/worker-utils/lib/env-utils/version.js +20 -0
- package/dist/worker-utils/lib/env-utils/version.js.map +1 -0
- package/dist/worker-utils/lib/library-utils/library-utils.d.ts +42 -0
- package/dist/worker-utils/lib/library-utils/library-utils.d.ts.map +1 -0
- package/dist/worker-utils/lib/library-utils/library-utils.js +248 -0
- package/dist/worker-utils/lib/library-utils/library-utils.js.map +1 -0
- package/dist/worker-utils/lib/node/worker_threads-browser.d.ts +14 -0
- package/dist/worker-utils/lib/node/worker_threads-browser.d.ts.map +1 -0
- package/dist/worker-utils/lib/node/worker_threads-browser.js +22 -0
- package/dist/worker-utils/lib/node/worker_threads-browser.js.map +1 -0
- package/dist/worker-utils/lib/node/worker_threads.d.ts +15 -0
- package/dist/worker-utils/lib/node/worker_threads.d.ts.map +1 -0
- package/dist/worker-utils/lib/node/worker_threads.js +16 -0
- package/dist/worker-utils/lib/node/worker_threads.js.map +1 -0
- package/dist/worker-utils/lib/npm-tag.d.ts +8 -0
- package/dist/worker-utils/lib/npm-tag.d.ts.map +1 -0
- package/dist/worker-utils/lib/npm-tag.js +11 -0
- package/dist/worker-utils/lib/npm-tag.js.map +1 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.browser.d.ts +8 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.browser.d.ts.map +1 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.browser.js +18 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.browser.js.map +1 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.d.ts +45 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.d.ts.map +1 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.js +123 -0
- package/dist/worker-utils/lib/process-utils/child-process-proxy.js.map +1 -0
- package/dist/worker-utils/lib/process-utils/process-utils.d.ts +2 -0
- package/dist/worker-utils/lib/process-utils/process-utils.d.ts.map +1 -0
- package/dist/worker-utils/lib/process-utils/process-utils.js +32 -0
- package/dist/worker-utils/lib/process-utils/process-utils.js.map +1 -0
- package/dist/worker-utils/lib/worker-api/create-worker.d.ts +9 -0
- package/dist/worker-utils/lib/worker-api/create-worker.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-api/create-worker.js +123 -0
- package/dist/worker-utils/lib/worker-api/create-worker.js.map +1 -0
- package/dist/worker-utils/lib/worker-api/get-worker-url.d.ts +27 -0
- package/dist/worker-utils/lib/worker-api/get-worker-url.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-api/get-worker-url.js +103 -0
- package/dist/worker-utils/lib/worker-api/get-worker-url.js.map +1 -0
- package/dist/worker-utils/lib/worker-api/process-on-worker.d.ts +44 -0
- package/dist/worker-utils/lib/worker-api/process-on-worker.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-api/process-on-worker.js +312 -0
- package/dist/worker-utils/lib/worker-api/process-on-worker.js.map +1 -0
- package/dist/worker-utils/lib/worker-api/validate-worker-version.d.ts +9 -0
- package/dist/worker-utils/lib/worker-api/validate-worker-version.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-api/validate-worker-version.js +35 -0
- package/dist/worker-utils/lib/worker-api/validate-worker-version.js.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-body.d.ts +20 -0
- package/dist/worker-utils/lib/worker-farm/worker-body.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-body.js +131 -0
- package/dist/worker-utils/lib/worker-farm/worker-body.js.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-farm.d.ts +58 -0
- package/dist/worker-utils/lib/worker-farm/worker-farm.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-farm.js +116 -0
- package/dist/worker-utils/lib/worker-farm/worker-farm.js.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-job.d.ts +34 -0
- package/dist/worker-utils/lib/worker-farm/worker-job.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-job.js +73 -0
- package/dist/worker-utils/lib/worker-farm/worker-job.js.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-pool.d.ts +94 -0
- package/dist/worker-utils/lib/worker-farm/worker-pool.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-pool.js +193 -0
- package/dist/worker-utils/lib/worker-farm/worker-pool.js.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-thread.d.ts +67 -0
- package/dist/worker-utils/lib/worker-farm/worker-thread.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-farm/worker-thread.js +175 -0
- package/dist/worker-utils/lib/worker-farm/worker-thread.js.map +1 -0
- package/dist/worker-utils/lib/worker-utils/get-loadable-worker-url.d.ts +14 -0
- package/dist/worker-utils/lib/worker-utils/get-loadable-worker-url.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-utils/get-loadable-worker-url.js +72 -0
- package/dist/worker-utils/lib/worker-utils/get-loadable-worker-url.js.map +1 -0
- package/dist/worker-utils/lib/worker-utils/get-transfer-list.d.ts +15 -0
- package/dist/worker-utils/lib/worker-utils/get-transfer-list.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-utils/get-transfer-list.js +86 -0
- package/dist/worker-utils/lib/worker-utils/get-transfer-list.js.map +1 -0
- package/dist/worker-utils/lib/worker-utils/remove-nontransferable-options.d.ts +6 -0
- package/dist/worker-utils/lib/worker-utils/remove-nontransferable-options.d.ts.map +1 -0
- package/dist/worker-utils/lib/worker-utils/remove-nontransferable-options.js +27 -0
- package/dist/worker-utils/lib/worker-utils/remove-nontransferable-options.js.map +1 -0
- package/dist/worker-utils/null-worker-node.js +349 -0
- package/dist/worker-utils/null-worker-node.js.map +7 -0
- package/dist/worker-utils/null-worker.js +327 -0
- package/dist/worker-utils/null-worker.js.map +7 -0
- package/dist/worker-utils/types.d.ts +79 -0
- package/dist/worker-utils/types.d.ts.map +1 -0
- package/dist/worker-utils/types.js +5 -0
- package/dist/worker-utils/types.js.map +1 -0
- package/dist/worker-utils/workers/null-worker.d.ts +2 -0
- package/dist/worker-utils/workers/null-worker.d.ts.map +1 -0
- package/dist/worker-utils/workers/null-worker.js +17 -0
- package/dist/worker-utils/workers/null-worker.js.map +1 -0
- package/dist/workers/null-worker-node.js +1 -1
- package/dist/workers/null-worker-node.js.map +1 -1
- package/dist/workers/null-worker.js +1 -1
- package/dist/workers/null-worker.js.map +1 -1
- package/package.json +101 -11
- package/src/index.ts +10 -10
- package/src/iterators/make-iterator/make-iterator.ts +1 -1
- package/src/iterators/make-iterator/make-stream-iterator.ts +1 -1
- package/src/iterators/make-iterator/make-string-iterator.ts +1 -1
- package/src/lib/api/core-api.ts +1 -1
- package/src/lib/api/create-data-source.ts +2 -2
- package/src/lib/api/encode-table.ts +2 -2
- package/src/lib/api/encode.ts +3 -3
- package/src/lib/api/load-in-batches.ts +2 -2
- package/src/lib/api/load-loader.ts +2 -2
- package/src/lib/api/load.ts +2 -2
- package/src/lib/api/parse-file.ts +3 -3
- package/src/lib/api/parse-in-batches.ts +44 -6
- package/src/lib/api/parse-sync.ts +2 -2
- package/src/lib/api/parse.ts +4 -4
- package/src/lib/api/preload.ts +6 -1
- package/src/lib/api/register-loaders.ts +1 -1
- package/src/lib/api/select-loader.ts +3 -3
- package/src/lib/api/select-source.ts +1 -1
- package/src/lib/common.ts +1 -1
- package/src/lib/fetch/fetch-file.ts +2 -2
- package/src/lib/filesystems/browser-filesystem.ts +2 -2
- package/src/lib/init.ts +1 -1
- package/src/lib/loader-utils/get-data.ts +2 -2
- package/src/lib/loader-utils/get-fetch-function.ts +2 -2
- package/src/lib/loader-utils/loader-context.ts +2 -2
- package/src/lib/loader-utils/loggers.ts +1 -1
- package/src/lib/loader-utils/normalize-loader.ts +2 -2
- package/src/lib/loader-utils/option-defaults.ts +2 -2
- package/src/lib/loader-utils/option-utils.ts +1 -1
- package/src/lib/utils/resource-utils.ts +1 -1
- package/src/lib/utils/response-utils.ts +1 -1
- package/src/loader-utils/format-types.ts +49 -0
- package/src/loader-utils/index.ts +522 -0
- package/src/loader-utils/json-loader.ts +39 -0
- package/src/loader-utils/lib/binary-utils/array-buffer-utils.ts +114 -0
- package/src/loader-utils/lib/binary-utils/binary-chunk-reader.ts +297 -0
- package/src/loader-utils/lib/binary-utils/dataview-copy-utils.ts +121 -0
- package/src/loader-utils/lib/binary-utils/encode-array-buffer-to-base64.ts +17 -0
- package/src/loader-utils/lib/binary-utils/get-first-characters.ts +46 -0
- package/src/loader-utils/lib/binary-utils/hex-transcoder.ts +54 -0
- package/src/loader-utils/lib/binary-utils/memory-conversion-utils.ts +105 -0
- package/src/loader-utils/lib/binary-utils/memory-copy-utils.ts +69 -0
- package/src/loader-utils/lib/crs/crs-reprojection.ts +52 -0
- package/src/loader-utils/lib/env-utils/assert.ts +13 -0
- package/src/loader-utils/lib/env-utils/globals.ts +36 -0
- package/src/loader-utils/lib/file-provider/data-view-file.ts +83 -0
- package/src/loader-utils/lib/file-provider/file-handle-file.ts +114 -0
- package/src/loader-utils/lib/file-provider/file-provider-interface.ts +60 -0
- package/src/loader-utils/lib/file-provider/file-provider.ts +130 -0
- package/src/loader-utils/lib/files/array-buffer-file.ts +46 -0
- package/src/loader-utils/lib/files/blob-file.ts +45 -0
- package/src/loader-utils/lib/files/file.ts +39 -0
- package/src/loader-utils/lib/files/http-file-transport.ts +432 -0
- package/src/loader-utils/lib/files/http-file-types.ts +60 -0
- package/src/loader-utils/lib/files/http-file.ts +267 -0
- package/src/loader-utils/lib/files/node-file-facade.ts +57 -0
- package/src/loader-utils/lib/files/sources.ts +154 -0
- package/src/loader-utils/lib/filesystems/filesystem.ts +40 -0
- package/src/loader-utils/lib/filesystems/node-filesystem-facade.ts +65 -0
- package/src/loader-utils/lib/iterators/async-iteration.ts +136 -0
- package/src/loader-utils/lib/iterators/text-iterators.ts +76 -0
- package/src/loader-utils/lib/javascript-utils/is-type.ts +130 -0
- package/src/loader-utils/lib/laz/LASZIP-LICENSE +202 -0
- package/src/loader-utils/lib/laz/LASZIP-NOTICE +6 -0
- package/src/loader-utils/lib/laz/laz-arithmetic-encoder.ts +446 -0
- package/src/loader-utils/lib/laz/laz-chunk-decoder.ts +5251 -0
- package/src/loader-utils/lib/laz/laz-chunk-encoder.ts +1909 -0
- package/src/loader-utils/lib/log-utils/log.ts +28 -0
- package/src/loader-utils/lib/module-utils/initialize-wasm-module.ts +51 -0
- package/src/loader-utils/lib/module-utils/js-module-utils.ts +44 -0
- package/src/loader-utils/lib/node/buffer.browser.ts +22 -0
- package/src/loader-utils/lib/node/buffer.ts +40 -0
- package/src/loader-utils/lib/node/fs.browser.ts +5 -0
- package/src/loader-utils/lib/node/promisify.ts +72 -0
- package/src/loader-utils/lib/node/stream.browser.ts +5 -0
- package/src/loader-utils/lib/node/stream.ts +12 -0
- package/src/loader-utils/lib/option-utils/merge-options.ts +50 -0
- package/src/loader-utils/lib/parser-utils/parse-json.ts +16 -0
- package/src/loader-utils/lib/path-utils/cached-uri-resolver.ts +69 -0
- package/src/loader-utils/lib/path-utils/file-aliases.ts +49 -0
- package/src/loader-utils/lib/path-utils/get-cwd.ts +12 -0
- package/src/loader-utils/lib/path-utils/path.ts +173 -0
- package/src/loader-utils/lib/request-utils/abort-utils.ts +64 -0
- package/src/loader-utils/lib/request-utils/authentication.ts +134 -0
- package/src/loader-utils/lib/request-utils/parse-content-type.ts +22 -0
- package/src/loader-utils/lib/request-utils/range-request-cache.ts +279 -0
- package/src/loader-utils/lib/request-utils/range-request-scheduler.ts +899 -0
- package/src/loader-utils/lib/request-utils/request-cache.ts +296 -0
- package/src/loader-utils/lib/request-utils/request-credentials.ts +576 -0
- package/src/loader-utils/lib/request-utils/request-scheduler.ts +230 -0
- package/src/loader-utils/lib/scan-utils/columnar-predicate.ts +397 -0
- package/src/loader-utils/lib/scan-utils/experimental-scan-options.ts +46 -0
- package/src/loader-utils/lib/scan-utils/point-cloud-query.ts +176 -0
- package/src/loader-utils/lib/scan-utils/raster-query.ts +82 -0
- package/src/loader-utils/lib/scan-utils/relational-query.ts +188 -0
- package/src/loader-utils/lib/scan-utils/scan-executor.ts +208 -0
- package/src/loader-utils/lib/scan-utils/scan-fragments.ts +33 -0
- package/src/loader-utils/lib/scan-utils/scan-query-metadata.ts +439 -0
- package/src/loader-utils/lib/scan-utils/table-query-explain.ts +88 -0
- package/src/loader-utils/lib/scan-utils/table-query.ts +163 -0
- package/src/loader-utils/lib/scan-utils/table-scan-batch.ts +200 -0
- package/src/loader-utils/lib/sources/catalog-source.ts +42 -0
- package/src/loader-utils/lib/sources/data-source-manager.ts +569 -0
- package/src/loader-utils/lib/sources/data-source.ts +236 -0
- package/src/loader-utils/lib/sources/image-source.ts +66 -0
- package/src/loader-utils/lib/sources/image-tile-source.ts +22 -0
- package/src/loader-utils/lib/sources/raster-coverage.ts +92 -0
- package/src/loader-utils/lib/sources/raster-region.ts +35 -0
- package/src/loader-utils/lib/sources/raster-sampling.ts +213 -0
- package/src/loader-utils/lib/sources/raster-source.ts +344 -0
- package/src/loader-utils/lib/sources/service-capabilities.ts +50 -0
- package/src/loader-utils/lib/sources/tile-grid.ts +162 -0
- package/src/loader-utils/lib/sources/tile-source-adapter.ts +126 -0
- package/src/loader-utils/lib/sources/tile-source-utils.ts +19 -0
- package/src/loader-utils/lib/sources/tile-source.ts +198 -0
- package/src/loader-utils/lib/sources/utils/image-type.ts +14 -0
- package/src/loader-utils/lib/sources/utils/utils.ts +31 -0
- package/src/loader-utils/lib/sources/vector-source.ts +89 -0
- package/src/loader-utils/lib/sources/vector-tile-source.ts +29 -0
- package/src/loader-utils/lib/sources/xyz-grid.ts +82 -0
- package/src/loader-utils/lib/worker-loader-utils/create-loader-worker.ts +233 -0
- package/src/loader-utils/lib/worker-loader-utils/encode-with-worker.ts +28 -0
- package/src/loader-utils/lib/worker-loader-utils/parse-with-worker.ts +347 -0
- package/src/loader-utils/loader-types.ts +531 -0
- package/src/loader-utils/source-types.ts +76 -0
- package/src/loader-utils/types.ts +83 -0
- package/src/loader-utils/workers/json-worker.ts +8 -0
- package/src/loader-utils/writer-types.ts +107 -0
- package/src/null-loader.ts +2 -2
- package/src/polyfills/README.md +16 -0
- package/src/polyfills/buffer/btoa.node.ts +15 -0
- package/src/polyfills/buffer/to-array-buffer.node.ts +12 -0
- package/src/polyfills/crypto/node-hash.ts +78 -0
- package/src/polyfills/fetch/decode-data-uri.ts +71 -0
- package/src/polyfills/fetch/fetch-polyfill.ts +165 -0
- package/src/polyfills/fetch/headers-polyfill.ts +119 -0
- package/src/polyfills/fetch/response-polyfill.ts +101 -0
- package/src/polyfills/fetch/utils/decode-data-uri.node.ts +34 -0
- package/src/polyfills/file/blob-stream-controller.ts +69 -0
- package/src/polyfills/file/blob-stream.ts +40 -0
- package/src/polyfills/file/blob.ts +177 -0
- package/src/polyfills/file/file-reader.ts +59 -0
- package/src/polyfills/file/file.ts +45 -0
- package/src/polyfills/file/install-blob-polyfills.ts +17 -0
- package/src/polyfills/file/install-file-polyfills.ts +24 -0
- package/src/polyfills/file/readable-stream.ts +8 -0
- package/src/polyfills/filesystems/fetch-node.ts +98 -0
- package/src/polyfills/filesystems/node-file.ts +169 -0
- package/src/polyfills/filesystems/node-filesystem.ts +54 -0
- package/src/polyfills/filesystems/stream-utils.node.ts +81 -0
- package/src/polyfills/images/encode-image-node.ts +45 -0
- package/src/polyfills/images/encode-image.node.ts.disabled +41 -0
- package/src/polyfills/images/image-codecs-node.ts +40 -0
- package/src/polyfills/images/node-image-bitmap.ts +81 -0
- package/src/polyfills/images/node-image-formats.ts +6 -0
- package/src/polyfills/images/parse-image-node.ts +54 -0
- package/src/polyfills/images/parse-image.node.ts.disabled +55 -0
- package/src/polyfills/index.browser.ts +23 -0
- package/src/polyfills/index.ts +154 -0
- package/src/polyfills/libs/encoding-indexes-asian.js +15 -0
- package/src/polyfills/load-library/require-utils.node.ts +108 -0
- package/src/polyfills/streams/make-node-stream.ts +83 -0
- package/src/polyfills/text-encoder/encoding-indexes.ts +36 -0
- package/src/polyfills/text-encoder/text-encoder.ts +3085 -0
- package/src/polyfills/utils/assert.ts +9 -0
- package/src/polyfills/utils/buffer-utils.ts +40 -0
- package/src/polyfills/utils/filesystem-types.ts +13 -0
- package/src/polyfills/utils/is-browser.ts +8 -0
- package/src/polyfills/utils/path-utils.ts +31 -0
- package/src/polyfills/wip/fetch-browser/fetch-file.browser.d.ts +34 -0
- package/src/schema/categories/category-gis.ts +63 -0
- package/src/schema/categories/category-image.ts +23 -0
- package/src/schema/categories/category-mesh.ts +138 -0
- package/src/schema/categories/category-table.ts +125 -0
- package/src/schema/categories/category-texture.ts +259 -0
- package/src/schema/deprecated/mesh-utils.ts +46 -0
- package/src/schema/float16.ts +111 -0
- package/src/schema/geometry/arrow-binary-features.ts +54 -0
- package/src/schema/geometry/binary-features.ts +43 -0
- package/src/schema/geometry/binary-geometries.ts +45 -0
- package/src/schema/geometry/flat-geometries.ts +72 -0
- package/src/schema/geometry/geoarrow.ts +116 -0
- package/src/schema/geospatial-metadata-zod-schema.ts +163 -0
- package/src/schema/index.ts +169 -0
- package/src/schema/metadata.ts +115 -0
- package/src/schema/types/batch.ts +47 -0
- package/src/schema/types/schema.ts +86 -0
- package/src/schema/types/types.ts +52 -0
- package/src/schema-utils/arrow-transport.ts +7 -0
- package/src/schema-utils/deprecated.ts +53 -0
- package/src/schema-utils/index.ts +165 -0
- package/src/schema-utils/lib/arrow/arrow-table-transport.ts +260 -0
- package/src/schema-utils/lib/arrow/split-arrow-buffers.ts +235 -0
- package/src/schema-utils/lib/arrow-utils/arrow-fixed-size-list-utils.ts +78 -0
- package/src/schema-utils/lib/arrow-utils/arrow-list-of-fixed-size-list-utils.ts +48 -0
- package/src/schema-utils/lib/converters/convert.ts +142 -0
- package/src/schema-utils/lib/converters/converters.ts +6 -0
- package/src/schema-utils/lib/converters/types.ts +44 -0
- package/src/schema-utils/lib/mesh/convert-mesh-to-table.ts +311 -0
- package/src/schema-utils/lib/mesh/convert-table-to-mesh.ts +257 -0
- package/src/schema-utils/lib/mesh/deduce-mesh-schema.ts +85 -0
- package/src/schema-utils/lib/mesh/mesh-utils.ts +73 -0
- package/src/schema-utils/lib/mesh/point-cloud-tiler.ts +485 -0
- package/src/schema-utils/lib/schema/convert-arrow-schema.ts +552 -0
- package/src/schema-utils/lib/schema/data-type.ts +122 -0
- package/src/schema-utils/lib/schema/deduce-table-schema.ts +119 -0
- package/src/schema-utils/lib/table/arrow-api/arrow-like-field.ts +53 -0
- package/src/schema-utils/lib/table/arrow-api/arrow-like-interface.ts +84 -0
- package/src/schema-utils/lib/table/arrow-api/arrow-like-schema.ts +101 -0
- package/src/schema-utils/lib/table/arrow-api/arrow-like-table.ts +85 -0
- package/src/schema-utils/lib/table/arrow-api/arrow-like-type.ts +500 -0
- package/src/schema-utils/lib/table/arrow-api/enum.ts +99 -0
- package/src/schema-utils/lib/table/arrow-api/get-type-info.ts +38 -0
- package/src/schema-utils/lib/table/arrow-api/index.ts +50 -0
- package/src/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator-builders.ts.disabled +190 -0
- package/src/schema-utils/lib/table/batch-builder/arrow-table-batch-aggregator.ts +85 -0
- package/src/schema-utils/lib/table/batch-builder/arrow-table-builder.ts +123 -0
- package/src/schema-utils/lib/table/batch-builder/base-table-batch-aggregator.ts +82 -0
- package/src/schema-utils/lib/table/batch-builder/columnar-table-batch-aggregator.ts +104 -0
- package/src/schema-utils/lib/table/batch-builder/row-table-batch-aggregator.ts +108 -0
- package/src/schema-utils/lib/table/batch-builder/table-batch-aggregator.ts +28 -0
- package/src/schema-utils/lib/table/batch-builder/table-batch-builder.ts +185 -0
- package/src/schema-utils/lib/table/batches/convert-batches.ts +83 -0
- package/src/schema-utils/lib/table/batches/make-arrow-batch-iterator.ts +81 -0
- package/src/schema-utils/lib/table/batches/make-table-batch-iterator.ts +25 -0
- package/src/schema-utils/lib/table/batches/make-table-from-batches.ts +84 -0
- package/src/schema-utils/lib/table/query-arrow-table.ts +130 -0
- package/src/schema-utils/lib/table/tables/convert-arrow-table.ts +198 -0
- package/src/schema-utils/lib/table/tables/convert-table.ts +152 -0
- package/src/schema-utils/lib/table/tables/make-table.ts +127 -0
- package/src/schema-utils/lib/table/tables/row-utils.ts +59 -0
- package/src/schema-utils/lib/table/tables/table-accessors.ts +418 -0
- package/src/schema-utils/lib/table/tables/table-column.ts +49 -0
- package/src/schema-utils/lib/table/tables/table-converter/convert-tables.ts +35 -0
- package/src/schema-utils/lib/table/tables/table-converter/table-converter.ts +57 -0
- package/src/schema-utils/lib/table/tables/table-types.ts +37 -0
- package/src/schema-utils/lib/utils/assert.ts +12 -0
- package/src/schema-utils/lib/utils/async-queue.ts +109 -0
- package/src/schema-utils/types/types.ts +45 -0
- package/src/worker-utils/index.ts +80 -0
- package/src/worker-utils/lib/async-queue/async-queue.ts +100 -0
- package/src/worker-utils/lib/env-utils/assert.ts +14 -0
- package/src/worker-utils/lib/env-utils/globals.ts +40 -0
- package/src/worker-utils/lib/env-utils/version.ts +25 -0
- package/src/worker-utils/lib/library-utils/library-utils.ts +303 -0
- package/src/worker-utils/lib/node/worker_threads-browser.ts +34 -0
- package/src/worker-utils/lib/node/worker_threads.ts +58 -0
- package/src/worker-utils/lib/npm-tag.ts +11 -0
- package/src/worker-utils/lib/process-utils/child-process-proxy.browser.ts +23 -0
- package/src/worker-utils/lib/process-utils/child-process-proxy.ts +165 -0
- package/src/worker-utils/lib/process-utils/process-utils.ts +34 -0
- package/src/worker-utils/lib/worker-api/create-worker.ts +166 -0
- package/src/worker-utils/lib/worker-api/get-worker-url.ts +129 -0
- package/src/worker-utils/lib/worker-api/process-on-worker.ts +413 -0
- package/src/worker-utils/lib/worker-api/validate-worker-version.ts +44 -0
- package/src/worker-utils/lib/worker-farm/worker-body.ts +145 -0
- package/src/worker-utils/lib/worker-farm/worker-farm.ts +144 -0
- package/src/worker-utils/lib/worker-farm/worker-job.ts +83 -0
- package/src/worker-utils/lib/worker-farm/worker-pool.ts +263 -0
- package/src/worker-utils/lib/worker-farm/worker-thread.ts +206 -0
- package/src/worker-utils/lib/worker-utils/get-loadable-worker-url.ts +81 -0
- package/src/worker-utils/lib/worker-utils/get-transfer-list.ts +93 -0
- package/src/worker-utils/lib/worker-utils/remove-nontransferable-options.ts +27 -0
- package/src/worker-utils/types.ts +125 -0
- package/src/worker-utils/workers/null-worker.ts +20 -0
- package/src/workers/null-worker-node.ts +1 -1
- package/src/workers/null-worker.ts +1 -1
|
@@ -0,0 +1,1909 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LAZChunkMetadata} from './laz-chunk-decoder';
|
|
6
|
+
import type {LAZChunkTableEntry} from './laz-chunk-decoder';
|
|
7
|
+
import {
|
|
8
|
+
ArithmeticEncoder,
|
|
9
|
+
ArithmeticModel,
|
|
10
|
+
IntegerCompressor,
|
|
11
|
+
StreamingMedian,
|
|
12
|
+
toInt32
|
|
13
|
+
} from './laz-arithmetic-encoder';
|
|
14
|
+
|
|
15
|
+
const POINT_FORMAT_BASE_LENGTHS: Record<number, number> = {
|
|
16
|
+
0: 20,
|
|
17
|
+
1: 28,
|
|
18
|
+
2: 26,
|
|
19
|
+
3: 34,
|
|
20
|
+
4: 57,
|
|
21
|
+
5: 63,
|
|
22
|
+
6: 30,
|
|
23
|
+
7: 36,
|
|
24
|
+
8: 38,
|
|
25
|
+
9: 59,
|
|
26
|
+
10: 67
|
|
27
|
+
};
|
|
28
|
+
const LASZIP_VLR_HEADER_LENGTH = 54;
|
|
29
|
+
const LASZIP_VLR_PAYLOAD_BASE_LENGTH = 34;
|
|
30
|
+
const GPS_TIME_MULTI = 500;
|
|
31
|
+
const GPS_TIME_MULTI_MINUS = -10;
|
|
32
|
+
const GPS_TIME_MULTI_CODE_FULL = 511;
|
|
33
|
+
const GPS_TIME10_MULTI_CODE_FULL = GPS_TIME_MULTI - GPS_TIME_MULTI_MINUS + 2;
|
|
34
|
+
|
|
35
|
+
const NUMBER_RETURN_MAP_6_CONTEXT: number[][] = [
|
|
36
|
+
[0, 1, 2, 3, 4, 5, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5],
|
|
37
|
+
[1, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
|
|
38
|
+
[2, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
|
|
39
|
+
[3, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
|
|
40
|
+
[4, 3, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
|
|
41
|
+
[5, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
|
|
42
|
+
[3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4],
|
|
43
|
+
[4, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4],
|
|
44
|
+
[4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4],
|
|
45
|
+
[5, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4],
|
|
46
|
+
[5, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4],
|
|
47
|
+
[5, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4],
|
|
48
|
+
[5, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4, 4],
|
|
49
|
+
[5, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4],
|
|
50
|
+
[5, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5],
|
|
51
|
+
[5, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5]
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const NUMBER_RETURN_MAP_10_CONTEXT: number[][] = [
|
|
55
|
+
[15, 14, 13, 12, 11, 10, 9, 8],
|
|
56
|
+
[14, 0, 1, 3, 6, 10, 10, 9],
|
|
57
|
+
[13, 1, 2, 4, 7, 11, 11, 10],
|
|
58
|
+
[12, 3, 4, 5, 8, 12, 12, 11],
|
|
59
|
+
[11, 6, 7, 8, 9, 13, 13, 12],
|
|
60
|
+
[10, 10, 11, 12, 13, 14, 14, 13],
|
|
61
|
+
[9, 10, 11, 12, 13, 14, 15, 14],
|
|
62
|
+
[8, 9, 10, 11, 12, 13, 14, 15]
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const NUMBER_RETURN_LEVEL_10_CONTEXT: number[][] = [
|
|
66
|
+
[0, 1, 2, 3, 4, 5, 6, 7],
|
|
67
|
+
[1, 0, 1, 2, 3, 4, 5, 6],
|
|
68
|
+
[2, 1, 0, 1, 2, 3, 4, 5],
|
|
69
|
+
[3, 2, 1, 0, 1, 2, 3, 4],
|
|
70
|
+
[4, 3, 2, 1, 0, 1, 2, 3],
|
|
71
|
+
[5, 4, 3, 2, 1, 0, 1, 2],
|
|
72
|
+
[6, 5, 4, 3, 2, 1, 0, 1],
|
|
73
|
+
[7, 6, 5, 4, 3, 2, 1, 0]
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const NUMBER_RETURN_LEVEL_8_CONTEXT: number[][] = [
|
|
77
|
+
[0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7],
|
|
78
|
+
[1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7],
|
|
79
|
+
[2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7],
|
|
80
|
+
[3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7],
|
|
81
|
+
[4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7],
|
|
82
|
+
[5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7],
|
|
83
|
+
[6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7],
|
|
84
|
+
[7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 7],
|
|
85
|
+
[7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7],
|
|
86
|
+
[7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6],
|
|
87
|
+
[7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5],
|
|
88
|
+
[7, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4],
|
|
89
|
+
[7, 7, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3],
|
|
90
|
+
[7, 7, 7, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2],
|
|
91
|
+
[7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 1],
|
|
92
|
+
[7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0]
|
|
93
|
+
];
|
|
94
|
+
|
|
95
|
+
/** Feedable TypeScript LAZ chunk encoder. */
|
|
96
|
+
export class FeedableLAZChunkEncoder {
|
|
97
|
+
/** Metadata describing the raw point records. */
|
|
98
|
+
private readonly metadata: LAZChunkMetadata;
|
|
99
|
+
/** Raw point byte ranges supplied by the caller. */
|
|
100
|
+
private readonly chunks: Uint8Array[] = [];
|
|
101
|
+
/** Whether the raw point input has been closed. */
|
|
102
|
+
private closed = false;
|
|
103
|
+
|
|
104
|
+
/** Create a feedable encoder for one LAZ chunk. */
|
|
105
|
+
constructor(metadata: LAZChunkMetadata) {
|
|
106
|
+
this.metadata = metadata;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Add raw LAS point record bytes to the encoder input. */
|
|
110
|
+
feed(chunk: ArrayBuffer | ArrayBufferView): void {
|
|
111
|
+
if (this.closed) {
|
|
112
|
+
throw new Error('Cannot feed a closed LAZ chunk encoder');
|
|
113
|
+
}
|
|
114
|
+
this.chunks.push(toUint8Array(chunk));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Mark the raw point input as complete. */
|
|
118
|
+
close(): void {
|
|
119
|
+
this.closed = true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Encode all fed point data into one compressed LAZ chunk. */
|
|
123
|
+
encode(): Uint8Array {
|
|
124
|
+
if (!this.closed) {
|
|
125
|
+
throw new Error('LAZ chunk encoder input is not closed');
|
|
126
|
+
}
|
|
127
|
+
return encodeLAZChunk(concatenateUint8Arrays(this.chunks), this.metadata);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Create a feedable TypeScript LAZ chunk encoder. */
|
|
132
|
+
export function createLAZChunkEncoder(metadata: LAZChunkMetadata): FeedableLAZChunkEncoder {
|
|
133
|
+
return new FeedableLAZChunkEncoder(metadata);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Encode raw LAS 1.4 point records into one LASzip layered chunk. */
|
|
137
|
+
export function encodeLAZChunk(
|
|
138
|
+
rawPointData: ArrayBuffer | ArrayBufferView,
|
|
139
|
+
metadata: LAZChunkMetadata
|
|
140
|
+
): Uint8Array {
|
|
141
|
+
const rawBytes = toUint8Array(rawPointData);
|
|
142
|
+
validateMetadata(rawBytes, metadata);
|
|
143
|
+
if (metadata.pointCount === 0) {
|
|
144
|
+
return new Uint8Array(0);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (metadata.pointDataRecordFormat <= 5) {
|
|
148
|
+
return encodeLegacyPointFormatChunk(rawBytes, metadata);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const pointRecordLength = metadata.pointDataRecordLength;
|
|
152
|
+
const pointFormat = metadata.pointDataRecordFormat;
|
|
153
|
+
const baseRecordLength = POINT_FORMAT_BASE_LENGTHS[pointFormat];
|
|
154
|
+
const extraByteCount = pointRecordLength - baseRecordLength;
|
|
155
|
+
const firstRecord = rawBytes.subarray(0, pointRecordLength);
|
|
156
|
+
const firstPoint = readPoint14(firstRecord, 0);
|
|
157
|
+
const pointEncoder = new Point14LayerEncoder(firstPoint);
|
|
158
|
+
const firstRgb =
|
|
159
|
+
pointFormat === 7 || pointFormat === 8 || pointFormat === 10 ? readRgb(firstRecord, 30) : null;
|
|
160
|
+
const rgbEncoder = firstRgb
|
|
161
|
+
? new RGB14LayerEncoder(firstRgb, getScannerChannel(firstPoint))
|
|
162
|
+
: null;
|
|
163
|
+
const nirEncoder =
|
|
164
|
+
pointFormat === 8 || pointFormat === 10
|
|
165
|
+
? new NIR14LayerEncoder(readUint16(firstRecord, 36), getScannerChannel(firstPoint))
|
|
166
|
+
: null;
|
|
167
|
+
const wavePacketOffset = pointFormat === 9 ? 30 : pointFormat === 10 ? 38 : -1;
|
|
168
|
+
const wavePacketEncoder =
|
|
169
|
+
wavePacketOffset >= 0
|
|
170
|
+
? new WavePacket14LayerEncoder(
|
|
171
|
+
readWavePacket(firstRecord, wavePacketOffset),
|
|
172
|
+
getScannerChannel(firstPoint),
|
|
173
|
+
metadata.wavePacketItemVersion ?? 3
|
|
174
|
+
)
|
|
175
|
+
: null;
|
|
176
|
+
const extraBytesEncoder = extraByteCount
|
|
177
|
+
? new Byte14LayerEncoder(
|
|
178
|
+
firstRecord.subarray(baseRecordLength, pointRecordLength),
|
|
179
|
+
getScannerChannel(firstPoint)
|
|
180
|
+
)
|
|
181
|
+
: null;
|
|
182
|
+
|
|
183
|
+
for (let pointIndex = 1; pointIndex < metadata.pointCount; pointIndex++) {
|
|
184
|
+
const recordOffset = pointIndex * pointRecordLength;
|
|
185
|
+
const record = rawBytes.subarray(recordOffset, recordOffset + pointRecordLength);
|
|
186
|
+
const itemContext = pointEncoder.encode(readPoint14(record, 0));
|
|
187
|
+
rgbEncoder?.encode(readRgb(record, 30), itemContext);
|
|
188
|
+
nirEncoder?.encode(readUint16(record, pointFormat === 10 ? 36 : 36), itemContext);
|
|
189
|
+
wavePacketEncoder?.encode(readWavePacket(record, wavePacketOffset), itemContext);
|
|
190
|
+
extraBytesEncoder?.encode(record.subarray(baseRecordLength, pointRecordLength), itemContext);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const pointLayers = pointEncoder.finish();
|
|
194
|
+
const rgbLayer = rgbEncoder?.finish();
|
|
195
|
+
const nirLayer = nirEncoder?.finish();
|
|
196
|
+
const wavePacketLayer = wavePacketEncoder?.finish();
|
|
197
|
+
const extraByteLayers = extraBytesEncoder?.finish() || [];
|
|
198
|
+
const layers = [
|
|
199
|
+
...pointLayers,
|
|
200
|
+
...(rgbLayer ? [rgbLayer] : []),
|
|
201
|
+
...(nirLayer ? [nirLayer] : []),
|
|
202
|
+
...(wavePacketLayer ? [wavePacketLayer] : []),
|
|
203
|
+
...extraByteLayers
|
|
204
|
+
];
|
|
205
|
+
|
|
206
|
+
const sizeHeader = new Uint8Array(4 + layers.length * 4);
|
|
207
|
+
const sizeView = new DataView(sizeHeader.buffer);
|
|
208
|
+
sizeView.setUint32(0, metadata.pointCount, true);
|
|
209
|
+
for (let index = 0; index < layers.length; index++) {
|
|
210
|
+
sizeView.setUint32(4 + index * 4, layers[index].byteLength, true);
|
|
211
|
+
}
|
|
212
|
+
return concatenateUint8Arrays([firstRecord, sizeHeader, ...layers]);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Encode LASzip chunk-table entries as one arithmetic-coded payload. */
|
|
216
|
+
export function encodeLAZChunkTable(
|
|
217
|
+
chunks: readonly LAZChunkTableEntry[],
|
|
218
|
+
options: {
|
|
219
|
+
/** Whether to include the point count for each variable-size chunk. */
|
|
220
|
+
variable?: boolean;
|
|
221
|
+
} = {}
|
|
222
|
+
): Uint8Array {
|
|
223
|
+
if (chunks.length === 0) {
|
|
224
|
+
return new Uint8Array(0);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const encoder = new ArithmeticEncoder();
|
|
228
|
+
const compressor = new IntegerCompressor(encoder, 32, 2);
|
|
229
|
+
let pointCountPredictor = 0;
|
|
230
|
+
let byteLengthPredictor = 0;
|
|
231
|
+
|
|
232
|
+
for (const chunk of chunks) {
|
|
233
|
+
validateChunkTableEntry(chunk);
|
|
234
|
+
if (options.variable) {
|
|
235
|
+
compressor.compress(pointCountPredictor, chunk.pointCount, 0);
|
|
236
|
+
pointCountPredictor = chunk.pointCount;
|
|
237
|
+
}
|
|
238
|
+
compressor.compress(byteLengthPredictor, chunk.byteLength, 1);
|
|
239
|
+
byteLengthPredictor = chunk.byteLength;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return encoder.finish();
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** Encode a complete LASzip VLR for a supported layered point layout. */
|
|
246
|
+
export function encodeLASzipVLR(options: {
|
|
247
|
+
/** LAS point data record format. */
|
|
248
|
+
pointDataRecordFormat: number;
|
|
249
|
+
/** Uncompressed byte length of each point record. */
|
|
250
|
+
pointDataRecordLength: number;
|
|
251
|
+
/** Fixed chunk size or `0xffffffff` for variable chunks. */
|
|
252
|
+
chunkSize: number;
|
|
253
|
+
/** LASzip item codec version. */
|
|
254
|
+
itemVersion?: 2 | 3;
|
|
255
|
+
}): Uint8Array {
|
|
256
|
+
const legacy = options.pointDataRecordFormat <= 5;
|
|
257
|
+
const itemVersion = options.itemVersion || (legacy ? 2 : 3);
|
|
258
|
+
if (legacy && itemVersion !== 2) {
|
|
259
|
+
throw new Error('Legacy LASzip point formats require item version 2');
|
|
260
|
+
}
|
|
261
|
+
if (!legacy && itemVersion !== 3) {
|
|
262
|
+
throw new Error('Modern LASzip point formats require item version 3');
|
|
263
|
+
}
|
|
264
|
+
const items = getLASzipItems(options.pointDataRecordFormat, options.pointDataRecordLength);
|
|
265
|
+
const payloadLength = LASZIP_VLR_PAYLOAD_BASE_LENGTH + items.length * 6;
|
|
266
|
+
const bytes = new Uint8Array(LASZIP_VLR_HEADER_LENGTH + payloadLength);
|
|
267
|
+
const dataView = new DataView(bytes.buffer);
|
|
268
|
+
const payloadOffset = LASZIP_VLR_HEADER_LENGTH;
|
|
269
|
+
|
|
270
|
+
writeString(dataView, 2, 'laszip encoded', 16);
|
|
271
|
+
dataView.setUint16(18, 22204, true);
|
|
272
|
+
dataView.setUint16(20, payloadLength, true);
|
|
273
|
+
writeString(dataView, 22, 'loaders.gl LAZ writer', 32);
|
|
274
|
+
dataView.setUint16(payloadOffset, legacy ? 2 : 3, true);
|
|
275
|
+
dataView.setUint16(payloadOffset + 2, 0, true);
|
|
276
|
+
dataView.setUint8(payloadOffset + 4, legacy ? 2 : 3);
|
|
277
|
+
dataView.setUint8(payloadOffset + 5, 0);
|
|
278
|
+
dataView.setUint16(payloadOffset + 6, 1, true);
|
|
279
|
+
dataView.setUint32(payloadOffset + 8, 0, true);
|
|
280
|
+
dataView.setUint32(payloadOffset + 12, options.chunkSize, true);
|
|
281
|
+
bytes.fill(0xff, payloadOffset + 16, payloadOffset + 32);
|
|
282
|
+
dataView.setUint16(payloadOffset + 32, items.length, true);
|
|
283
|
+
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
|
|
284
|
+
const itemOffset = payloadOffset + LASZIP_VLR_PAYLOAD_BASE_LENGTH + itemIndex * 6;
|
|
285
|
+
const item = items[itemIndex];
|
|
286
|
+
dataView.setUint16(itemOffset, item.type, true);
|
|
287
|
+
dataView.setUint16(itemOffset + 2, item.size, true);
|
|
288
|
+
dataView.setUint16(itemOffset + 4, item.version ?? itemVersion, true);
|
|
289
|
+
}
|
|
290
|
+
return bytes;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
type Point14 = {
|
|
294
|
+
/** Quantized X coordinate. */
|
|
295
|
+
x: number;
|
|
296
|
+
/** Quantized Y coordinate. */
|
|
297
|
+
y: number;
|
|
298
|
+
/** Quantized Z coordinate. */
|
|
299
|
+
z: number;
|
|
300
|
+
/** Pulse return intensity. */
|
|
301
|
+
intensity: number;
|
|
302
|
+
/** Packed return number and number of returns. */
|
|
303
|
+
returns: number;
|
|
304
|
+
/** Packed classification, scanner-channel, and flight-line flags. */
|
|
305
|
+
flags: number;
|
|
306
|
+
/** Point classification. */
|
|
307
|
+
classification: number;
|
|
308
|
+
/** User-defined point data. */
|
|
309
|
+
userData: number;
|
|
310
|
+
/** Scan angle in LAS 1.4 units. */
|
|
311
|
+
scanAngle: number;
|
|
312
|
+
/** Point source identifier. */
|
|
313
|
+
pointSourceId: number;
|
|
314
|
+
/** Raw IEEE-754 GPS timestamp bits. */
|
|
315
|
+
gpsTimeBits: bigint;
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
type Point10 = {
|
|
319
|
+
x: number;
|
|
320
|
+
y: number;
|
|
321
|
+
z: number;
|
|
322
|
+
intensity: number;
|
|
323
|
+
bitByte: number;
|
|
324
|
+
classification: number;
|
|
325
|
+
scanAngleRank: number;
|
|
326
|
+
userData: number;
|
|
327
|
+
pointSourceId: number;
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
/** Encode the legacy LAS point-format 0 item and optional Extra Bytes. */
|
|
331
|
+
function encodeLegacyPointFormatChunk(
|
|
332
|
+
rawBytes: Uint8Array,
|
|
333
|
+
metadata: LAZChunkMetadata
|
|
334
|
+
): Uint8Array {
|
|
335
|
+
const pointRecordLength = metadata.pointDataRecordLength;
|
|
336
|
+
const pointFormat = metadata.pointDataRecordFormat;
|
|
337
|
+
const baseRecordLength = POINT_FORMAT_BASE_LENGTHS[pointFormat];
|
|
338
|
+
const extraByteCount = pointRecordLength - baseRecordLength;
|
|
339
|
+
const firstRecord = rawBytes.subarray(0, pointRecordLength);
|
|
340
|
+
const encoder = new ArithmeticEncoder();
|
|
341
|
+
const pointEncoder = new Point10LayerEncoder(encoder, readPoint10(firstRecord, 0));
|
|
342
|
+
const gpsTimeEncoder =
|
|
343
|
+
pointFormat === 1 || pointFormat === 3 || pointFormat === 4 || pointFormat === 5
|
|
344
|
+
? new GpsTime10LayerEncoder(encoder, readFloat64(firstRecord, 20))
|
|
345
|
+
: null;
|
|
346
|
+
const rgbOffset = pointFormat === 2 ? 20 : pointFormat === 3 || pointFormat === 5 ? 28 : -1;
|
|
347
|
+
const rgbEncoder =
|
|
348
|
+
rgbOffset >= 0 ? new RGB10LayerEncoder(encoder, readRgb(firstRecord, rgbOffset)) : null;
|
|
349
|
+
const wavePacketOffset = pointFormat === 4 ? 28 : pointFormat === 5 ? 34 : -1;
|
|
350
|
+
const wavePacketEncoder =
|
|
351
|
+
wavePacketOffset >= 0
|
|
352
|
+
? new WavePacket13LayerEncoder(encoder, readWavePacket(firstRecord, wavePacketOffset))
|
|
353
|
+
: null;
|
|
354
|
+
const extraBytesEncoder = extraByteCount
|
|
355
|
+
? new Byte10LayerEncoder(encoder, firstRecord.subarray(baseRecordLength, pointRecordLength))
|
|
356
|
+
: null;
|
|
357
|
+
|
|
358
|
+
for (let pointIndex = 1; pointIndex < metadata.pointCount; pointIndex++) {
|
|
359
|
+
const recordOffset = pointIndex * pointRecordLength;
|
|
360
|
+
const record = rawBytes.subarray(recordOffset, recordOffset + pointRecordLength);
|
|
361
|
+
pointEncoder.encode(readPoint10(record, 0));
|
|
362
|
+
gpsTimeEncoder?.encode(readFloat64(record, 20));
|
|
363
|
+
rgbEncoder?.encode(readRgb(record, rgbOffset));
|
|
364
|
+
wavePacketEncoder?.encode(readWavePacket(record, wavePacketOffset));
|
|
365
|
+
extraBytesEncoder?.encode(record.subarray(baseRecordLength, pointRecordLength));
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return concatenateUint8Arrays([firstRecord, encoder.finish()]);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Encode the interleaved arithmetic Point10 LASzip item. */
|
|
372
|
+
class Point10LayerEncoder {
|
|
373
|
+
private readonly changedValuesModel = new ArithmeticModel(64);
|
|
374
|
+
private readonly bitByteModels = createModels(256, 256);
|
|
375
|
+
private readonly classificationModels = createModels(256, 256);
|
|
376
|
+
private readonly scanAngleRankModels = createModels(2, 256);
|
|
377
|
+
private readonly userDataModels = createModels(256, 256);
|
|
378
|
+
private readonly intensityCompressor: IntegerCompressor;
|
|
379
|
+
private readonly pointSourceIdCompressor: IntegerCompressor;
|
|
380
|
+
private readonly xDifferenceCompressor: IntegerCompressor;
|
|
381
|
+
private readonly yDifferenceCompressor: IntegerCompressor;
|
|
382
|
+
private readonly zCompressor: IntegerCompressor;
|
|
383
|
+
private readonly lastIntensity = new Array<number>(16).fill(0);
|
|
384
|
+
private readonly lastHeight = new Array<number>(8).fill(0);
|
|
385
|
+
private readonly lastXDifferenceMedian = Array.from({length: 16}, () => new StreamingMedian());
|
|
386
|
+
private readonly lastYDifferenceMedian = Array.from({length: 16}, () => new StreamingMedian());
|
|
387
|
+
private last: Point10;
|
|
388
|
+
|
|
389
|
+
constructor(
|
|
390
|
+
private readonly encoder: ArithmeticEncoder,
|
|
391
|
+
firstPoint: Point10
|
|
392
|
+
) {
|
|
393
|
+
this.last = {...firstPoint};
|
|
394
|
+
this.intensityCompressor = new IntegerCompressor(encoder, 16, 4);
|
|
395
|
+
this.pointSourceIdCompressor = new IntegerCompressor(encoder, 16, 1);
|
|
396
|
+
this.xDifferenceCompressor = new IntegerCompressor(encoder, 32, 2);
|
|
397
|
+
this.yDifferenceCompressor = new IntegerCompressor(encoder, 32, 22);
|
|
398
|
+
this.zCompressor = new IntegerCompressor(encoder, 32, 20);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/** Encode one Point10 record after the first raw record. */
|
|
402
|
+
encode(point: Point10): void {
|
|
403
|
+
const lastPoint = this.last;
|
|
404
|
+
const returnNumber = point.bitByte & 7;
|
|
405
|
+
const numberOfReturns = (point.bitByte >> 3) & 7;
|
|
406
|
+
const context = NUMBER_RETURN_MAP_10_CONTEXT[numberOfReturns][returnNumber];
|
|
407
|
+
const levelContext = NUMBER_RETURN_LEVEL_10_CONTEXT[numberOfReturns][returnNumber];
|
|
408
|
+
const changedValues =
|
|
409
|
+
(point.bitByte !== lastPoint.bitByte ? 1 << 5 : 0) |
|
|
410
|
+
(point.intensity !== this.lastIntensity[context] ? 1 << 4 : 0) |
|
|
411
|
+
(point.classification !== lastPoint.classification ? 1 << 3 : 0) |
|
|
412
|
+
(point.scanAngleRank !== lastPoint.scanAngleRank ? 1 << 2 : 0) |
|
|
413
|
+
(point.userData !== lastPoint.userData ? 1 << 1 : 0) |
|
|
414
|
+
(point.pointSourceId !== lastPoint.pointSourceId ? 1 : 0);
|
|
415
|
+
this.encoder.encodeSymbol(this.changedValuesModel, changedValues);
|
|
416
|
+
|
|
417
|
+
if (changedValues & (1 << 5)) {
|
|
418
|
+
this.encoder.encodeSymbol(this.bitByteModels[lastPoint.bitByte], point.bitByte);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
if (changedValues & (1 << 4)) {
|
|
422
|
+
this.intensityCompressor.compress(
|
|
423
|
+
this.lastIntensity[context],
|
|
424
|
+
point.intensity,
|
|
425
|
+
context < 3 ? context : 3
|
|
426
|
+
);
|
|
427
|
+
this.lastIntensity[context] = point.intensity;
|
|
428
|
+
}
|
|
429
|
+
if (changedValues & (1 << 3)) {
|
|
430
|
+
this.encoder.encodeSymbol(
|
|
431
|
+
this.classificationModels[lastPoint.classification],
|
|
432
|
+
point.classification
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
if (changedValues & (1 << 2)) {
|
|
436
|
+
this.encoder.encodeSymbol(
|
|
437
|
+
this.scanAngleRankModels[(point.bitByte >> 6) & 1],
|
|
438
|
+
foldInt8(point.scanAngleRank - lastPoint.scanAngleRank)
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
if (changedValues & (1 << 1)) {
|
|
442
|
+
this.encoder.encodeSymbol(this.userDataModels[lastPoint.userData], point.userData);
|
|
443
|
+
}
|
|
444
|
+
if (changedValues & 1) {
|
|
445
|
+
this.pointSourceIdCompressor.compress(lastPoint.pointSourceId, point.pointSourceId);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
const xMedian = this.lastXDifferenceMedian[context].get();
|
|
449
|
+
const xDifference = toInt32(point.x - lastPoint.x);
|
|
450
|
+
this.xDifferenceCompressor.compress(xMedian, xDifference, numberOfReturns === 1 ? 1 : 0);
|
|
451
|
+
this.lastXDifferenceMedian[context].add(xDifference);
|
|
452
|
+
|
|
453
|
+
const yMedian = this.lastYDifferenceMedian[context].get();
|
|
454
|
+
const xKbits = Math.min(this.xDifferenceCompressor.k, 20) & ~1;
|
|
455
|
+
const yDifference = toInt32(point.y - lastPoint.y);
|
|
456
|
+
this.yDifferenceCompressor.compress(
|
|
457
|
+
yMedian,
|
|
458
|
+
yDifference,
|
|
459
|
+
(numberOfReturns === 1 ? 1 : 0) + xKbits
|
|
460
|
+
);
|
|
461
|
+
this.lastYDifferenceMedian[context].add(yDifference);
|
|
462
|
+
|
|
463
|
+
const zKbits =
|
|
464
|
+
Math.min((this.xDifferenceCompressor.k + this.yDifferenceCompressor.k) >> 1, 18) & ~1;
|
|
465
|
+
this.zCompressor.compress(
|
|
466
|
+
this.lastHeight[levelContext],
|
|
467
|
+
point.z,
|
|
468
|
+
(numberOfReturns === 1 ? 1 : 0) + zKbits
|
|
469
|
+
);
|
|
470
|
+
this.lastHeight[levelContext] = point.z;
|
|
471
|
+
this.last = {...point};
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/** Encode the legacy LASzip GPS-time item on the shared arithmetic stream. */
|
|
476
|
+
class GpsTime10LayerEncoder {
|
|
477
|
+
private readonly gpsTimeMultiModel: ArithmeticModel;
|
|
478
|
+
private readonly gpsTime0DiffModel: ArithmeticModel;
|
|
479
|
+
private readonly gpsTime: IntegerCompressor;
|
|
480
|
+
private readonly lastGpsTime: number[];
|
|
481
|
+
private readonly lastGpsTimeDifference = [0, 0, 0, 0];
|
|
482
|
+
private readonly multiExtremeCounter = [0, 0, 0, 0];
|
|
483
|
+
private lastGpsSequence = 0;
|
|
484
|
+
private nextGpsSequence = 0;
|
|
485
|
+
|
|
486
|
+
/** Initialize GPS prediction state from the first raw timestamp. */
|
|
487
|
+
constructor(
|
|
488
|
+
private readonly encoder: ArithmeticEncoder,
|
|
489
|
+
firstGpsTime: number
|
|
490
|
+
) {
|
|
491
|
+
this.gpsTimeMultiModel = new ArithmeticModel(516);
|
|
492
|
+
this.gpsTime0DiffModel = new ArithmeticModel(6);
|
|
493
|
+
this.gpsTime = new IntegerCompressor(encoder, 32, 9);
|
|
494
|
+
this.lastGpsTime = [firstGpsTime, 0, 0, 0];
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/** Encode one GPS timestamp after the first raw timestamp. */
|
|
498
|
+
encode(gpsTime: number): void {
|
|
499
|
+
const sequence = this.lastGpsSequence;
|
|
500
|
+
const difference64 = float64BitDifference(gpsTime, this.lastGpsTime[sequence]);
|
|
501
|
+
const difference = Number(BigInt.asIntN(32, difference64));
|
|
502
|
+
const differenceFits = difference64 === BigInt(difference);
|
|
503
|
+
|
|
504
|
+
if (this.lastGpsTimeDifference[sequence] === 0) {
|
|
505
|
+
if (differenceFits) {
|
|
506
|
+
if (difference === 0) {
|
|
507
|
+
this.encoder.encodeSymbol(this.gpsTime0DiffModel, 0);
|
|
508
|
+
} else {
|
|
509
|
+
this.encoder.encodeSymbol(this.gpsTime0DiffModel, 1);
|
|
510
|
+
this.gpsTime.compress(0, difference, 0);
|
|
511
|
+
this.lastGpsTimeDifference[sequence] = difference;
|
|
512
|
+
this.multiExtremeCounter[sequence] = 0;
|
|
513
|
+
}
|
|
514
|
+
} else if (this.selectSequence(gpsTime, false)) {
|
|
515
|
+
this.encode(gpsTime);
|
|
516
|
+
return;
|
|
517
|
+
} else {
|
|
518
|
+
this.encoder.encodeSymbol(this.gpsTime0DiffModel, 2);
|
|
519
|
+
this.startSequence(gpsTime);
|
|
520
|
+
}
|
|
521
|
+
} else if (differenceFits) {
|
|
522
|
+
const lastDifference = this.lastGpsTimeDifference[sequence];
|
|
523
|
+
const multiplier = quantizeFloat32(difference, lastDifference);
|
|
524
|
+
if (multiplier === 1) {
|
|
525
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, 1);
|
|
526
|
+
this.gpsTime.compress(lastDifference, difference, 1);
|
|
527
|
+
this.multiExtremeCounter[sequence] = 0;
|
|
528
|
+
} else if (multiplier > 0 && multiplier < GPS_TIME_MULTI) {
|
|
529
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, multiplier);
|
|
530
|
+
this.gpsTime.compress(
|
|
531
|
+
toInt32(multiplier * lastDifference),
|
|
532
|
+
difference,
|
|
533
|
+
multiplier < 10 ? 2 : 3
|
|
534
|
+
);
|
|
535
|
+
} else if (multiplier >= GPS_TIME_MULTI) {
|
|
536
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, GPS_TIME_MULTI);
|
|
537
|
+
this.gpsTime.compress(toInt32(GPS_TIME_MULTI * lastDifference), difference, 4);
|
|
538
|
+
this.recordExtremeDifference(sequence, difference);
|
|
539
|
+
} else if (multiplier < 0 && multiplier > GPS_TIME_MULTI_MINUS) {
|
|
540
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, GPS_TIME_MULTI - multiplier);
|
|
541
|
+
this.gpsTime.compress(toInt32(multiplier * lastDifference), difference, 5);
|
|
542
|
+
} else if (multiplier < 0) {
|
|
543
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, GPS_TIME_MULTI - GPS_TIME_MULTI_MINUS);
|
|
544
|
+
this.gpsTime.compress(toInt32(GPS_TIME_MULTI_MINUS * lastDifference), difference, 6);
|
|
545
|
+
this.recordExtremeDifference(sequence, difference);
|
|
546
|
+
} else {
|
|
547
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, 0);
|
|
548
|
+
this.gpsTime.compress(0, difference, 7);
|
|
549
|
+
this.recordExtremeDifference(sequence, difference);
|
|
550
|
+
}
|
|
551
|
+
} else if (this.selectSequence(gpsTime, true)) {
|
|
552
|
+
this.encode(gpsTime);
|
|
553
|
+
return;
|
|
554
|
+
} else {
|
|
555
|
+
this.encoder.encodeSymbol(this.gpsTimeMultiModel, GPS_TIME10_MULTI_CODE_FULL);
|
|
556
|
+
this.startSequence(gpsTime);
|
|
557
|
+
}
|
|
558
|
+
this.lastGpsTime[this.lastGpsSequence] = gpsTime;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
private selectSequence(gpsTime: number, hasLastDifference: boolean): boolean {
|
|
562
|
+
for (let index = 1; index < 4; index++) {
|
|
563
|
+
const sequence = (this.lastGpsSequence + index) & 3;
|
|
564
|
+
const difference = float64BitDifference(gpsTime, this.lastGpsTime[sequence]);
|
|
565
|
+
if (difference === BigInt.asIntN(32, difference)) {
|
|
566
|
+
this.encoder.encodeSymbol(
|
|
567
|
+
hasLastDifference ? this.gpsTimeMultiModel : this.gpsTime0DiffModel,
|
|
568
|
+
hasLastDifference ? GPS_TIME10_MULTI_CODE_FULL + index : index + 2
|
|
569
|
+
);
|
|
570
|
+
this.lastGpsSequence = sequence;
|
|
571
|
+
return true;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
private startSequence(gpsTime: number): void {
|
|
578
|
+
const previousBits = float64ToBigUint64(this.lastGpsTime[this.lastGpsSequence]);
|
|
579
|
+
const nextBits = float64ToBigUint64(gpsTime);
|
|
580
|
+
this.gpsTime.compress(
|
|
581
|
+
Number(BigInt.asIntN(32, previousBits >> 32n)),
|
|
582
|
+
Number(BigInt.asIntN(32, nextBits >> 32n)),
|
|
583
|
+
8
|
|
584
|
+
);
|
|
585
|
+
this.encoder.writeInt(Number(nextBits & 0xffffffffn));
|
|
586
|
+
this.nextGpsSequence = (this.nextGpsSequence + 1) & 3;
|
|
587
|
+
this.lastGpsSequence = this.nextGpsSequence;
|
|
588
|
+
this.lastGpsTimeDifference[this.lastGpsSequence] = 0;
|
|
589
|
+
this.multiExtremeCounter[this.lastGpsSequence] = 0;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
private recordExtremeDifference(sequence: number, difference: number): void {
|
|
593
|
+
this.multiExtremeCounter[sequence]++;
|
|
594
|
+
if (this.multiExtremeCounter[sequence] > 3) {
|
|
595
|
+
this.multiExtremeCounter[sequence] = 0;
|
|
596
|
+
this.lastGpsTimeDifference[sequence] = difference;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/** Encode the legacy LASzip RGB item on the shared arithmetic stream. */
|
|
602
|
+
class RGB10LayerEncoder {
|
|
603
|
+
private readonly usedModel = new ArithmeticModel(128);
|
|
604
|
+
private readonly differenceModels = createModels(6, 256);
|
|
605
|
+
private red: number;
|
|
606
|
+
private green: number;
|
|
607
|
+
private blue: number;
|
|
608
|
+
|
|
609
|
+
/** Initialize RGB prediction state from the first raw color. */
|
|
610
|
+
constructor(
|
|
611
|
+
private readonly encoder: ArithmeticEncoder,
|
|
612
|
+
firstColor: Rgb14
|
|
613
|
+
) {
|
|
614
|
+
this.red = firstColor.red;
|
|
615
|
+
this.green = firstColor.green;
|
|
616
|
+
this.blue = firstColor.blue;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/** Encode one RGB value after the first raw value. */
|
|
620
|
+
encode(color: Rgb14): void {
|
|
621
|
+
const lastRed = this.red;
|
|
622
|
+
const lastGreen = this.green;
|
|
623
|
+
const lastBlue = this.blue;
|
|
624
|
+
let symbol =
|
|
625
|
+
((color.red & 0xff) !== (lastRed & 0xff) ? 1 : 0) |
|
|
626
|
+
((color.red & 0xff00) !== (lastRed & 0xff00) ? 2 : 0) |
|
|
627
|
+
((color.green & 0xff) !== (lastGreen & 0xff) ? 4 : 0) |
|
|
628
|
+
((color.green & 0xff00) !== (lastGreen & 0xff00) ? 8 : 0) |
|
|
629
|
+
((color.blue & 0xff) !== (lastBlue & 0xff) ? 16 : 0) |
|
|
630
|
+
((color.blue & 0xff00) !== (lastBlue & 0xff00) ? 32 : 0);
|
|
631
|
+
if (
|
|
632
|
+
(color.red & 0xff) !== (color.green & 0xff) ||
|
|
633
|
+
(color.red & 0xff) !== (color.blue & 0xff) ||
|
|
634
|
+
(color.red & 0xff00) !== (color.green & 0xff00) ||
|
|
635
|
+
(color.red & 0xff00) !== (color.blue & 0xff00)
|
|
636
|
+
) {
|
|
637
|
+
symbol |= 64;
|
|
638
|
+
}
|
|
639
|
+
this.encoder.encodeSymbol(this.usedModel, symbol);
|
|
640
|
+
|
|
641
|
+
let lowDifference = 0;
|
|
642
|
+
let highDifference = 0;
|
|
643
|
+
if (symbol & 1) {
|
|
644
|
+
lowDifference = (color.red & 0xff) - (lastRed & 0xff);
|
|
645
|
+
this.encoder.encodeSymbol(this.differenceModels[0], foldUint8(lowDifference));
|
|
646
|
+
}
|
|
647
|
+
if (symbol & 2) {
|
|
648
|
+
highDifference = (color.red >> 8) - (lastRed >> 8);
|
|
649
|
+
this.encoder.encodeSymbol(this.differenceModels[1], foldUint8(highDifference));
|
|
650
|
+
}
|
|
651
|
+
if (symbol & 64) {
|
|
652
|
+
if (symbol & 4) {
|
|
653
|
+
this.encoder.encodeSymbol(
|
|
654
|
+
this.differenceModels[2],
|
|
655
|
+
foldUint8((color.green & 0xff) - clampUint8(lowDifference + (lastGreen & 0xff)))
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
if (symbol & 16) {
|
|
659
|
+
lowDifference = Math.trunc((lowDifference + (color.green & 0xff) - (lastGreen & 0xff)) / 2);
|
|
660
|
+
this.encoder.encodeSymbol(
|
|
661
|
+
this.differenceModels[4],
|
|
662
|
+
foldUint8((color.blue & 0xff) - clampUint8(lowDifference + (lastBlue & 0xff)))
|
|
663
|
+
);
|
|
664
|
+
}
|
|
665
|
+
if (symbol & 8) {
|
|
666
|
+
this.encoder.encodeSymbol(
|
|
667
|
+
this.differenceModels[3],
|
|
668
|
+
foldUint8((color.green >> 8) - clampUint8(highDifference + (lastGreen >> 8)))
|
|
669
|
+
);
|
|
670
|
+
}
|
|
671
|
+
if (symbol & 32) {
|
|
672
|
+
highDifference = Math.trunc((highDifference + (color.green >> 8) - (lastGreen >> 8)) / 2);
|
|
673
|
+
this.encoder.encodeSymbol(
|
|
674
|
+
this.differenceModels[5],
|
|
675
|
+
foldUint8((color.blue >> 8) - clampUint8(highDifference + (lastBlue >> 8)))
|
|
676
|
+
);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
this.red = color.red;
|
|
680
|
+
this.green = color.green;
|
|
681
|
+
this.blue = color.blue;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
type WavePacket13 = {
|
|
686
|
+
/** Waveform descriptor table index. */
|
|
687
|
+
descriptorIndex: number;
|
|
688
|
+
/** Byte offset of the waveform packet in the external waveform data. */
|
|
689
|
+
offset: bigint;
|
|
690
|
+
/** Waveform packet byte length. */
|
|
691
|
+
packetSize: number;
|
|
692
|
+
/** Raw IEEE-754 bits for the return-point location. */
|
|
693
|
+
returnPointBits: number;
|
|
694
|
+
/** Raw IEEE-754 bits for the waveform X vector component. */
|
|
695
|
+
xBits: number;
|
|
696
|
+
/** Raw IEEE-754 bits for the waveform Y vector component. */
|
|
697
|
+
yBits: number;
|
|
698
|
+
/** Raw IEEE-754 bits for the waveform Z vector component. */
|
|
699
|
+
zBits: number;
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
/** Encode the legacy LASzip waveform packet reference item. */
|
|
703
|
+
class WavePacket13LayerEncoder {
|
|
704
|
+
private readonly descriptorModel: ArithmeticModel;
|
|
705
|
+
private readonly offsetDifferenceModels: ArithmeticModel[];
|
|
706
|
+
private readonly offsetDifferenceCompressor: IntegerCompressor;
|
|
707
|
+
private readonly packetSizeCompressor: IntegerCompressor;
|
|
708
|
+
private readonly returnPointCompressor: IntegerCompressor;
|
|
709
|
+
private readonly vectorCompressor: IntegerCompressor;
|
|
710
|
+
private last: WavePacket13;
|
|
711
|
+
private lastOffsetDifference = 0;
|
|
712
|
+
private lastOffsetDifferenceSymbol = 0;
|
|
713
|
+
|
|
714
|
+
/** Initialize waveform prediction state from the first raw packet reference. */
|
|
715
|
+
constructor(
|
|
716
|
+
private readonly encoder: ArithmeticEncoder,
|
|
717
|
+
firstPacket: WavePacket13
|
|
718
|
+
) {
|
|
719
|
+
this.descriptorModel = new ArithmeticModel(256);
|
|
720
|
+
this.offsetDifferenceModels = createModels(4, 4);
|
|
721
|
+
this.offsetDifferenceCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
722
|
+
this.packetSizeCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
723
|
+
this.returnPointCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
724
|
+
this.vectorCompressor = new IntegerCompressor(encoder, 32, 3);
|
|
725
|
+
this.last = {...firstPacket};
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/** Encode one waveform packet reference after the first raw item. */
|
|
729
|
+
encode(packet: WavePacket13): void {
|
|
730
|
+
const last = this.last;
|
|
731
|
+
this.encoder.encodeSymbol(this.descriptorModel, packet.descriptorIndex);
|
|
732
|
+
let offsetDifferenceSymbol = 0;
|
|
733
|
+
if (packet.offset === last.offset) {
|
|
734
|
+
offsetDifferenceSymbol = 0;
|
|
735
|
+
} else if (packet.offset === last.offset + BigInt(last.packetSize)) {
|
|
736
|
+
offsetDifferenceSymbol = 1;
|
|
737
|
+
} else {
|
|
738
|
+
const difference = BigInt.asIntN(64, packet.offset - last.offset);
|
|
739
|
+
if (difference === BigInt.asIntN(32, difference)) {
|
|
740
|
+
offsetDifferenceSymbol = 2;
|
|
741
|
+
} else {
|
|
742
|
+
offsetDifferenceSymbol = 3;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
this.encoder.encodeSymbol(
|
|
746
|
+
this.offsetDifferenceModels[this.lastOffsetDifferenceSymbol],
|
|
747
|
+
offsetDifferenceSymbol
|
|
748
|
+
);
|
|
749
|
+
this.lastOffsetDifferenceSymbol = offsetDifferenceSymbol;
|
|
750
|
+
if (offsetDifferenceSymbol === 2) {
|
|
751
|
+
const difference = Number(BigInt.asIntN(32, packet.offset - last.offset));
|
|
752
|
+
this.offsetDifferenceCompressor.compress(this.lastOffsetDifference, difference, 0);
|
|
753
|
+
this.lastOffsetDifference = difference;
|
|
754
|
+
}
|
|
755
|
+
if (offsetDifferenceSymbol === 3) {
|
|
756
|
+
this.encoder.writeInt(Number(packet.offset & 0xffffffffn));
|
|
757
|
+
this.encoder.writeInt(Number(packet.offset >> 32n));
|
|
758
|
+
}
|
|
759
|
+
this.packetSizeCompressor.compress(last.packetSize, packet.packetSize, 0);
|
|
760
|
+
this.returnPointCompressor.compress(last.returnPointBits, packet.returnPointBits, 0);
|
|
761
|
+
this.vectorCompressor.compress(last.xBits, packet.xBits, 0);
|
|
762
|
+
this.vectorCompressor.compress(last.yBits, packet.yBits, 1);
|
|
763
|
+
this.vectorCompressor.compress(last.zBits, packet.zBits, 2);
|
|
764
|
+
this.last = {...packet};
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/** Prediction state for one modern waveform scanner-channel context. */
|
|
769
|
+
class WavePacket14Context {
|
|
770
|
+
/** Last packet reference. */
|
|
771
|
+
packet: WavePacket13;
|
|
772
|
+
/** Descriptor arithmetic model. */
|
|
773
|
+
readonly descriptorModel = new ArithmeticModel(256);
|
|
774
|
+
/** Offset selector models. */
|
|
775
|
+
readonly offsetDifferenceModels = createModels(4, 4);
|
|
776
|
+
/** Offset difference compressor. */
|
|
777
|
+
readonly offsetDifferenceCompressor: IntegerCompressor;
|
|
778
|
+
/** Packet-size compressor. */
|
|
779
|
+
readonly packetSizeCompressor: IntegerCompressor;
|
|
780
|
+
/** Return-point compressor. */
|
|
781
|
+
readonly returnPointCompressor: IntegerCompressor;
|
|
782
|
+
/** Vector compressor. */
|
|
783
|
+
readonly vectorCompressor: IntegerCompressor;
|
|
784
|
+
/** Last signed offset difference. */
|
|
785
|
+
lastOffsetDifference = 0;
|
|
786
|
+
/** Last offset selector. */
|
|
787
|
+
lastOffsetDifferenceSymbol = 0;
|
|
788
|
+
/** Whether this context has a packet reference. */
|
|
789
|
+
haveLast = false;
|
|
790
|
+
|
|
791
|
+
/** Initialize one modern waveform prediction context. */
|
|
792
|
+
constructor(encoder: ArithmeticEncoder, packet: WavePacket13) {
|
|
793
|
+
this.packet = {...packet};
|
|
794
|
+
this.offsetDifferenceCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
795
|
+
this.packetSizeCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
796
|
+
this.returnPointCompressor = new IntegerCompressor(encoder, 32, 1);
|
|
797
|
+
this.vectorCompressor = new IntegerCompressor(encoder, 32, 3);
|
|
798
|
+
this.haveLast = true;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/** Encode the LASzip v3/v4 modern waveform packet reference layer. */
|
|
803
|
+
class WavePacket14LayerEncoder {
|
|
804
|
+
private readonly encoder = new ArithmeticEncoder();
|
|
805
|
+
private readonly contexts: Array<WavePacket14Context | null> = new Array(4).fill(null);
|
|
806
|
+
private readonly itemVersion: 3 | 4;
|
|
807
|
+
private lastChannel: number;
|
|
808
|
+
|
|
809
|
+
/** Initialize modern waveform coding from the first packet reference. */
|
|
810
|
+
constructor(firstPacket: WavePacket13, firstChannel: number, itemVersion: 3 | 4) {
|
|
811
|
+
this.itemVersion = itemVersion;
|
|
812
|
+
this.lastChannel = firstChannel;
|
|
813
|
+
this.contexts[firstChannel] = new WavePacket14Context(this.encoder, firstPacket);
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/** Encode one waveform reference using the Point14 scanner-channel context. */
|
|
817
|
+
encode(packet: WavePacket13, scannerChannel: number): void {
|
|
818
|
+
const previousContext = this.contexts[this.lastChannel]!;
|
|
819
|
+
let targetContext = this.contexts[scannerChannel];
|
|
820
|
+
let codingContext = targetContext;
|
|
821
|
+
if (scannerChannel !== this.lastChannel) {
|
|
822
|
+
if (!targetContext) {
|
|
823
|
+
targetContext = new WavePacket14Context(this.encoder, previousContext.packet);
|
|
824
|
+
this.contexts[scannerChannel] = targetContext;
|
|
825
|
+
codingContext = targetContext;
|
|
826
|
+
} else if (this.itemVersion < 4) {
|
|
827
|
+
codingContext = targetContext;
|
|
828
|
+
targetContext = previousContext;
|
|
829
|
+
}
|
|
830
|
+
this.lastChannel = scannerChannel;
|
|
831
|
+
}
|
|
832
|
+
this.encodePacket(codingContext!, targetContext!, packet);
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
/** Finish the independent waveform arithmetic stream. */
|
|
836
|
+
finish(): Uint8Array {
|
|
837
|
+
return this.encoder.finish();
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
private encodePacket(
|
|
841
|
+
codingContext: WavePacket14Context,
|
|
842
|
+
targetContext: WavePacket14Context,
|
|
843
|
+
packet: WavePacket13
|
|
844
|
+
): void {
|
|
845
|
+
const last = targetContext.packet;
|
|
846
|
+
this.encoder.encodeSymbol(codingContext.descriptorModel, packet.descriptorIndex);
|
|
847
|
+
let offsetDifferenceSymbol = 0;
|
|
848
|
+
if (packet.offset === last.offset) {
|
|
849
|
+
offsetDifferenceSymbol = 0;
|
|
850
|
+
} else if (packet.offset === last.offset + BigInt(last.packetSize)) {
|
|
851
|
+
offsetDifferenceSymbol = 1;
|
|
852
|
+
} else if (
|
|
853
|
+
BigInt.asIntN(64, packet.offset - last.offset) ===
|
|
854
|
+
BigInt.asIntN(32, packet.offset - last.offset)
|
|
855
|
+
) {
|
|
856
|
+
offsetDifferenceSymbol = 2;
|
|
857
|
+
} else {
|
|
858
|
+
offsetDifferenceSymbol = 3;
|
|
859
|
+
}
|
|
860
|
+
this.encoder.encodeSymbol(
|
|
861
|
+
codingContext.offsetDifferenceModels[codingContext.lastOffsetDifferenceSymbol],
|
|
862
|
+
offsetDifferenceSymbol
|
|
863
|
+
);
|
|
864
|
+
codingContext.lastOffsetDifferenceSymbol = offsetDifferenceSymbol;
|
|
865
|
+
if (offsetDifferenceSymbol === 2) {
|
|
866
|
+
const difference = Number(BigInt.asIntN(32, packet.offset - last.offset));
|
|
867
|
+
codingContext.offsetDifferenceCompressor.compress(
|
|
868
|
+
codingContext.lastOffsetDifference,
|
|
869
|
+
difference,
|
|
870
|
+
0
|
|
871
|
+
);
|
|
872
|
+
codingContext.lastOffsetDifference = difference;
|
|
873
|
+
} else if (offsetDifferenceSymbol === 3) {
|
|
874
|
+
this.encoder.writeInt(Number(packet.offset & 0xffffffffn));
|
|
875
|
+
this.encoder.writeInt(Number(packet.offset >> 32n));
|
|
876
|
+
}
|
|
877
|
+
codingContext.packetSizeCompressor.compress(last.packetSize, packet.packetSize, 0);
|
|
878
|
+
codingContext.returnPointCompressor.compress(last.returnPointBits, packet.returnPointBits, 0);
|
|
879
|
+
codingContext.vectorCompressor.compress(last.xBits, packet.xBits, 0);
|
|
880
|
+
codingContext.vectorCompressor.compress(last.yBits, packet.yBits, 1);
|
|
881
|
+
codingContext.vectorCompressor.compress(last.zBits, packet.zBits, 2);
|
|
882
|
+
targetContext.packet = {...packet};
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
/** Encode the legacy Byte item that carries Extra Bytes values. */
|
|
887
|
+
class Byte10LayerEncoder {
|
|
888
|
+
private readonly models: ArithmeticModel[];
|
|
889
|
+
private readonly last: Uint8Array;
|
|
890
|
+
|
|
891
|
+
constructor(
|
|
892
|
+
private readonly encoder: ArithmeticEncoder,
|
|
893
|
+
firstValues: Uint8Array
|
|
894
|
+
) {
|
|
895
|
+
this.models = createModels(firstValues.byteLength, 256);
|
|
896
|
+
this.last = new Uint8Array(firstValues);
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
/** Encode one Extra Bytes value after the first raw value. */
|
|
900
|
+
encode(values: Uint8Array): void {
|
|
901
|
+
for (let index = 0; index < values.byteLength; index++) {
|
|
902
|
+
const difference = values[index] - this.last[index];
|
|
903
|
+
this.encoder.encodeSymbol(this.models[index], foldUint8(difference));
|
|
904
|
+
this.last[index] = values[index];
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
type Rgb14 = {
|
|
910
|
+
/** Red channel. */
|
|
911
|
+
red: number;
|
|
912
|
+
/** Green channel. */
|
|
913
|
+
green: number;
|
|
914
|
+
/** Blue channel. */
|
|
915
|
+
blue: number;
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
/** One LASzip item descriptor written into the codec VLR. */
|
|
919
|
+
type LASzipItem = {
|
|
920
|
+
/** LASzip item type identifier. */
|
|
921
|
+
type: number;
|
|
922
|
+
/** Uncompressed item byte length. */
|
|
923
|
+
size: number;
|
|
924
|
+
/** LASzip item codec version, when it differs from the point-family version. */
|
|
925
|
+
version?: 1 | 2 | 3;
|
|
926
|
+
};
|
|
927
|
+
|
|
928
|
+
/** Prediction state for one Point14 scanner channel. */
|
|
929
|
+
class Point14Context {
|
|
930
|
+
/** Changed-value models selected by prior return and GPS state. */
|
|
931
|
+
readonly changedValuesModels = createModels(8, 128);
|
|
932
|
+
/** Scanner-channel delta model. */
|
|
933
|
+
readonly scannerChannelModel = new ArithmeticModel(3);
|
|
934
|
+
/** Return-number delta model used when GPS time is unchanged. */
|
|
935
|
+
readonly returnNumberGpsSameModel = new ArithmeticModel(13);
|
|
936
|
+
/** Lazily allocated number-of-returns models. */
|
|
937
|
+
readonly numberReturnsModels: Array<ArithmeticModel | null> = new Array(16).fill(null);
|
|
938
|
+
/** Lazily allocated return-number models. */
|
|
939
|
+
readonly returnNumberModels: Array<ArithmeticModel | null> = new Array(16).fill(null);
|
|
940
|
+
/** Lazily allocated classification models. */
|
|
941
|
+
readonly classificationModels: Array<ArithmeticModel | null> = new Array(64).fill(null);
|
|
942
|
+
/** Lazily allocated flag models. */
|
|
943
|
+
readonly flagModels: Array<ArithmeticModel | null> = new Array(64).fill(null);
|
|
944
|
+
/** Lazily allocated user-data models. */
|
|
945
|
+
readonly userDataModels: Array<ArithmeticModel | null> = new Array(64).fill(null);
|
|
946
|
+
/** GPS multiplier model. */
|
|
947
|
+
readonly gpsTimeMultiplierModel = new ArithmeticModel(515);
|
|
948
|
+
/** GPS zero-difference model. */
|
|
949
|
+
readonly gpsTimeZeroDifferenceModel = new ArithmeticModel(5);
|
|
950
|
+
/** X difference compressor. */
|
|
951
|
+
readonly xDifferenceCompressor: IntegerCompressor;
|
|
952
|
+
/** Y difference compressor. */
|
|
953
|
+
readonly yDifferenceCompressor: IntegerCompressor;
|
|
954
|
+
/** Z value compressor. */
|
|
955
|
+
readonly zCompressor: IntegerCompressor;
|
|
956
|
+
/** Intensity compressor. */
|
|
957
|
+
readonly intensityCompressor: IntegerCompressor;
|
|
958
|
+
/** Scan-angle compressor. */
|
|
959
|
+
readonly scanAngleCompressor: IntegerCompressor;
|
|
960
|
+
/** Point-source ID compressor. */
|
|
961
|
+
readonly pointSourceIdCompressor: IntegerCompressor;
|
|
962
|
+
/** GPS bit-difference compressor. */
|
|
963
|
+
readonly gpsTimeCompressor: IntegerCompressor;
|
|
964
|
+
/** Last X difference medians by return context. */
|
|
965
|
+
readonly lastXDifferenceMedian = Array.from({length: 12}, () => new StreamingMedian());
|
|
966
|
+
/** Last Y difference medians by return context. */
|
|
967
|
+
readonly lastYDifferenceMedian = Array.from({length: 12}, () => new StreamingMedian());
|
|
968
|
+
/** Last Z value by return level. */
|
|
969
|
+
readonly lastZ: number[];
|
|
970
|
+
/** Last intensity by first/last and GPS context. */
|
|
971
|
+
readonly lastIntensity: number[];
|
|
972
|
+
/** Last GPS time for each interleaved sequence. */
|
|
973
|
+
readonly lastGpsTimeBits: bigint[];
|
|
974
|
+
/** Last signed GPS bit difference for each sequence. */
|
|
975
|
+
readonly lastGpsTimeDifference = new Array<number>(4).fill(0);
|
|
976
|
+
/** Extreme GPS multiplier counters by sequence. */
|
|
977
|
+
readonly gpsTimeExtremeCounter = new Array<number>(4).fill(0);
|
|
978
|
+
/** Current GPS sequence. */
|
|
979
|
+
lastGpsSequence = 0;
|
|
980
|
+
/** Next GPS sequence replacement slot. */
|
|
981
|
+
nextGpsSequence = 0;
|
|
982
|
+
/** Whether the preceding point changed GPS time. */
|
|
983
|
+
gpsTimeChanged = false;
|
|
984
|
+
/** Last point encoded in this scanner channel. */
|
|
985
|
+
readonly last: Point14;
|
|
986
|
+
|
|
987
|
+
/** Create scanner-channel state initialized from a preceding point. */
|
|
988
|
+
constructor(point: Point14, layers: Point14ArithmeticLayers) {
|
|
989
|
+
this.last = {...point};
|
|
990
|
+
this.xDifferenceCompressor = new IntegerCompressor(layers.xy, 32, 2);
|
|
991
|
+
this.yDifferenceCompressor = new IntegerCompressor(layers.xy, 32, 22);
|
|
992
|
+
this.zCompressor = new IntegerCompressor(layers.z, 32, 20);
|
|
993
|
+
this.intensityCompressor = new IntegerCompressor(layers.intensity, 16, 4);
|
|
994
|
+
this.scanAngleCompressor = new IntegerCompressor(layers.scanAngle, 16, 2);
|
|
995
|
+
this.pointSourceIdCompressor = new IntegerCompressor(layers.pointSourceId, 16, 1);
|
|
996
|
+
this.gpsTimeCompressor = new IntegerCompressor(layers.gpsTime, 32, 9);
|
|
997
|
+
this.lastZ = new Array<number>(8).fill(point.z);
|
|
998
|
+
this.lastIntensity = new Array<number>(8).fill(point.intensity);
|
|
999
|
+
this.lastGpsTimeBits = [point.gpsTimeBits, 0n, 0n, 0n];
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
type Point14ArithmeticLayers = {
|
|
1004
|
+
/** Scanner channel, return, X, and Y stream. */
|
|
1005
|
+
xy: ArithmeticEncoder;
|
|
1006
|
+
/** Z coordinate stream. */
|
|
1007
|
+
z: ArithmeticEncoder;
|
|
1008
|
+
/** Classification stream. */
|
|
1009
|
+
classification: ArithmeticEncoder;
|
|
1010
|
+
/** Classification and flight-line flags stream. */
|
|
1011
|
+
flags: ArithmeticEncoder;
|
|
1012
|
+
/** Intensity stream. */
|
|
1013
|
+
intensity: ArithmeticEncoder;
|
|
1014
|
+
/** Scan-angle stream. */
|
|
1015
|
+
scanAngle: ArithmeticEncoder;
|
|
1016
|
+
/** User-data stream. */
|
|
1017
|
+
userData: ArithmeticEncoder;
|
|
1018
|
+
/** Point-source identifier stream. */
|
|
1019
|
+
pointSourceId: ArithmeticEncoder;
|
|
1020
|
+
/** GPS timestamp stream. */
|
|
1021
|
+
gpsTime: ArithmeticEncoder;
|
|
1022
|
+
};
|
|
1023
|
+
|
|
1024
|
+
/** Encoder for the nine layered Point14 streams. */
|
|
1025
|
+
class Point14LayerEncoder {
|
|
1026
|
+
/** Arithmetic encoder for each independent Point14 layer. */
|
|
1027
|
+
private readonly layers: Point14ArithmeticLayers = {
|
|
1028
|
+
xy: new ArithmeticEncoder(),
|
|
1029
|
+
z: new ArithmeticEncoder(),
|
|
1030
|
+
classification: new ArithmeticEncoder(),
|
|
1031
|
+
flags: new ArithmeticEncoder(),
|
|
1032
|
+
intensity: new ArithmeticEncoder(),
|
|
1033
|
+
scanAngle: new ArithmeticEncoder(),
|
|
1034
|
+
userData: new ArithmeticEncoder(),
|
|
1035
|
+
pointSourceId: new ArithmeticEncoder(),
|
|
1036
|
+
gpsTime: new ArithmeticEncoder()
|
|
1037
|
+
};
|
|
1038
|
+
/** Scanner-channel prediction contexts. */
|
|
1039
|
+
private readonly contexts: Array<Point14Context | null> = new Array(4).fill(null);
|
|
1040
|
+
/** Scanner channel used by the previous point. */
|
|
1041
|
+
private currentScannerChannel: number;
|
|
1042
|
+
/** Whether each optional Point14 layer changed in this chunk. */
|
|
1043
|
+
private readonly changed = {
|
|
1044
|
+
classification: false,
|
|
1045
|
+
flags: false,
|
|
1046
|
+
intensity: false,
|
|
1047
|
+
scanAngle: false,
|
|
1048
|
+
userData: false,
|
|
1049
|
+
pointSourceId: false,
|
|
1050
|
+
gpsTime: false
|
|
1051
|
+
};
|
|
1052
|
+
|
|
1053
|
+
/** Initialize Point14 coding from the raw first point. */
|
|
1054
|
+
constructor(firstPoint: Point14) {
|
|
1055
|
+
this.currentScannerChannel = getScannerChannel(firstPoint);
|
|
1056
|
+
this.contexts[this.currentScannerChannel] = new Point14Context(firstPoint, this.layers);
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
/** Encode one subsequent Point14 item and return the LASzip v3 item context. */
|
|
1060
|
+
encode(point: Point14): number {
|
|
1061
|
+
const previousContext = this.contexts[this.currentScannerChannel]!;
|
|
1062
|
+
let lastPoint = previousContext.last;
|
|
1063
|
+
const scannerChannel = getScannerChannel(point);
|
|
1064
|
+
if (scannerChannel !== this.currentScannerChannel && this.contexts[scannerChannel]) {
|
|
1065
|
+
lastPoint = this.contexts[scannerChannel]!.last;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
const pointSourceChanged = point.pointSourceId !== lastPoint.pointSourceId;
|
|
1069
|
+
const gpsTimeChanged = point.gpsTimeBits !== lastPoint.gpsTimeBits;
|
|
1070
|
+
const scanAngleChanged = point.scanAngle !== lastPoint.scanAngle;
|
|
1071
|
+
const lastNumberOfReturns = lastPoint.returns >> 4;
|
|
1072
|
+
const lastReturnNumber = lastPoint.returns & 0x0f;
|
|
1073
|
+
const numberOfReturns = point.returns >> 4;
|
|
1074
|
+
const returnNumber = point.returns & 0x0f;
|
|
1075
|
+
const previousReturnContext =
|
|
1076
|
+
(lastReturnNumber === 1 ? 1 : 0) |
|
|
1077
|
+
(lastReturnNumber >= lastNumberOfReturns ? 2 : 0) |
|
|
1078
|
+
(previousContext.gpsTimeChanged ? 4 : 0);
|
|
1079
|
+
|
|
1080
|
+
let changedValues =
|
|
1081
|
+
(scannerChannel !== this.currentScannerChannel ? 1 << 6 : 0) |
|
|
1082
|
+
(pointSourceChanged ? 1 << 5 : 0) |
|
|
1083
|
+
(gpsTimeChanged ? 1 << 4 : 0) |
|
|
1084
|
+
(scanAngleChanged ? 1 << 3 : 0) |
|
|
1085
|
+
(numberOfReturns !== lastNumberOfReturns ? 1 << 2 : 0);
|
|
1086
|
+
if (returnNumber !== lastReturnNumber) {
|
|
1087
|
+
if (returnNumber === (lastReturnNumber + 1) % 16) {
|
|
1088
|
+
changedValues |= 1;
|
|
1089
|
+
} else if (returnNumber === (lastReturnNumber + 15) % 16) {
|
|
1090
|
+
changedValues |= 2;
|
|
1091
|
+
} else {
|
|
1092
|
+
changedValues |= 3;
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
this.layers.xy.encodeSymbol(
|
|
1096
|
+
previousContext.changedValuesModels[previousReturnContext],
|
|
1097
|
+
changedValues
|
|
1098
|
+
);
|
|
1099
|
+
|
|
1100
|
+
let itemContext = 0;
|
|
1101
|
+
if (scannerChannel !== this.currentScannerChannel) {
|
|
1102
|
+
const scannerDifference = scannerChannel - this.currentScannerChannel;
|
|
1103
|
+
this.layers.xy.encodeSymbol(previousContext.scannerChannelModel, (scannerDifference + 3) % 4);
|
|
1104
|
+
this.contexts[scannerChannel] ||= new Point14Context(previousContext.last, this.layers);
|
|
1105
|
+
this.currentScannerChannel = scannerChannel;
|
|
1106
|
+
itemContext = scannerChannel;
|
|
1107
|
+
lastPoint = this.contexts[scannerChannel]!.last;
|
|
1108
|
+
}
|
|
1109
|
+
const context = this.contexts[this.currentScannerChannel]!;
|
|
1110
|
+
|
|
1111
|
+
if (numberOfReturns !== lastNumberOfReturns) {
|
|
1112
|
+
let model = context.numberReturnsModels[lastNumberOfReturns];
|
|
1113
|
+
if (!model) {
|
|
1114
|
+
model = new ArithmeticModel(16);
|
|
1115
|
+
context.numberReturnsModels[lastNumberOfReturns] = model;
|
|
1116
|
+
}
|
|
1117
|
+
this.layers.xy.encodeSymbol(model, numberOfReturns);
|
|
1118
|
+
}
|
|
1119
|
+
if ((changedValues & 3) === 3) {
|
|
1120
|
+
if (gpsTimeChanged) {
|
|
1121
|
+
let model = context.returnNumberModels[lastReturnNumber];
|
|
1122
|
+
if (!model) {
|
|
1123
|
+
model = new ArithmeticModel(16);
|
|
1124
|
+
context.returnNumberModels[lastReturnNumber] = model;
|
|
1125
|
+
}
|
|
1126
|
+
this.layers.xy.encodeSymbol(model, returnNumber);
|
|
1127
|
+
} else {
|
|
1128
|
+
const returnDifference = returnNumber - lastReturnNumber;
|
|
1129
|
+
this.layers.xy.encodeSymbol(context.returnNumberGpsSameModel, (returnDifference + 14) % 16);
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
const returnMap = NUMBER_RETURN_MAP_6_CONTEXT[numberOfReturns][returnNumber];
|
|
1134
|
+
const returnLevel = NUMBER_RETURN_LEVEL_8_CONTEXT[numberOfReturns][returnNumber];
|
|
1135
|
+
const currentReturnContext =
|
|
1136
|
+
(returnNumber === 1 ? 2 : 0) | (returnNumber >= numberOfReturns ? 1 : 0);
|
|
1137
|
+
const xyContext = (returnMap << 1) | (gpsTimeChanged ? 1 : 0);
|
|
1138
|
+
const xMedian = context.lastXDifferenceMedian[xyContext].get();
|
|
1139
|
+
const xDifference = toInt32(point.x - lastPoint.x);
|
|
1140
|
+
context.xDifferenceCompressor.compress(xMedian, xDifference, numberOfReturns === 1 ? 1 : 0);
|
|
1141
|
+
context.lastXDifferenceMedian[xyContext].add(xDifference);
|
|
1142
|
+
|
|
1143
|
+
const yMedian = context.lastYDifferenceMedian[xyContext].get();
|
|
1144
|
+
const yDifference = toInt32(point.y - lastPoint.y);
|
|
1145
|
+
const yContext =
|
|
1146
|
+
(numberOfReturns === 1 ? 1 : 0) | (Math.min(context.xDifferenceCompressor.k, 20) & ~1);
|
|
1147
|
+
context.yDifferenceCompressor.compress(yMedian, yDifference, yContext);
|
|
1148
|
+
context.lastYDifferenceMedian[xyContext].add(yDifference);
|
|
1149
|
+
|
|
1150
|
+
const zContext =
|
|
1151
|
+
(numberOfReturns === 1 ? 1 : 0) |
|
|
1152
|
+
(Math.min((context.xDifferenceCompressor.k + context.yDifferenceCompressor.k) >> 1, 18) & ~1);
|
|
1153
|
+
context.zCompressor.compress(context.lastZ[returnLevel], point.z, zContext);
|
|
1154
|
+
context.lastZ[returnLevel] = point.z;
|
|
1155
|
+
|
|
1156
|
+
if (point.classification !== lastPoint.classification) {
|
|
1157
|
+
this.changed.classification = true;
|
|
1158
|
+
}
|
|
1159
|
+
const classificationContext =
|
|
1160
|
+
((lastPoint.classification & 0x1f) << 1) | (currentReturnContext === 3 ? 1 : 0);
|
|
1161
|
+
let classificationModel = context.classificationModels[classificationContext];
|
|
1162
|
+
if (!classificationModel) {
|
|
1163
|
+
classificationModel = new ArithmeticModel(256);
|
|
1164
|
+
context.classificationModels[classificationContext] = classificationModel;
|
|
1165
|
+
}
|
|
1166
|
+
this.layers.classification.encodeSymbol(classificationModel, point.classification);
|
|
1167
|
+
|
|
1168
|
+
const lastFlags = mergeFlags(lastPoint);
|
|
1169
|
+
const flags = mergeFlags(point);
|
|
1170
|
+
if (flags !== lastFlags) {
|
|
1171
|
+
this.changed.flags = true;
|
|
1172
|
+
}
|
|
1173
|
+
let flagModel = context.flagModels[lastFlags];
|
|
1174
|
+
if (!flagModel) {
|
|
1175
|
+
flagModel = new ArithmeticModel(64);
|
|
1176
|
+
context.flagModels[lastFlags] = flagModel;
|
|
1177
|
+
}
|
|
1178
|
+
this.layers.flags.encodeSymbol(flagModel, flags);
|
|
1179
|
+
|
|
1180
|
+
if (point.intensity !== lastPoint.intensity) {
|
|
1181
|
+
this.changed.intensity = true;
|
|
1182
|
+
}
|
|
1183
|
+
const intensityIndex = (currentReturnContext << 1) | (gpsTimeChanged ? 1 : 0);
|
|
1184
|
+
context.intensityCompressor.compress(
|
|
1185
|
+
context.lastIntensity[intensityIndex],
|
|
1186
|
+
point.intensity,
|
|
1187
|
+
currentReturnContext
|
|
1188
|
+
);
|
|
1189
|
+
context.lastIntensity[intensityIndex] = point.intensity;
|
|
1190
|
+
|
|
1191
|
+
if (scanAngleChanged) {
|
|
1192
|
+
this.changed.scanAngle = true;
|
|
1193
|
+
context.scanAngleCompressor.compress(
|
|
1194
|
+
lastPoint.scanAngle,
|
|
1195
|
+
point.scanAngle,
|
|
1196
|
+
gpsTimeChanged ? 1 : 0
|
|
1197
|
+
);
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
if (point.userData !== lastPoint.userData) {
|
|
1201
|
+
this.changed.userData = true;
|
|
1202
|
+
}
|
|
1203
|
+
const userDataContext = lastPoint.userData >> 2;
|
|
1204
|
+
let userDataModel = context.userDataModels[userDataContext];
|
|
1205
|
+
if (!userDataModel) {
|
|
1206
|
+
userDataModel = new ArithmeticModel(256);
|
|
1207
|
+
context.userDataModels[userDataContext] = userDataModel;
|
|
1208
|
+
}
|
|
1209
|
+
this.layers.userData.encodeSymbol(userDataModel, point.userData);
|
|
1210
|
+
|
|
1211
|
+
if (pointSourceChanged) {
|
|
1212
|
+
this.changed.pointSourceId = true;
|
|
1213
|
+
context.pointSourceIdCompressor.compress(lastPoint.pointSourceId, point.pointSourceId);
|
|
1214
|
+
}
|
|
1215
|
+
if (gpsTimeChanged) {
|
|
1216
|
+
this.changed.gpsTime = true;
|
|
1217
|
+
this.encodeGpsTime(context, point.gpsTimeBits);
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
copyPoint14(context.last, point);
|
|
1221
|
+
context.gpsTimeChanged = gpsTimeChanged;
|
|
1222
|
+
return itemContext;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
/** Finish Point14 arithmetic streams in LASzip layer order. */
|
|
1226
|
+
finish(): Uint8Array[] {
|
|
1227
|
+
return [
|
|
1228
|
+
this.layers.xy.finish(),
|
|
1229
|
+
this.layers.z.finish(),
|
|
1230
|
+
this.changed.classification ? this.layers.classification.finish() : new Uint8Array(0),
|
|
1231
|
+
this.changed.flags ? this.layers.flags.finish() : new Uint8Array(0),
|
|
1232
|
+
this.changed.intensity ? this.layers.intensity.finish() : new Uint8Array(0),
|
|
1233
|
+
this.changed.scanAngle ? this.layers.scanAngle.finish() : new Uint8Array(0),
|
|
1234
|
+
this.changed.userData ? this.layers.userData.finish() : new Uint8Array(0),
|
|
1235
|
+
this.changed.pointSourceId ? this.layers.pointSourceId.finish() : new Uint8Array(0),
|
|
1236
|
+
this.changed.gpsTime ? this.layers.gpsTime.finish() : new Uint8Array(0)
|
|
1237
|
+
];
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
/** Encode one changed GPS time into the active scanner-channel sequence state. */
|
|
1241
|
+
private encodeGpsTime(context: Point14Context, gpsTimeBits: bigint): void {
|
|
1242
|
+
const sequence = context.lastGpsSequence;
|
|
1243
|
+
const difference64 = BigInt.asIntN(64, gpsTimeBits - context.lastGpsTimeBits[sequence]);
|
|
1244
|
+
const difference = Number(BigInt.asIntN(32, difference64));
|
|
1245
|
+
const differenceFits = difference64 === BigInt(difference);
|
|
1246
|
+
|
|
1247
|
+
if (context.lastGpsTimeDifference[sequence] === 0) {
|
|
1248
|
+
if (differenceFits) {
|
|
1249
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeZeroDifferenceModel, 0);
|
|
1250
|
+
context.gpsTimeCompressor.compress(0, difference, 0);
|
|
1251
|
+
context.lastGpsTimeDifference[sequence] = difference;
|
|
1252
|
+
context.gpsTimeExtremeCounter[sequence] = 0;
|
|
1253
|
+
} else if (this.selectGpsTimeSequence(context, gpsTimeBits, false)) {
|
|
1254
|
+
this.encodeGpsTime(context, gpsTimeBits);
|
|
1255
|
+
return;
|
|
1256
|
+
} else {
|
|
1257
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeZeroDifferenceModel, 1);
|
|
1258
|
+
this.startGpsTimeSequence(context, gpsTimeBits);
|
|
1259
|
+
}
|
|
1260
|
+
} else if (differenceFits) {
|
|
1261
|
+
const lastDifference = context.lastGpsTimeDifference[sequence];
|
|
1262
|
+
const multiplier = quantizeFloat32(difference, lastDifference);
|
|
1263
|
+
if (multiplier === 1) {
|
|
1264
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeMultiplierModel, 1);
|
|
1265
|
+
context.gpsTimeCompressor.compress(lastDifference, difference, 1);
|
|
1266
|
+
context.gpsTimeExtremeCounter[sequence] = 0;
|
|
1267
|
+
} else if (multiplier > 0) {
|
|
1268
|
+
if (multiplier < GPS_TIME_MULTI) {
|
|
1269
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeMultiplierModel, multiplier);
|
|
1270
|
+
context.gpsTimeCompressor.compress(
|
|
1271
|
+
toInt32(multiplier * lastDifference),
|
|
1272
|
+
difference,
|
|
1273
|
+
multiplier < 10 ? 2 : 3
|
|
1274
|
+
);
|
|
1275
|
+
} else {
|
|
1276
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeMultiplierModel, GPS_TIME_MULTI);
|
|
1277
|
+
context.gpsTimeCompressor.compress(
|
|
1278
|
+
toInt32(GPS_TIME_MULTI * lastDifference),
|
|
1279
|
+
difference,
|
|
1280
|
+
4
|
|
1281
|
+
);
|
|
1282
|
+
this.recordExtremeGpsDifference(context, sequence, difference);
|
|
1283
|
+
}
|
|
1284
|
+
} else if (multiplier < 0) {
|
|
1285
|
+
if (multiplier > GPS_TIME_MULTI_MINUS) {
|
|
1286
|
+
this.layers.gpsTime.encodeSymbol(
|
|
1287
|
+
context.gpsTimeMultiplierModel,
|
|
1288
|
+
GPS_TIME_MULTI - multiplier
|
|
1289
|
+
);
|
|
1290
|
+
context.gpsTimeCompressor.compress(toInt32(multiplier * lastDifference), difference, 5);
|
|
1291
|
+
} else {
|
|
1292
|
+
this.layers.gpsTime.encodeSymbol(
|
|
1293
|
+
context.gpsTimeMultiplierModel,
|
|
1294
|
+
GPS_TIME_MULTI - GPS_TIME_MULTI_MINUS
|
|
1295
|
+
);
|
|
1296
|
+
context.gpsTimeCompressor.compress(
|
|
1297
|
+
toInt32(GPS_TIME_MULTI_MINUS * lastDifference),
|
|
1298
|
+
difference,
|
|
1299
|
+
6
|
|
1300
|
+
);
|
|
1301
|
+
this.recordExtremeGpsDifference(context, sequence, difference);
|
|
1302
|
+
}
|
|
1303
|
+
} else {
|
|
1304
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeMultiplierModel, 0);
|
|
1305
|
+
context.gpsTimeCompressor.compress(0, difference, 7);
|
|
1306
|
+
this.recordExtremeGpsDifference(context, sequence, difference);
|
|
1307
|
+
}
|
|
1308
|
+
} else if (this.selectGpsTimeSequence(context, gpsTimeBits, true)) {
|
|
1309
|
+
this.encodeGpsTime(context, gpsTimeBits);
|
|
1310
|
+
return;
|
|
1311
|
+
} else {
|
|
1312
|
+
this.layers.gpsTime.encodeSymbol(context.gpsTimeMultiplierModel, GPS_TIME_MULTI_CODE_FULL);
|
|
1313
|
+
this.startGpsTimeSequence(context, gpsTimeBits);
|
|
1314
|
+
}
|
|
1315
|
+
context.lastGpsTimeBits[context.lastGpsSequence] = gpsTimeBits;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
/** Select an existing GPS sequence whose bit difference fits in 32 bits. */
|
|
1319
|
+
private selectGpsTimeSequence(
|
|
1320
|
+
context: Point14Context,
|
|
1321
|
+
gpsTimeBits: bigint,
|
|
1322
|
+
hasLastDifference: boolean
|
|
1323
|
+
): boolean {
|
|
1324
|
+
for (let index = 1; index < 4; index++) {
|
|
1325
|
+
const sequence = (context.lastGpsSequence + index) & 3;
|
|
1326
|
+
const difference64 = BigInt.asIntN(64, gpsTimeBits - context.lastGpsTimeBits[sequence]);
|
|
1327
|
+
if (difference64 === BigInt.asIntN(32, difference64)) {
|
|
1328
|
+
const symbol = hasLastDifference ? GPS_TIME_MULTI_CODE_FULL + index : index + 1;
|
|
1329
|
+
const model = hasLastDifference
|
|
1330
|
+
? context.gpsTimeMultiplierModel
|
|
1331
|
+
: context.gpsTimeZeroDifferenceModel;
|
|
1332
|
+
this.layers.gpsTime.encodeSymbol(model, symbol);
|
|
1333
|
+
context.lastGpsSequence = sequence;
|
|
1334
|
+
return true;
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
return false;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
/** Start a new GPS sequence by writing upper and lower timestamp words. */
|
|
1341
|
+
private startGpsTimeSequence(context: Point14Context, gpsTimeBits: bigint): void {
|
|
1342
|
+
const previousBits = context.lastGpsTimeBits[context.lastGpsSequence];
|
|
1343
|
+
context.gpsTimeCompressor.compress(
|
|
1344
|
+
Number(BigInt.asIntN(32, previousBits >> 32n)),
|
|
1345
|
+
Number(BigInt.asIntN(32, gpsTimeBits >> 32n)),
|
|
1346
|
+
8
|
|
1347
|
+
);
|
|
1348
|
+
this.layers.gpsTime.writeInt(Number(gpsTimeBits & 0xffffffffn));
|
|
1349
|
+
context.nextGpsSequence = (context.nextGpsSequence + 1) & 3;
|
|
1350
|
+
context.lastGpsSequence = context.nextGpsSequence;
|
|
1351
|
+
context.lastGpsTimeDifference[context.lastGpsSequence] = 0;
|
|
1352
|
+
context.gpsTimeExtremeCounter[context.lastGpsSequence] = 0;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/** Update GPS difference prediction after four consecutive extreme multipliers. */
|
|
1356
|
+
private recordExtremeGpsDifference(
|
|
1357
|
+
context: Point14Context,
|
|
1358
|
+
sequence: number,
|
|
1359
|
+
difference: number
|
|
1360
|
+
): void {
|
|
1361
|
+
context.gpsTimeExtremeCounter[sequence]++;
|
|
1362
|
+
if (context.gpsTimeExtremeCounter[sequence] > 3) {
|
|
1363
|
+
context.lastGpsTimeDifference[sequence] = difference;
|
|
1364
|
+
context.gpsTimeExtremeCounter[sequence] = 0;
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/** RGB prediction state for one LASzip v3 item context. */
|
|
1370
|
+
class RGB14Context {
|
|
1371
|
+
/** Previous red channel. */
|
|
1372
|
+
red: number;
|
|
1373
|
+
/** Previous green channel. */
|
|
1374
|
+
green: number;
|
|
1375
|
+
/** Previous blue channel. */
|
|
1376
|
+
blue: number;
|
|
1377
|
+
/** Changed-byte mask model. */
|
|
1378
|
+
readonly usedModel = new ArithmeticModel(128);
|
|
1379
|
+
/** Byte correction models. */
|
|
1380
|
+
readonly differenceModels = createModels(6, 256);
|
|
1381
|
+
|
|
1382
|
+
/** Initialize an RGB context from a previous color. */
|
|
1383
|
+
constructor(color: Rgb14) {
|
|
1384
|
+
this.red = color.red;
|
|
1385
|
+
this.green = color.green;
|
|
1386
|
+
this.blue = color.blue;
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
/** Encoder for the layered RGB14 stream. */
|
|
1391
|
+
class RGB14LayerEncoder {
|
|
1392
|
+
/** RGB arithmetic stream. */
|
|
1393
|
+
private readonly encoder = new ArithmeticEncoder();
|
|
1394
|
+
/** LASzip v3 item contexts. */
|
|
1395
|
+
private readonly contexts: Array<RGB14Context | null> = new Array(4).fill(null);
|
|
1396
|
+
/** Item context used by the previous point. */
|
|
1397
|
+
private currentContext: number;
|
|
1398
|
+
/** Whether any RGB channel changed. */
|
|
1399
|
+
private changed = false;
|
|
1400
|
+
|
|
1401
|
+
/** Initialize RGB coding from the first point. */
|
|
1402
|
+
constructor(firstColor: Rgb14, firstContext: number) {
|
|
1403
|
+
this.currentContext = firstContext;
|
|
1404
|
+
this.contexts[firstContext] = new RGB14Context(firstColor);
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
/** Encode one RGB item in the Point14-provided item context. */
|
|
1408
|
+
encode(color: Rgb14, itemContext: number): void {
|
|
1409
|
+
let lastContext = this.contexts[this.currentContext]!;
|
|
1410
|
+
if (itemContext !== this.currentContext) {
|
|
1411
|
+
this.currentContext = itemContext;
|
|
1412
|
+
if (!this.contexts[itemContext]) {
|
|
1413
|
+
this.contexts[itemContext] = new RGB14Context({
|
|
1414
|
+
red: lastContext.red,
|
|
1415
|
+
green: lastContext.green,
|
|
1416
|
+
blue: lastContext.blue
|
|
1417
|
+
});
|
|
1418
|
+
lastContext = this.contexts[itemContext]!;
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
const codingContext = this.contexts[this.currentContext]!;
|
|
1422
|
+
let symbol =
|
|
1423
|
+
((color.red & 0xff) !== (lastContext.red & 0xff) ? 1 : 0) |
|
|
1424
|
+
((color.red & 0xff00) !== (lastContext.red & 0xff00) ? 2 : 0) |
|
|
1425
|
+
((color.green & 0xff) !== (lastContext.green & 0xff) ? 4 : 0) |
|
|
1426
|
+
((color.green & 0xff00) !== (lastContext.green & 0xff00) ? 8 : 0) |
|
|
1427
|
+
((color.blue & 0xff) !== (lastContext.blue & 0xff) ? 16 : 0) |
|
|
1428
|
+
((color.blue & 0xff00) !== (lastContext.blue & 0xff00) ? 32 : 0);
|
|
1429
|
+
if (
|
|
1430
|
+
(color.red & 0xff) !== (color.green & 0xff) ||
|
|
1431
|
+
(color.red & 0xff) !== (color.blue & 0xff) ||
|
|
1432
|
+
(color.red & 0xff00) !== (color.green & 0xff00) ||
|
|
1433
|
+
(color.red & 0xff00) !== (color.blue & 0xff00)
|
|
1434
|
+
) {
|
|
1435
|
+
symbol |= 64;
|
|
1436
|
+
}
|
|
1437
|
+
this.encoder.encodeSymbol(codingContext.usedModel, symbol);
|
|
1438
|
+
|
|
1439
|
+
let lowDifference = 0;
|
|
1440
|
+
let highDifference = 0;
|
|
1441
|
+
if (symbol & 1) {
|
|
1442
|
+
lowDifference = (color.red & 0xff) - (lastContext.red & 0xff);
|
|
1443
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[0], foldUint8(lowDifference));
|
|
1444
|
+
}
|
|
1445
|
+
if (symbol & 2) {
|
|
1446
|
+
highDifference = (color.red >> 8) - (lastContext.red >> 8);
|
|
1447
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[1], foldUint8(highDifference));
|
|
1448
|
+
}
|
|
1449
|
+
if (symbol & 64) {
|
|
1450
|
+
if (symbol & 4) {
|
|
1451
|
+
const correction =
|
|
1452
|
+
(color.green & 0xff) - clampUint8(lowDifference + (lastContext.green & 0xff));
|
|
1453
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[2], foldUint8(correction));
|
|
1454
|
+
}
|
|
1455
|
+
if (symbol & 16) {
|
|
1456
|
+
lowDifference = Math.trunc(
|
|
1457
|
+
(lowDifference + (color.green & 0xff) - (lastContext.green & 0xff)) / 2
|
|
1458
|
+
);
|
|
1459
|
+
const correction =
|
|
1460
|
+
(color.blue & 0xff) - clampUint8(lowDifference + (lastContext.blue & 0xff));
|
|
1461
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[4], foldUint8(correction));
|
|
1462
|
+
}
|
|
1463
|
+
if (symbol & 8) {
|
|
1464
|
+
const correction =
|
|
1465
|
+
(color.green >> 8) - clampUint8(highDifference + (lastContext.green >> 8));
|
|
1466
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[3], foldUint8(correction));
|
|
1467
|
+
}
|
|
1468
|
+
if (symbol & 32) {
|
|
1469
|
+
highDifference = Math.trunc(
|
|
1470
|
+
(highDifference + (color.green >> 8) - (lastContext.green >> 8)) / 2
|
|
1471
|
+
);
|
|
1472
|
+
const correction = (color.blue >> 8) - clampUint8(highDifference + (lastContext.blue >> 8));
|
|
1473
|
+
this.encoder.encodeSymbol(codingContext.differenceModels[5], foldUint8(correction));
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
this.changed ||= symbol !== 0;
|
|
1477
|
+
lastContext.red = color.red;
|
|
1478
|
+
lastContext.green = color.green;
|
|
1479
|
+
lastContext.blue = color.blue;
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
/** Finish the RGB stream, or return an omitted unchanged layer. */
|
|
1483
|
+
finish(): Uint8Array {
|
|
1484
|
+
return this.changed ? this.encoder.finish() : new Uint8Array(0);
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
/** NIR prediction state for one LASzip v3 item context. */
|
|
1489
|
+
class NIR14Context {
|
|
1490
|
+
/** Previous NIR value. */
|
|
1491
|
+
value: number;
|
|
1492
|
+
/** Changed-byte mask model. */
|
|
1493
|
+
readonly usedModel = new ArithmeticModel(4);
|
|
1494
|
+
/** Byte correction models. */
|
|
1495
|
+
readonly differenceModels = createModels(2, 256);
|
|
1496
|
+
|
|
1497
|
+
/** Initialize an NIR context from a previous value. */
|
|
1498
|
+
constructor(value: number) {
|
|
1499
|
+
this.value = value;
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
/** Encoder for the layered NIR14 stream. */
|
|
1504
|
+
class NIR14LayerEncoder {
|
|
1505
|
+
/** NIR arithmetic stream. */
|
|
1506
|
+
private readonly encoder = new ArithmeticEncoder();
|
|
1507
|
+
/** LASzip v3 item contexts. */
|
|
1508
|
+
private readonly contexts: Array<NIR14Context | null> = new Array(4).fill(null);
|
|
1509
|
+
/** Item context used by the previous point. */
|
|
1510
|
+
private currentContext: number;
|
|
1511
|
+
/** Whether any NIR byte changed. */
|
|
1512
|
+
private changed = false;
|
|
1513
|
+
|
|
1514
|
+
/** Initialize NIR coding from the first point. */
|
|
1515
|
+
constructor(firstValue: number, firstContext: number) {
|
|
1516
|
+
this.currentContext = firstContext;
|
|
1517
|
+
this.contexts[firstContext] = new NIR14Context(firstValue);
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
/** Encode one NIR item in the Point14-provided item context. */
|
|
1521
|
+
encode(value: number, itemContext: number): void {
|
|
1522
|
+
let lastContext = this.contexts[this.currentContext]!;
|
|
1523
|
+
if (itemContext !== this.currentContext) {
|
|
1524
|
+
this.currentContext = itemContext;
|
|
1525
|
+
if (!this.contexts[itemContext]) {
|
|
1526
|
+
this.contexts[itemContext] = new NIR14Context(lastContext.value);
|
|
1527
|
+
lastContext = this.contexts[itemContext]!;
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
const codingContext = this.contexts[this.currentContext]!;
|
|
1531
|
+
const symbol =
|
|
1532
|
+
((value & 0xff) !== (lastContext.value & 0xff) ? 1 : 0) |
|
|
1533
|
+
((value & 0xff00) !== (lastContext.value & 0xff00) ? 2 : 0);
|
|
1534
|
+
this.encoder.encodeSymbol(codingContext.usedModel, symbol);
|
|
1535
|
+
if (symbol & 1) {
|
|
1536
|
+
this.encoder.encodeSymbol(
|
|
1537
|
+
codingContext.differenceModels[0],
|
|
1538
|
+
foldUint8((value & 0xff) - (lastContext.value & 0xff))
|
|
1539
|
+
);
|
|
1540
|
+
}
|
|
1541
|
+
if (symbol & 2) {
|
|
1542
|
+
this.encoder.encodeSymbol(
|
|
1543
|
+
codingContext.differenceModels[1],
|
|
1544
|
+
foldUint8((value >> 8) - (lastContext.value >> 8))
|
|
1545
|
+
);
|
|
1546
|
+
}
|
|
1547
|
+
this.changed ||= symbol !== 0;
|
|
1548
|
+
lastContext.value = value;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
/** Finish the NIR stream, or return an omitted unchanged layer. */
|
|
1552
|
+
finish(): Uint8Array {
|
|
1553
|
+
return this.changed ? this.encoder.finish() : new Uint8Array(0);
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
/** Extra-byte prediction state for one LASzip v3 item context. */
|
|
1558
|
+
class Byte14Context {
|
|
1559
|
+
/** Previous value for each extra-byte layer. */
|
|
1560
|
+
readonly values: Uint8Array;
|
|
1561
|
+
/** Difference model for each extra-byte layer. */
|
|
1562
|
+
readonly models: ArithmeticModel[];
|
|
1563
|
+
|
|
1564
|
+
/** Initialize an extra-byte context from preceding values. */
|
|
1565
|
+
constructor(values: Uint8Array) {
|
|
1566
|
+
this.values = values.slice();
|
|
1567
|
+
this.models = createModels(values.byteLength, 256);
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
/** Encoder for independent Byte14 extra-byte streams. */
|
|
1572
|
+
class Byte14LayerEncoder {
|
|
1573
|
+
/** Arithmetic stream for each extra-byte offset. */
|
|
1574
|
+
private readonly encoders: ArithmeticEncoder[];
|
|
1575
|
+
/** LASzip v3 item contexts. */
|
|
1576
|
+
private readonly contexts: Array<Byte14Context | null> = new Array(4).fill(null);
|
|
1577
|
+
/** Whether each extra-byte offset changed. */
|
|
1578
|
+
private readonly changed: boolean[];
|
|
1579
|
+
/** Item context used by the previous point. */
|
|
1580
|
+
private currentContext: number;
|
|
1581
|
+
|
|
1582
|
+
/** Initialize extra-byte coding from the first point. */
|
|
1583
|
+
constructor(firstValues: Uint8Array, firstContext: number) {
|
|
1584
|
+
this.encoders = Array.from({length: firstValues.byteLength}, () => new ArithmeticEncoder());
|
|
1585
|
+
this.changed = new Array<boolean>(firstValues.byteLength).fill(false);
|
|
1586
|
+
this.currentContext = firstContext;
|
|
1587
|
+
this.contexts[firstContext] = new Byte14Context(firstValues);
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
/** Encode extra bytes in the Point14-provided item context. */
|
|
1591
|
+
encode(values: Uint8Array, itemContext: number): void {
|
|
1592
|
+
let lastContext = this.contexts[this.currentContext]!;
|
|
1593
|
+
if (itemContext !== this.currentContext) {
|
|
1594
|
+
this.currentContext = itemContext;
|
|
1595
|
+
if (!this.contexts[itemContext]) {
|
|
1596
|
+
this.contexts[itemContext] = new Byte14Context(lastContext.values);
|
|
1597
|
+
lastContext = this.contexts[itemContext]!;
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
const codingContext = this.contexts[this.currentContext]!;
|
|
1601
|
+
for (let index = 0; index < values.byteLength; index++) {
|
|
1602
|
+
const difference = values[index] - lastContext.values[index];
|
|
1603
|
+
this.encoders[index].encodeSymbol(codingContext.models[index], foldUint8(difference));
|
|
1604
|
+
if (difference) {
|
|
1605
|
+
this.changed[index] = true;
|
|
1606
|
+
lastContext.values[index] = values[index];
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
/** Finish changed extra-byte streams and omit unchanged offsets. */
|
|
1612
|
+
finish(): Uint8Array[] {
|
|
1613
|
+
return this.encoders.map((encoder, index) =>
|
|
1614
|
+
this.changed[index] ? encoder.finish() : new Uint8Array(0)
|
|
1615
|
+
);
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
/** Validate that raw records can be represented by the supported LASzip item set. */
|
|
1620
|
+
function validateMetadata(rawBytes: Uint8Array, metadata: LAZChunkMetadata): void {
|
|
1621
|
+
if (
|
|
1622
|
+
[
|
|
1623
|
+
metadata.point10ItemVersion,
|
|
1624
|
+
metadata.gpsTime11ItemVersion,
|
|
1625
|
+
metadata.rgb12ItemVersion,
|
|
1626
|
+
metadata.byteItemVersion
|
|
1627
|
+
].some(version => version !== undefined && version !== 2)
|
|
1628
|
+
) {
|
|
1629
|
+
throw new Error('TypeScript LAZ encoder only supports legacy item version 2');
|
|
1630
|
+
}
|
|
1631
|
+
if (!Number.isInteger(metadata.pointCount) || metadata.pointCount < 0) {
|
|
1632
|
+
throw new Error(`Invalid LAZ chunk point count ${metadata.pointCount}`);
|
|
1633
|
+
}
|
|
1634
|
+
const baseLength = POINT_FORMAT_BASE_LENGTHS[metadata.pointDataRecordFormat];
|
|
1635
|
+
if (!baseLength) {
|
|
1636
|
+
throw new Error(
|
|
1637
|
+
`TypeScript LAZ encoder does not support point format ${metadata.pointDataRecordFormat}`
|
|
1638
|
+
);
|
|
1639
|
+
}
|
|
1640
|
+
if (
|
|
1641
|
+
!Number.isInteger(metadata.pointDataRecordLength) ||
|
|
1642
|
+
metadata.pointDataRecordLength < baseLength
|
|
1643
|
+
) {
|
|
1644
|
+
throw new Error(
|
|
1645
|
+
`Invalid point record length ${metadata.pointDataRecordLength} for point format ${metadata.pointDataRecordFormat}`
|
|
1646
|
+
);
|
|
1647
|
+
}
|
|
1648
|
+
if (metadata.point14ItemVersion !== undefined && metadata.point14ItemVersion !== 3) {
|
|
1649
|
+
throw new Error(`TypeScript LAZ encoder only supports Point14 item version 3`);
|
|
1650
|
+
}
|
|
1651
|
+
if (
|
|
1652
|
+
metadata.pointDataRecordFormat >= 7 &&
|
|
1653
|
+
metadata.rgb14ItemVersion !== undefined &&
|
|
1654
|
+
metadata.rgb14ItemVersion !== 3
|
|
1655
|
+
) {
|
|
1656
|
+
throw new Error(`TypeScript LAZ encoder only supports RGB14 item version 3`);
|
|
1657
|
+
}
|
|
1658
|
+
if (
|
|
1659
|
+
(metadata.pointDataRecordFormat === 9 || metadata.pointDataRecordFormat === 10) &&
|
|
1660
|
+
metadata.wavePacketItemVersion !== undefined &&
|
|
1661
|
+
metadata.wavePacketItemVersion !== 3
|
|
1662
|
+
) {
|
|
1663
|
+
throw new Error(`TypeScript LAZ encoder only supports WavePacket14 item version 3`);
|
|
1664
|
+
}
|
|
1665
|
+
if (
|
|
1666
|
+
metadata.pointDataRecordLength > baseLength &&
|
|
1667
|
+
metadata.byte14ItemVersion !== undefined &&
|
|
1668
|
+
metadata.byte14ItemVersion !== 3
|
|
1669
|
+
) {
|
|
1670
|
+
throw new Error(`TypeScript LAZ encoder only supports Byte14 item version 3`);
|
|
1671
|
+
}
|
|
1672
|
+
const expectedByteLength = metadata.pointCount * metadata.pointDataRecordLength;
|
|
1673
|
+
if (rawBytes.byteLength !== expectedByteLength) {
|
|
1674
|
+
throw new Error(
|
|
1675
|
+
`LAZ chunk input has ${rawBytes.byteLength} bytes; expected ${expectedByteLength}`
|
|
1676
|
+
);
|
|
1677
|
+
}
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
/** Validate one chunk-table entry before integer compression. */
|
|
1681
|
+
function validateChunkTableEntry(chunk: LAZChunkTableEntry): void {
|
|
1682
|
+
if (
|
|
1683
|
+
!Number.isInteger(chunk.pointCount) ||
|
|
1684
|
+
chunk.pointCount <= 0 ||
|
|
1685
|
+
chunk.pointCount > 0xffffffff
|
|
1686
|
+
) {
|
|
1687
|
+
throw new Error(`Invalid LAZ chunk point count ${chunk.pointCount}`);
|
|
1688
|
+
}
|
|
1689
|
+
if (
|
|
1690
|
+
!Number.isInteger(chunk.byteLength) ||
|
|
1691
|
+
chunk.byteLength <= 0 ||
|
|
1692
|
+
chunk.byteLength > 0xffffffff
|
|
1693
|
+
) {
|
|
1694
|
+
throw new Error(`Invalid LAZ chunk byte length ${chunk.byteLength}`);
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
|
|
1698
|
+
/** Return LASzip item descriptors for one supported point format. */
|
|
1699
|
+
function getLASzipItems(
|
|
1700
|
+
pointDataRecordFormat: number,
|
|
1701
|
+
pointDataRecordLength: number
|
|
1702
|
+
): LASzipItem[] {
|
|
1703
|
+
const baseLength = POINT_FORMAT_BASE_LENGTHS[pointDataRecordFormat];
|
|
1704
|
+
if (!baseLength || pointDataRecordLength < baseLength) {
|
|
1705
|
+
throw new Error(
|
|
1706
|
+
`Invalid point record length ${pointDataRecordLength} for point format ${pointDataRecordFormat}`
|
|
1707
|
+
);
|
|
1708
|
+
}
|
|
1709
|
+
if (pointDataRecordFormat <= 5) {
|
|
1710
|
+
const legacyItems: LASzipItem[] = [{type: 6, size: 20}];
|
|
1711
|
+
if (
|
|
1712
|
+
pointDataRecordFormat === 1 ||
|
|
1713
|
+
pointDataRecordFormat === 3 ||
|
|
1714
|
+
pointDataRecordFormat === 4 ||
|
|
1715
|
+
pointDataRecordFormat === 5
|
|
1716
|
+
) {
|
|
1717
|
+
legacyItems.push({type: 7, size: 8});
|
|
1718
|
+
}
|
|
1719
|
+
if (pointDataRecordFormat === 2 || pointDataRecordFormat === 3 || pointDataRecordFormat === 5) {
|
|
1720
|
+
legacyItems.push({type: 8, size: 6});
|
|
1721
|
+
}
|
|
1722
|
+
if (pointDataRecordFormat === 4 || pointDataRecordFormat === 5) {
|
|
1723
|
+
legacyItems.push({type: 9, size: 29, version: 1});
|
|
1724
|
+
}
|
|
1725
|
+
const legacyExtraByteCount = pointDataRecordLength - baseLength;
|
|
1726
|
+
if (legacyExtraByteCount > 0) {
|
|
1727
|
+
legacyItems.push({type: 0, size: legacyExtraByteCount});
|
|
1728
|
+
}
|
|
1729
|
+
return legacyItems;
|
|
1730
|
+
}
|
|
1731
|
+
const items: LASzipItem[] = [{type: 10, size: 30}];
|
|
1732
|
+
if (pointDataRecordFormat === 7) {
|
|
1733
|
+
items.push({type: 11, size: 6});
|
|
1734
|
+
} else if (pointDataRecordFormat === 8) {
|
|
1735
|
+
items.push({type: 12, size: 8});
|
|
1736
|
+
} else if (pointDataRecordFormat === 10) {
|
|
1737
|
+
items.push({type: 12, size: 8});
|
|
1738
|
+
}
|
|
1739
|
+
if (pointDataRecordFormat === 9 || pointDataRecordFormat === 10) {
|
|
1740
|
+
items.push({type: 13, size: 29});
|
|
1741
|
+
}
|
|
1742
|
+
const extraByteCount = pointDataRecordLength - baseLength;
|
|
1743
|
+
if (extraByteCount > 0) {
|
|
1744
|
+
items.push({type: 14, size: extraByteCount});
|
|
1745
|
+
}
|
|
1746
|
+
return items;
|
|
1747
|
+
}
|
|
1748
|
+
|
|
1749
|
+
/** Parse a raw LAS 1.4 Point14 item. */
|
|
1750
|
+
function readPoint14(bytes: Uint8Array, offset: number): Point14 {
|
|
1751
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset + offset, 30);
|
|
1752
|
+
return {
|
|
1753
|
+
x: view.getInt32(0, true),
|
|
1754
|
+
y: view.getInt32(4, true),
|
|
1755
|
+
z: view.getInt32(8, true),
|
|
1756
|
+
intensity: view.getUint16(12, true),
|
|
1757
|
+
returns: view.getUint8(14),
|
|
1758
|
+
flags: view.getUint8(15),
|
|
1759
|
+
classification: view.getUint8(16),
|
|
1760
|
+
userData: view.getUint8(17),
|
|
1761
|
+
scanAngle: view.getInt16(18, true),
|
|
1762
|
+
pointSourceId: view.getUint16(20, true),
|
|
1763
|
+
gpsTimeBits: view.getBigUint64(22, true)
|
|
1764
|
+
};
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
/** Parse a raw legacy LAS Point10 item. */
|
|
1768
|
+
function readPoint10(bytes: Uint8Array, offset: number): Point10 {
|
|
1769
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset + offset, 20);
|
|
1770
|
+
return {
|
|
1771
|
+
x: view.getInt32(0, true),
|
|
1772
|
+
y: view.getInt32(4, true),
|
|
1773
|
+
z: view.getInt32(8, true),
|
|
1774
|
+
intensity: view.getUint16(12, true),
|
|
1775
|
+
bitByte: view.getUint8(14),
|
|
1776
|
+
classification: view.getUint8(15),
|
|
1777
|
+
scanAngleRank: view.getInt8(16),
|
|
1778
|
+
userData: view.getUint8(17),
|
|
1779
|
+
pointSourceId: view.getUint16(18, true)
|
|
1780
|
+
};
|
|
1781
|
+
}
|
|
1782
|
+
|
|
1783
|
+
/** Parse one raw RGB14 item. */
|
|
1784
|
+
function readRgb(bytes: Uint8Array, offset: number): Rgb14 {
|
|
1785
|
+
return {
|
|
1786
|
+
red: readUint16(bytes, offset),
|
|
1787
|
+
green: readUint16(bytes, offset + 2),
|
|
1788
|
+
blue: readUint16(bytes, offset + 4)
|
|
1789
|
+
};
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
/** Parse one raw legacy waveform packet reference. */
|
|
1793
|
+
function readWavePacket(bytes: Uint8Array, offset: number): WavePacket13 {
|
|
1794
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset + offset, 29);
|
|
1795
|
+
return {
|
|
1796
|
+
descriptorIndex: view.getUint8(0),
|
|
1797
|
+
offset: view.getBigUint64(1, true),
|
|
1798
|
+
packetSize: view.getUint32(9, true),
|
|
1799
|
+
returnPointBits: view.getInt32(13, true),
|
|
1800
|
+
xBits: view.getInt32(17, true),
|
|
1801
|
+
yBits: view.getInt32(21, true),
|
|
1802
|
+
zBits: view.getInt32(25, true)
|
|
1803
|
+
};
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
/** Read an IEEE-754 timestamp from a legacy point record. */
|
|
1807
|
+
function readFloat64(bytes: Uint8Array, offset: number): number {
|
|
1808
|
+
return new DataView(bytes.buffer, bytes.byteOffset + offset, 8).getFloat64(0, true);
|
|
1809
|
+
}
|
|
1810
|
+
|
|
1811
|
+
/** Return the signed 64-bit difference between two IEEE-754 timestamps. */
|
|
1812
|
+
function float64BitDifference(value: number, previousValue: number): bigint {
|
|
1813
|
+
return BigInt.asIntN(64, float64ToBigUint64(value) - float64ToBigUint64(previousValue));
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
/** Read the raw IEEE-754 bits of a JavaScript number. */
|
|
1817
|
+
function float64ToBigUint64(value: number): bigint {
|
|
1818
|
+
const buffer = new ArrayBuffer(8);
|
|
1819
|
+
const view = new DataView(buffer);
|
|
1820
|
+
view.setFloat64(0, value, true);
|
|
1821
|
+
return view.getBigUint64(0, true);
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1824
|
+
/** Read one little-endian unsigned 16-bit integer. */
|
|
1825
|
+
function readUint16(bytes: Uint8Array, offset: number): number {
|
|
1826
|
+
return bytes[offset] | (bytes[offset + 1] << 8);
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
/** Copy all Point14 fields without replacing context object identity. */
|
|
1830
|
+
function copyPoint14(target: Point14, source: Point14): void {
|
|
1831
|
+
target.x = source.x;
|
|
1832
|
+
target.y = source.y;
|
|
1833
|
+
target.z = source.z;
|
|
1834
|
+
target.intensity = source.intensity;
|
|
1835
|
+
target.returns = source.returns;
|
|
1836
|
+
target.flags = source.flags;
|
|
1837
|
+
target.classification = source.classification;
|
|
1838
|
+
target.userData = source.userData;
|
|
1839
|
+
target.scanAngle = source.scanAngle;
|
|
1840
|
+
target.pointSourceId = source.pointSourceId;
|
|
1841
|
+
target.gpsTimeBits = source.gpsTimeBits;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
/** Return the scanner-channel bits from a Point14 flags byte. */
|
|
1845
|
+
function getScannerChannel(point: Point14): number {
|
|
1846
|
+
return (point.flags >> 4) & 3;
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
/** Merge Point14 classification and flight-line flags into the LASzip symbol. */
|
|
1850
|
+
function mergeFlags(point: Point14): number {
|
|
1851
|
+
return ((point.flags >> 2) & 0x30) | (point.flags & 0x0f);
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
/** Create uniformly initialized arithmetic models. */
|
|
1855
|
+
function createModels(count: number, symbols: number): ArithmeticModel[] {
|
|
1856
|
+
return Array.from({length: count}, () => new ArithmeticModel(symbols));
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
/** Fold an arbitrary signed byte difference into an unsigned byte. */
|
|
1860
|
+
function foldUint8(value: number): number {
|
|
1861
|
+
return value & 0xff;
|
|
1862
|
+
}
|
|
1863
|
+
|
|
1864
|
+
/** Fold a signed byte correction into the arithmetic symbol range. */
|
|
1865
|
+
function foldInt8(value: number): number {
|
|
1866
|
+
return value & 0xff;
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1869
|
+
/** Clamp a predictor to the unsigned byte range. */
|
|
1870
|
+
function clampUint8(value: number): number {
|
|
1871
|
+
return Math.min(255, Math.max(0, value));
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
/** Match LASzip's float32 multiplier calculation and nearest-integer quantization. */
|
|
1875
|
+
function quantizeFloat32(numerator: number, denominator: number): number {
|
|
1876
|
+
const ratio = Math.fround(Math.fround(numerator) / Math.fround(denominator));
|
|
1877
|
+
return ratio >= 0 ? Math.trunc(ratio + 0.5) : Math.trunc(ratio - 0.5);
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
/** Return a byte view that preserves an input view's byte range. */
|
|
1881
|
+
function toUint8Array(data: ArrayBuffer | ArrayBufferView): Uint8Array {
|
|
1882
|
+
return data instanceof ArrayBuffer
|
|
1883
|
+
? new Uint8Array(data)
|
|
1884
|
+
: new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
/** Concatenate byte arrays without retaining caller-owned backing buffers. */
|
|
1888
|
+
function concatenateUint8Arrays(chunks: Uint8Array[]): Uint8Array {
|
|
1889
|
+
const totalLength = chunks.reduce((length, chunk) => length + chunk.byteLength, 0);
|
|
1890
|
+
const result = new Uint8Array(totalLength);
|
|
1891
|
+
let offset = 0;
|
|
1892
|
+
for (const chunk of chunks) {
|
|
1893
|
+
result.set(chunk, offset);
|
|
1894
|
+
offset += chunk.byteLength;
|
|
1895
|
+
}
|
|
1896
|
+
return result;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1899
|
+
/** Write a fixed-length ASCII string into a DataView. */
|
|
1900
|
+
function writeString(
|
|
1901
|
+
dataView: DataView,
|
|
1902
|
+
byteOffset: number,
|
|
1903
|
+
value: string,
|
|
1904
|
+
byteLength: number
|
|
1905
|
+
): void {
|
|
1906
|
+
for (let characterIndex = 0; characterIndex < byteLength; characterIndex++) {
|
|
1907
|
+
dataView.setUint8(byteOffset + characterIndex, value.charCodeAt(characterIndex) || 0);
|
|
1908
|
+
}
|
|
1909
|
+
}
|