@loaders.gl/pointclouds 0.0.0-stage → 5.0.0-beta.10
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/LAS-README.md +12 -0
- package/LICENSE +24 -0
- package/PCD-README.md +12 -0
- package/PLY-README.md +38 -0
- package/README.md +11 -2
- package/THIRD-PARTY-NOTICES.md +27 -0
- package/dist/dist.dev.js +31514 -0
- package/dist/dist.min.js +54 -0
- package/dist/index.cjs +55 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/las/bundled.cjs +69 -0
- package/dist/las/bundled.cjs.map +7 -0
- package/dist/las/bundled.d.ts +11 -0
- package/dist/las/bundled.d.ts.map +1 -0
- package/dist/las/bundled.js +11 -0
- package/dist/las/bundled.js.map +1 -0
- package/dist/las/index.cjs +75 -0
- package/dist/las/index.cjs.map +7 -0
- package/dist/las/index.d.ts +15 -0
- package/dist/las/index.d.ts.map +1 -0
- package/dist/las/index.js +12 -0
- package/dist/las/index.js.map +1 -0
- package/dist/las/las-copc-loader-types.cjs +49 -0
- package/dist/las/las-copc-loader-types.cjs.map +7 -0
- package/dist/las/las-copc-loader-types.d.ts +67 -0
- package/dist/las/las-copc-loader-types.d.ts.map +1 -0
- package/dist/las/las-copc-loader-types.js +14 -0
- package/dist/las/las-copc-loader-types.js.map +1 -0
- package/dist/las/las-copc-loader.cjs +60 -0
- package/dist/las/las-copc-loader.cjs.map +7 -0
- package/dist/las/las-copc-loader.d.ts +39 -0
- package/dist/las/las-copc-loader.d.ts.map +1 -0
- package/dist/las/las-copc-loader.js +45 -0
- package/dist/las/las-copc-loader.js.map +1 -0
- package/dist/las/las-format.cjs +44 -0
- package/dist/las/las-format.cjs.map +7 -0
- package/dist/las/las-format.d.ts +16 -0
- package/dist/las/las-format.d.ts.map +1 -0
- package/dist/las/las-format.js +19 -0
- package/dist/las/las-format.js.map +1 -0
- package/dist/las/las-loader-shared.cjs +84 -0
- package/dist/las/las-loader-shared.cjs.map +7 -0
- package/dist/las/las-loader-shared.d.ts +68 -0
- package/dist/las/las-loader-shared.d.ts.map +1 -0
- package/dist/las/las-loader-shared.js +60 -0
- package/dist/las/las-loader-shared.js.map +1 -0
- package/dist/las/las-loader-types.cjs +51 -0
- package/dist/las/las-loader-types.cjs.map +7 -0
- package/dist/las/las-loader-types.d.ts +77 -0
- package/dist/las/las-loader-types.d.ts.map +1 -0
- package/dist/las/las-loader-types.js +17 -0
- package/dist/las/las-loader-types.js.map +1 -0
- package/dist/las/las-loader.cjs +128 -0
- package/dist/las/las-loader.cjs.map +7 -0
- package/dist/las/las-loader.d.ts +91 -0
- package/dist/las/las-loader.d.ts.map +1 -0
- package/dist/las/las-loader.js +108 -0
- package/dist/las/las-loader.js.map +1 -0
- package/dist/las/las-writer.cjs +1054 -0
- package/dist/las/las-writer.cjs.map +7 -0
- package/dist/las/las-writer.d.ts +70 -0
- package/dist/las/las-writer.d.ts.map +1 -0
- package/dist/las/las-writer.js +992 -0
- package/dist/las/las-writer.js.map +1 -0
- package/dist/las/laz-rs-loader-types.cjs +49 -0
- package/dist/las/laz-rs-loader-types.cjs.map +7 -0
- package/dist/las/laz-rs-loader-types.d.ts +69 -0
- package/dist/las/laz-rs-loader-types.d.ts.map +1 -0
- package/dist/las/laz-rs-loader-types.js +16 -0
- package/dist/las/laz-rs-loader-types.js.map +1 -0
- package/dist/las/laz-rs-loader.cjs +275 -0
- package/dist/las/laz-rs-loader.cjs.map +7 -0
- package/dist/las/laz-rs-loader.d.ts +39 -0
- package/dist/las/laz-rs-loader.d.ts.map +1 -0
- package/dist/las/laz-rs-loader.js +43 -0
- package/dist/las/laz-rs-loader.js.map +1 -0
- package/dist/las/lazperf-loader-types.cjs +49 -0
- package/dist/las/lazperf-loader-types.cjs.map +7 -0
- package/dist/las/lazperf-loader-types.d.ts +71 -0
- package/dist/las/lazperf-loader-types.d.ts.map +1 -0
- package/dist/las/lazperf-loader-types.js +17 -0
- package/dist/las/lazperf-loader-types.js.map +1 -0
- package/dist/las/lazperf-loader.cjs +63 -0
- package/dist/las/lazperf-loader.cjs.map +7 -0
- package/dist/las/lazperf-loader.d.ts +41 -0
- package/dist/las/lazperf-loader.d.ts.map +1 -0
- package/dist/las/lazperf-loader.js +49 -0
- package/dist/las/lazperf-loader.js.map +1 -0
- package/dist/las/lib/copc/parse-las.cjs +177 -0
- package/dist/las/lib/copc/parse-las.cjs.map +7 -0
- package/dist/las/lib/copc/parse-las.d.ts +17 -0
- package/dist/las/lib/copc/parse-las.d.ts.map +1 -0
- package/dist/las/lib/copc/parse-las.js +215 -0
- package/dist/las/lib/copc/parse-las.js.map +1 -0
- package/dist/las/lib/get-las-schema.cjs +67 -0
- package/dist/las/lib/get-las-schema.cjs.map +7 -0
- package/dist/las/lib/get-las-schema.d.ts +16 -0
- package/dist/las/lib/get-las-schema.d.ts.map +1 -0
- package/dist/las/lib/get-las-schema.js +52 -0
- package/dist/las/lib/get-las-schema.js.map +1 -0
- package/dist/las/lib/las-compatibility.cjs +110 -0
- package/dist/las/lib/las-compatibility.cjs.map +7 -0
- package/dist/las/lib/las-compatibility.d.ts +40 -0
- package/dist/las/lib/las-compatibility.d.ts.map +1 -0
- package/dist/las/lib/las-compatibility.js +115 -0
- package/dist/las/lib/las-compatibility.js.map +1 -0
- package/dist/las/lib/las-extra-bytes.cjs +228 -0
- package/dist/las/lib/las-extra-bytes.cjs.map +7 -0
- package/dist/las/lib/las-extra-bytes.d.ts +35 -0
- package/dist/las/lib/las-extra-bytes.d.ts.map +1 -0
- package/dist/las/lib/las-extra-bytes.js +197 -0
- package/dist/las/lib/las-extra-bytes.js.map +1 -0
- package/dist/las/lib/las-types.cjs +19 -0
- package/dist/las/lib/las-types.cjs.map +7 -0
- package/dist/las/lib/las-types.d.ts +194 -0
- package/dist/las/lib/las-types.d.ts.map +1 -0
- package/dist/las/lib/las-types.js +5 -0
- package/dist/las/lib/las-types.js.map +1 -0
- package/dist/las/lib/las-waveform.cjs +196 -0
- package/dist/las/lib/las-waveform.cjs.map +7 -0
- package/dist/las/lib/las-waveform.d.ts +89 -0
- package/dist/las/lib/las-waveform.d.ts.map +1 -0
- package/dist/las/lib/las-waveform.js +193 -0
- package/dist/las/lib/las-waveform.js.map +1 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.cjs +382 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.cjs.map +7 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.d.ts +129 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.js +377 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.js.map +1 -0
- package/dist/las/lib/laz-perf/parse-las.cjs +271 -0
- package/dist/las/lib/laz-perf/parse-las.cjs.map +7 -0
- package/dist/las/lib/laz-perf/parse-las.d.ts +24 -0
- package/dist/las/lib/laz-perf/parse-las.d.ts.map +1 -0
- package/dist/las/lib/laz-perf/parse-las.js +308 -0
- package/dist/las/lib/laz-perf/parse-las.js.map +1 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs +631 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs.map +7 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts +129 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js +414 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.cjs +271 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.cjs.map +7 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.d.ts +24 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.js +308 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.js.map +1 -0
- package/dist/las/lib/typescript/parse-las.cjs +2889 -0
- package/dist/las/lib/typescript/parse-las.cjs.map +7 -0
- package/dist/las/lib/typescript/parse-las.d.ts +39 -0
- package/dist/las/lib/typescript/parse-las.d.ts.map +1 -0
- package/dist/las/lib/typescript/parse-las.js +2703 -0
- package/dist/las/lib/typescript/parse-las.js.map +1 -0
- package/dist/las/libs/laz-perf/laz-perf.cjs +18093 -0
- package/dist/las/libs/laz-perf/laz-perf.cjs.map +7 -0
- package/dist/las/libs/laz-perf/laz-perf.d.ts +2 -0
- package/dist/las/libs/laz-perf/laz-perf.d.ts.map +1 -0
- package/dist/las/libs/laz-perf/laz-perf.js +19003 -0
- package/dist/las/libs/laz-perf/laz-perf.js.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js +442 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
- package/dist/las/unbundled.cjs +69 -0
- package/dist/las/unbundled.cjs.map +7 -0
- package/dist/las/unbundled.d.ts +11 -0
- package/dist/las/unbundled.d.ts.map +1 -0
- package/dist/las/unbundled.js +11 -0
- package/dist/las/unbundled.js.map +1 -0
- package/dist/las/workers/las-worker.cjs +23 -0
- package/dist/las/workers/las-worker.cjs.map +7 -0
- package/dist/las/workers/las-worker.d.ts +2 -0
- package/dist/las/workers/las-worker.d.ts.map +1 -0
- package/dist/las/workers/las-worker.js +23 -0
- package/dist/las/workers/las-worker.js.map +1 -0
- package/dist/las-copc-loader-types.cjs +51 -0
- package/dist/las-copc-loader-types.cjs.map +7 -0
- package/dist/las-copc-loader-types.d.ts +2 -0
- package/dist/las-copc-loader-types.d.ts.map +1 -0
- package/dist/las-copc-loader-types.js +2 -0
- package/dist/las-copc-loader-types.js.map +1 -0
- package/dist/las-copc-loader.cjs +62 -0
- package/dist/las-copc-loader.cjs.map +7 -0
- package/dist/las-copc-loader.d.ts +2 -0
- package/dist/las-copc-loader.d.ts.map +1 -0
- package/dist/las-copc-loader.js +2 -0
- package/dist/las-copc-loader.js.map +1 -0
- package/dist/las-loader-types.cjs +53 -0
- package/dist/las-loader-types.cjs.map +7 -0
- package/dist/las-loader-types.d.ts +2 -0
- package/dist/las-loader-types.d.ts.map +1 -0
- package/dist/las-loader-types.js +2 -0
- package/dist/las-loader-types.js.map +1 -0
- package/dist/las-loader.cjs +130 -0
- package/dist/las-loader.cjs.map +7 -0
- package/dist/las-loader.d.ts +2 -0
- package/dist/las-loader.d.ts.map +1 -0
- package/dist/las-loader.js +2 -0
- package/dist/las-loader.js.map +1 -0
- package/dist/las-worker.js +24024 -0
- package/dist/las-writer.cjs +1056 -0
- package/dist/las-writer.cjs.map +7 -0
- package/dist/las-writer.d.ts +2 -0
- package/dist/las-writer.d.ts.map +1 -0
- package/dist/las-writer.js +2 -0
- package/dist/las-writer.js.map +1 -0
- package/dist/laz-rs-loader-types.cjs +51 -0
- package/dist/laz-rs-loader-types.cjs.map +7 -0
- package/dist/laz-rs-loader-types.d.ts +2 -0
- package/dist/laz-rs-loader-types.d.ts.map +1 -0
- package/dist/laz-rs-loader-types.js +2 -0
- package/dist/laz-rs-loader-types.js.map +1 -0
- package/dist/laz-rs-loader.cjs +277 -0
- package/dist/laz-rs-loader.cjs.map +7 -0
- package/dist/laz-rs-loader.d.ts +2 -0
- package/dist/laz-rs-loader.d.ts.map +1 -0
- package/dist/laz-rs-loader.js +2 -0
- package/dist/laz-rs-loader.js.map +1 -0
- package/dist/lazperf-loader-types.cjs +51 -0
- package/dist/lazperf-loader-types.cjs.map +7 -0
- package/dist/lazperf-loader-types.d.ts +2 -0
- package/dist/lazperf-loader-types.d.ts.map +1 -0
- package/dist/lazperf-loader-types.js +2 -0
- package/dist/lazperf-loader-types.js.map +1 -0
- package/dist/lazperf-loader.cjs +65 -0
- package/dist/lazperf-loader.cjs.map +7 -0
- package/dist/lazperf-loader.d.ts +2 -0
- package/dist/lazperf-loader.d.ts.map +1 -0
- package/dist/lazperf-loader.js +2 -0
- package/dist/lazperf-loader.js.map +1 -0
- package/dist/pcd/bundled.cjs +31 -0
- package/dist/pcd/bundled.cjs.map +7 -0
- package/dist/pcd/bundled.d.ts +3 -0
- package/dist/pcd/bundled.d.ts.map +1 -0
- package/dist/pcd/bundled.js +5 -0
- package/dist/pcd/bundled.js.map +1 -0
- package/dist/pcd/index.cjs +37 -0
- package/dist/pcd/index.cjs.map +7 -0
- package/dist/pcd/index.d.ts +6 -0
- package/dist/pcd/index.d.ts.map +1 -0
- package/dist/pcd/index.js +7 -0
- package/dist/pcd/index.js.map +1 -0
- package/dist/pcd/lib/decompress-lzf.cjs +80 -0
- package/dist/pcd/lib/decompress-lzf.cjs.map +7 -0
- package/dist/pcd/lib/decompress-lzf.d.ts +7 -0
- package/dist/pcd/lib/decompress-lzf.d.ts.map +1 -0
- package/dist/pcd/lib/decompress-lzf.js +62 -0
- package/dist/pcd/lib/decompress-lzf.js.map +1 -0
- package/dist/pcd/lib/get-pcd-schema.cjs +70 -0
- package/dist/pcd/lib/get-pcd-schema.cjs.map +7 -0
- package/dist/pcd/lib/get-pcd-schema.d.ts +10 -0
- package/dist/pcd/lib/get-pcd-schema.d.ts.map +1 -0
- package/dist/pcd/lib/get-pcd-schema.js +53 -0
- package/dist/pcd/lib/get-pcd-schema.js.map +1 -0
- package/dist/pcd/lib/parse-pcd.cjs +354 -0
- package/dist/pcd/lib/parse-pcd.cjs.map +7 -0
- package/dist/pcd/lib/parse-pcd.d.ts +20 -0
- package/dist/pcd/lib/parse-pcd.d.ts.map +1 -0
- package/dist/pcd/lib/parse-pcd.js +341 -0
- package/dist/pcd/lib/parse-pcd.js.map +1 -0
- package/dist/pcd/lib/pcd-types.cjs +19 -0
- package/dist/pcd/lib/pcd-types.cjs.map +7 -0
- package/dist/pcd/lib/pcd-types.d.ts +31 -0
- package/dist/pcd/lib/pcd-types.d.ts.map +1 -0
- package/dist/pcd/lib/pcd-types.js +5 -0
- package/dist/pcd/lib/pcd-types.js.map +1 -0
- package/dist/pcd/pcd-format.cjs +42 -0
- package/dist/pcd/pcd-format.cjs.map +7 -0
- package/dist/pcd/pcd-format.d.ts +16 -0
- package/dist/pcd/pcd-format.d.ts.map +1 -0
- package/dist/pcd/pcd-format.js +19 -0
- package/dist/pcd/pcd-format.js.map +1 -0
- package/dist/pcd/pcd-loader-types.cjs +63 -0
- package/dist/pcd/pcd-loader-types.cjs.map +7 -0
- package/dist/pcd/pcd-loader-types.d.ts +82 -0
- package/dist/pcd/pcd-loader-types.d.ts.map +1 -0
- package/dist/pcd/pcd-loader-types.js +35 -0
- package/dist/pcd/pcd-loader-types.js.map +1 -0
- package/dist/pcd/pcd-loader.cjs +201 -0
- package/dist/pcd/pcd-loader.cjs.map +7 -0
- package/dist/pcd/pcd-loader.d.ts +80 -0
- package/dist/pcd/pcd-loader.d.ts.map +1 -0
- package/dist/pcd/pcd-loader.js +179 -0
- package/dist/pcd/pcd-loader.js.map +1 -0
- package/dist/pcd/pcd-writer.cjs +134 -0
- package/dist/pcd/pcd-writer.cjs.map +7 -0
- package/dist/pcd/pcd-writer.d.ts +38 -0
- package/dist/pcd/pcd-writer.d.ts.map +1 -0
- package/dist/pcd/pcd-writer.js +115 -0
- package/dist/pcd/pcd-writer.js.map +1 -0
- package/dist/pcd/unbundled.cjs +31 -0
- package/dist/pcd/unbundled.cjs.map +7 -0
- package/dist/pcd/unbundled.d.ts +3 -0
- package/dist/pcd/unbundled.d.ts.map +1 -0
- package/dist/pcd/unbundled.js +5 -0
- package/dist/pcd/unbundled.js.map +1 -0
- package/dist/pcd/workers/pcd-worker.cjs +23 -0
- package/dist/pcd/workers/pcd-worker.cjs.map +7 -0
- package/dist/pcd/workers/pcd-worker.d.ts +2 -0
- package/dist/pcd/workers/pcd-worker.d.ts.map +1 -0
- package/dist/pcd/workers/pcd-worker.js +23 -0
- package/dist/pcd/workers/pcd-worker.js.map +1 -0
- package/dist/pcd-loader-types.cjs +65 -0
- package/dist/pcd-loader-types.cjs.map +7 -0
- package/dist/pcd-loader-types.d.ts +2 -0
- package/dist/pcd-loader-types.d.ts.map +1 -0
- package/dist/pcd-loader-types.js +2 -0
- package/dist/pcd-loader-types.js.map +1 -0
- package/dist/pcd-loader.cjs +203 -0
- package/dist/pcd-loader.cjs.map +7 -0
- package/dist/pcd-loader.d.ts +2 -0
- package/dist/pcd-loader.d.ts.map +1 -0
- package/dist/pcd-loader.js +2 -0
- package/dist/pcd-loader.js.map +1 -0
- package/dist/pcd-worker.js +18561 -0
- package/dist/pcd-writer.cjs +136 -0
- package/dist/pcd-writer.cjs.map +7 -0
- package/dist/pcd-writer.d.ts +2 -0
- package/dist/pcd-writer.d.ts.map +1 -0
- package/dist/pcd-writer.js +2 -0
- package/dist/pcd-writer.js.map +1 -0
- package/dist/ply/bundled.cjs +31 -0
- package/dist/ply/bundled.cjs.map +7 -0
- package/dist/ply/bundled.d.ts +3 -0
- package/dist/ply/bundled.d.ts.map +1 -0
- package/dist/ply/bundled.js +5 -0
- package/dist/ply/bundled.js.map +1 -0
- package/dist/ply/index.cjs +37 -0
- package/dist/ply/index.cjs.map +7 -0
- package/dist/ply/index.d.ts +6 -0
- package/dist/ply/index.d.ts.map +1 -0
- package/dist/ply/index.js +8 -0
- package/dist/ply/index.js.map +1 -0
- package/dist/ply/lib/get-ply-schema.cjs +128 -0
- package/dist/ply/lib/get-ply-schema.cjs.map +7 -0
- package/dist/ply/lib/get-ply-schema.d.ts +16 -0
- package/dist/ply/lib/get-ply-schema.d.ts.map +1 -0
- package/dist/ply/lib/get-ply-schema.js +117 -0
- package/dist/ply/lib/get-ply-schema.js.map +1 -0
- package/dist/ply/lib/normalize-ply.cjs +96 -0
- package/dist/ply/lib/normalize-ply.cjs.map +7 -0
- package/dist/ply/lib/normalize-ply.d.ts +8 -0
- package/dist/ply/lib/normalize-ply.d.ts.map +1 -0
- package/dist/ply/lib/normalize-ply.js +89 -0
- package/dist/ply/lib/normalize-ply.js.map +1 -0
- package/dist/ply/lib/parse-ply-arrow.cjs +552 -0
- package/dist/ply/lib/parse-ply-arrow.cjs.map +7 -0
- package/dist/ply/lib/parse-ply-arrow.d.ts +25 -0
- package/dist/ply/lib/parse-ply-arrow.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply-arrow.js +493 -0
- package/dist/ply/lib/parse-ply-arrow.js.map +1 -0
- package/dist/ply/lib/parse-ply-in-batches.cjs +613 -0
- package/dist/ply/lib/parse-ply-in-batches.cjs.map +7 -0
- package/dist/ply/lib/parse-ply-in-batches.d.ts +9 -0
- package/dist/ply/lib/parse-ply-in-batches.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply-in-batches.js +630 -0
- package/dist/ply/lib/parse-ply-in-batches.js.map +1 -0
- package/dist/ply/lib/parse-ply.cjs +758 -0
- package/dist/ply/lib/parse-ply.cjs.map +7 -0
- package/dist/ply/lib/parse-ply.d.ts +69 -0
- package/dist/ply/lib/parse-ply.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply.js +855 -0
- package/dist/ply/lib/parse-ply.js.map +1 -0
- package/dist/ply/lib/ply-types.cjs +19 -0
- package/dist/ply/lib/ply-types.cjs.map +7 -0
- package/dist/ply/lib/ply-types.d.ts +37 -0
- package/dist/ply/lib/ply-types.d.ts.map +1 -0
- package/dist/ply/lib/ply-types.js +2 -0
- package/dist/ply/lib/ply-types.js.map +1 -0
- package/dist/ply/ply-format.cjs +43 -0
- package/dist/ply/ply-format.cjs.map +7 -0
- package/dist/ply/ply-format.d.ts +18 -0
- package/dist/ply/ply-format.d.ts.map +1 -0
- package/dist/ply/ply-format.js +22 -0
- package/dist/ply/ply-format.js.map +1 -0
- package/dist/ply/ply-loader-types.cjs +64 -0
- package/dist/ply/ply-loader-types.cjs.map +7 -0
- package/dist/ply/ply-loader-types.d.ts +88 -0
- package/dist/ply/ply-loader-types.d.ts.map +1 -0
- package/dist/ply/ply-loader-types.js +38 -0
- package/dist/ply/ply-loader-types.js.map +1 -0
- package/dist/ply/ply-loader.cjs +192 -0
- package/dist/ply/ply-loader.cjs.map +7 -0
- package/dist/ply/ply-loader.d.ts +81 -0
- package/dist/ply/ply-loader.d.ts.map +1 -0
- package/dist/ply/ply-loader.js +173 -0
- package/dist/ply/ply-loader.js.map +1 -0
- package/dist/ply/ply-writer.cjs +175 -0
- package/dist/ply/ply-writer.cjs.map +7 -0
- package/dist/ply/ply-writer.d.ts +38 -0
- package/dist/ply/ply-writer.d.ts.map +1 -0
- package/dist/ply/ply-writer.js +140 -0
- package/dist/ply/ply-writer.js.map +1 -0
- package/dist/ply/unbundled.cjs +31 -0
- package/dist/ply/unbundled.cjs.map +7 -0
- package/dist/ply/unbundled.d.ts +3 -0
- package/dist/ply/unbundled.d.ts.map +1 -0
- package/dist/ply/unbundled.js +5 -0
- package/dist/ply/unbundled.js.map +1 -0
- package/dist/ply/workers/ply-worker.cjs +34 -0
- package/dist/ply/workers/ply-worker.cjs.map +7 -0
- package/dist/ply/workers/ply-worker.d.ts +2 -0
- package/dist/ply/workers/ply-worker.d.ts.map +1 -0
- package/dist/ply/workers/ply-worker.js +37 -0
- package/dist/ply/workers/ply-worker.js.map +1 -0
- package/dist/ply-loader-types.cjs +66 -0
- package/dist/ply-loader-types.cjs.map +7 -0
- package/dist/ply-loader-types.d.ts +2 -0
- package/dist/ply-loader-types.d.ts.map +1 -0
- package/dist/ply-loader-types.js +2 -0
- package/dist/ply-loader-types.js.map +1 -0
- package/dist/ply-loader.cjs +194 -0
- package/dist/ply-loader.cjs.map +7 -0
- package/dist/ply-loader.d.ts +2 -0
- package/dist/ply-loader.d.ts.map +1 -0
- package/dist/ply-loader.js +2 -0
- package/dist/ply-loader.js.map +1 -0
- package/dist/ply-worker.js +20962 -0
- package/dist/ply-writer.cjs +177 -0
- package/dist/ply-writer.cjs.map +7 -0
- package/dist/ply-writer.d.ts +2 -0
- package/dist/ply-writer.d.ts.map +1 -0
- package/dist/ply-writer.js +2 -0
- package/dist/ply-writer.js.map +1 -0
- package/package.json +238 -4
- package/src/index.ts +19 -0
- package/src/las/bundled.ts +38 -0
- package/src/las/index.ts +66 -0
- package/src/las/las-copc-loader-types.ts +18 -0
- package/src/las/las-copc-loader.ts +61 -0
- package/src/las/las-format.ts +21 -0
- package/src/las/las-loader-shared.ts +126 -0
- package/src/las/las-loader-types.ts +24 -0
- package/src/las/las-loader.ts +163 -0
- package/src/las/las-writer.ts +1477 -0
- package/src/las/laz-rs-loader-types.ts +21 -0
- package/src/las/laz-rs-loader.ts +53 -0
- package/src/las/lazperf-loader-types.ts +22 -0
- package/src/las/lazperf-loader.ts +65 -0
- package/src/las/lib/LASZIP-LICENSE +202 -0
- package/src/las/lib/LASZIP-NOTICE +4 -0
- package/src/las/lib/copc/parse-las.ts +265 -0
- package/src/las/lib/get-las-schema.ts +55 -0
- package/src/las/lib/las-compatibility.ts +178 -0
- package/src/las/lib/las-extra-bytes.ts +276 -0
- package/src/las/lib/las-types.ts +206 -0
- package/src/las/lib/las-waveform.ts +292 -0
- package/src/las/lib/laz-perf/laslaz-decoder.ts +443 -0
- package/src/las/lib/laz-perf/parse-las.ts +411 -0
- package/src/las/lib/laz-rs-wasm/laslaz-decoder.ts +488 -0
- package/src/las/lib/laz-rs-wasm/parse-las.ts +411 -0
- package/src/las/lib/typescript/parse-las.ts +3862 -0
- package/src/las/libs/laz-perf/laz-perf.ts +20615 -0
- package/src/las/libs/laz-rs-wasm/README.md +5 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +89 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm.js +497 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
- package/src/las/libs/laz-rs-wasm/package.json +25 -0
- package/src/las/unbundled.ts +38 -0
- package/src/las/workers/las-worker.ts +24 -0
- package/src/las-copc-loader-types.ts +1 -0
- package/src/las-copc-loader.ts +1 -0
- package/src/las-loader-types.ts +1 -0
- package/src/las-loader.ts +1 -0
- package/src/las-writer.ts +1 -0
- package/src/laz-rs-loader-types.ts +1 -0
- package/src/laz-rs-loader.ts +1 -0
- package/src/lazperf-loader-types.ts +1 -0
- package/src/lazperf-loader.ts +1 -0
- package/src/pcd/bundled.ts +6 -0
- package/src/pcd/index.ts +9 -0
- package/src/pcd/lib/decompress-lzf.ts +68 -0
- package/src/pcd/lib/get-pcd-schema.ts +66 -0
- package/src/pcd/lib/parse-pcd.ts +474 -0
- package/src/pcd/lib/pcd-types.ts +34 -0
- package/src/pcd/pcd-format.ts +21 -0
- package/src/pcd/pcd-loader-types.ts +52 -0
- package/src/pcd/pcd-loader.ts +247 -0
- package/src/pcd/pcd-writer.ts +156 -0
- package/src/pcd/unbundled.ts +6 -0
- package/src/pcd/workers/pcd-worker.ts +24 -0
- package/src/pcd-loader-types.ts +1 -0
- package/src/pcd-loader.ts +1 -0
- package/src/pcd-writer.ts +1 -0
- package/src/ply/bundled.ts +6 -0
- package/src/ply/index.ts +11 -0
- package/src/ply/lib/get-ply-schema.ts +133 -0
- package/src/ply/lib/normalize-ply.ts +110 -0
- package/src/ply/lib/parse-ply-arrow.ts +676 -0
- package/src/ply/lib/parse-ply-in-batches.ts +832 -0
- package/src/ply/lib/parse-ply.ts +1084 -0
- package/src/ply/lib/ply-types.ts +47 -0
- package/src/ply/ply-format.ts +24 -0
- package/src/ply/ply-loader-types.ts +60 -0
- package/src/ply/ply-loader.ts +255 -0
- package/src/ply/ply-writer.ts +219 -0
- package/src/ply/unbundled.ts +6 -0
- package/src/ply/workers/ply-worker.ts +40 -0
- package/src/ply-loader-types.ts +1 -0
- package/src/ply-loader.ts +1 -0
- package/src/ply-writer.ts +1 -0
- package/third-party-licenses/plasio-LICENSE +21 -0
- package/third-party-licenses/three-LICENSE +21 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Mesh} from '@loaders.gl/core/schema';
|
|
6
|
+
|
|
7
|
+
type BoundingBox = [[number, number, number], [number, number, number]];
|
|
8
|
+
|
|
9
|
+
export type PCDHeader = {
|
|
10
|
+
data: any;
|
|
11
|
+
headerLen: number;
|
|
12
|
+
str: string;
|
|
13
|
+
version: number;
|
|
14
|
+
fields: string[];
|
|
15
|
+
size: number[];
|
|
16
|
+
type: null | string[];
|
|
17
|
+
count: null | number[];
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
viewpoint: null | string;
|
|
21
|
+
points: number;
|
|
22
|
+
offset: {[index: string]: number};
|
|
23
|
+
rowSize: number;
|
|
24
|
+
vertexCount: number;
|
|
25
|
+
boundingBox: BoundingBox;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/** */
|
|
29
|
+
export type PCDMesh = Mesh & {
|
|
30
|
+
loader: 'pcd';
|
|
31
|
+
loaderData: PCDHeader;
|
|
32
|
+
topology: 'point-list';
|
|
33
|
+
mode: 0;
|
|
34
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Format} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* PCD (Point Cloud Data) file format
|
|
9
|
+
*/
|
|
10
|
+
export const PCDFormat = {
|
|
11
|
+
name: 'PCD (Point Cloud Data)',
|
|
12
|
+
id: 'pcd',
|
|
13
|
+
module: 'pointclouds',
|
|
14
|
+
encoding: 'text',
|
|
15
|
+
format: 'pcd',
|
|
16
|
+
extensions: ['pcd'],
|
|
17
|
+
mimeTypes: ['text/plain'],
|
|
18
|
+
category: 'pointcloud',
|
|
19
|
+
text: true,
|
|
20
|
+
binary: true
|
|
21
|
+
} as const satisfies Format;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Table, RecordBatch} from 'apache-arrow';
|
|
6
|
+
import type {Loader, LoaderOptions} from '@loaders.gl/core/loader-utils';
|
|
7
|
+
import type {PCDMesh} from './lib/pcd-types';
|
|
8
|
+
import {PCDFormat} from './pcd-format';
|
|
9
|
+
import {serializeArrowWorkerTable} from '@loaders.gl/core/arrow-worker-transport';
|
|
10
|
+
|
|
11
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
12
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
13
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
14
|
+
|
|
15
|
+
export type PCDLoaderOptions = LoaderOptions & {
|
|
16
|
+
pcd?: {
|
|
17
|
+
/** Output shape. Defaults to a Mesh Arrow table. */
|
|
18
|
+
shape?: 'mesh' | 'arrow';
|
|
19
|
+
/** Color storage format. Defaults to uint8norm for backwards compatibility. */
|
|
20
|
+
colorFormat?: 'uint8norm' | 'float16' | 'float32';
|
|
21
|
+
/** Override the URL to the worker bundle (by default loads from unpkg.com) */
|
|
22
|
+
workerUrl?: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Preloads the parser-bearing PCD loader implementation.
|
|
28
|
+
*/
|
|
29
|
+
async function preload() {
|
|
30
|
+
const {PCDLoaderWithParser} = await import('@loaders.gl/pointclouds/pcd-loader');
|
|
31
|
+
return PCDLoaderWithParser;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Metadata-only worker loader for PCD - Point Cloud Data
|
|
36
|
+
*/
|
|
37
|
+
export const PCDLoader = {
|
|
38
|
+
defaultShape: 'arrow',
|
|
39
|
+
supportsNativeArrow: true,
|
|
40
|
+
...PCDFormat,
|
|
41
|
+
dataType: null as unknown as PCDMesh | Table,
|
|
42
|
+
batchType: null as unknown as PCDMesh | RecordBatch,
|
|
43
|
+
version: VERSION,
|
|
44
|
+
worker: true,
|
|
45
|
+
/** Enables the stateful input/output batch protocol on the built-in worker. */
|
|
46
|
+
workerInBatches: true,
|
|
47
|
+
serializeWorkerResult: serializeArrowWorkerTable,
|
|
48
|
+
options: {
|
|
49
|
+
pcd: {shape: 'arrow', colorFormat: 'uint8norm'}
|
|
50
|
+
},
|
|
51
|
+
preload
|
|
52
|
+
} as const satisfies Loader<PCDMesh | Table, PCDMesh | RecordBatch, PCDLoaderOptions>;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {refineArrowTableBatches, makeArrowMetadataBatch} from '@loaders.gl/core/schema-utils';
|
|
6
|
+
import type {Table, RecordBatch} from 'apache-arrow';
|
|
7
|
+
import type {PCDLoaderOptions} from './pcd-loader-types';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
concatenateArrayBuffersAsync,
|
|
11
|
+
makeTableScanBatch,
|
|
12
|
+
type LoaderWithParser
|
|
13
|
+
} from '@loaders.gl/core/loader-utils';
|
|
14
|
+
import type {ArrowTableBatch, MeshArrowTable} from '@loaders.gl/core/schema';
|
|
15
|
+
import {
|
|
16
|
+
deserializeArrowWorkerTable,
|
|
17
|
+
serializeArrowWorkerTable
|
|
18
|
+
} from '@loaders.gl/core/arrow-worker-transport';
|
|
19
|
+
import {convertMeshToArrowTableWrapper, convertTableToMesh} from '@loaders.gl/core/schema-utils';
|
|
20
|
+
import type {PCDMesh} from './lib/pcd-types';
|
|
21
|
+
import {parsePCD, parsePCDHeader} from './lib/parse-pcd';
|
|
22
|
+
import {PCDLoader as PCDLoaderMetadata} from './pcd-loader-types';
|
|
23
|
+
|
|
24
|
+
const {preload: _PCDLoaderPreload, ...PCDLoaderMetadataWithoutPreload} = PCDLoaderMetadata;
|
|
25
|
+
|
|
26
|
+
type PCDParsedBatch = PCDMesh | ArrowTableBatch;
|
|
27
|
+
|
|
28
|
+
function convertPCDMesh(mesh: PCDMesh, options?: PCDLoaderOptions): PCDMesh | MeshArrowTable {
|
|
29
|
+
const table = convertMeshToArrowTableWrapper(mesh);
|
|
30
|
+
return options?.pcd?.shape === 'mesh'
|
|
31
|
+
? convertPCDTableToMesh(table, mesh)
|
|
32
|
+
: {...table, loader: mesh.loader, loaderData: mesh.loaderData};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Loader for PCD - Point Cloud Data
|
|
37
|
+
*/
|
|
38
|
+
export const PCDColumnLoader = {
|
|
39
|
+
...PCDLoaderMetadataWithoutPreload,
|
|
40
|
+
dataType: null as unknown as PCDMesh | MeshArrowTable,
|
|
41
|
+
batchType: null as unknown as PCDMesh | ArrowTableBatch,
|
|
42
|
+
parse: async (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),
|
|
43
|
+
parseSync: (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),
|
|
44
|
+
parseInBatches: (input, options) =>
|
|
45
|
+
refineArrowTableBatches(parsePCDWithMetadataInBatches(input, options)),
|
|
46
|
+
serializeWorkerResult: serializeArrowWorkerTable,
|
|
47
|
+
deserializeWorkerResult: deserializePCDWorkerResult,
|
|
48
|
+
serializeWorkerBatch: serializeArrowWorkerTable,
|
|
49
|
+
deserializeWorkerBatch: deserializePCDWorkerBatch
|
|
50
|
+
} as const satisfies LoaderWithParser<PCDMesh | MeshArrowTable, PCDParsedBatch, PCDLoaderOptions>;
|
|
51
|
+
|
|
52
|
+
/** Returns a numeric batch size when batching has an explicit row count. */
|
|
53
|
+
function getNumericBatchSize(options?: PCDLoaderOptions): number | undefined {
|
|
54
|
+
const batchSize = options?.core?.batchSize;
|
|
55
|
+
return typeof batchSize === 'number' ? batchSize : undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function* parsePCDASCIIInBatches(
|
|
59
|
+
data: ArrayBuffer,
|
|
60
|
+
options?: PCDLoaderOptions,
|
|
61
|
+
batchSize?: number
|
|
62
|
+
): Iterable<PCDParsedBatch> {
|
|
63
|
+
const textData = new TextDecoder().decode(data);
|
|
64
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
65
|
+
const lines = textData
|
|
66
|
+
.slice(pcdHeader.headerLen)
|
|
67
|
+
.split(/\r?\n/)
|
|
68
|
+
.filter(line => line.trim().length > 0);
|
|
69
|
+
const normalizedBatchSize = batchSize || lines.length || 1;
|
|
70
|
+
|
|
71
|
+
for (let rowIndex = 0; rowIndex < lines.length; rowIndex += normalizedBatchSize) {
|
|
72
|
+
const batchLines = lines.slice(rowIndex, rowIndex + normalizedBatchSize);
|
|
73
|
+
const batchText = `${makePCDHeaderText(pcdHeader, batchLines.length)}${batchLines.join('\n')}\n`;
|
|
74
|
+
yield makePCDBatch(parsePCD(new TextEncoder().encode(batchText).buffer, options), options);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function* parsePCDBinaryInBatches(
|
|
79
|
+
data: ArrayBuffer,
|
|
80
|
+
options?: PCDLoaderOptions,
|
|
81
|
+
batchSize?: number
|
|
82
|
+
): Iterable<PCDParsedBatch> {
|
|
83
|
+
const textData = new TextDecoder().decode(data);
|
|
84
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
85
|
+
const normalizedBatchSize = batchSize || pcdHeader.points || 1;
|
|
86
|
+
const dataBytes = new Uint8Array(data);
|
|
87
|
+
|
|
88
|
+
for (let pointIndex = 0; pointIndex < pcdHeader.points; pointIndex += normalizedBatchSize) {
|
|
89
|
+
const pointCount = Math.min(normalizedBatchSize, pcdHeader.points - pointIndex);
|
|
90
|
+
const headerBytes = new TextEncoder().encode(makePCDHeaderText(pcdHeader, pointCount));
|
|
91
|
+
const rowByteOffset = pcdHeader.headerLen + pointIndex * pcdHeader.rowSize;
|
|
92
|
+
const rowByteLength = pointCount * pcdHeader.rowSize;
|
|
93
|
+
const batchBytes = new Uint8Array(headerBytes.length + rowByteLength);
|
|
94
|
+
batchBytes.set(headerBytes, 0);
|
|
95
|
+
batchBytes.set(
|
|
96
|
+
dataBytes.subarray(rowByteOffset, rowByteOffset + rowByteLength),
|
|
97
|
+
headerBytes.length
|
|
98
|
+
);
|
|
99
|
+
yield makePCDBatch(parsePCD(batchBytes.buffer, options), options);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function makePCDBatch(mesh: PCDMesh, options?: PCDLoaderOptions): PCDParsedBatch {
|
|
104
|
+
const table = convertMeshToArrowTableWrapper(mesh);
|
|
105
|
+
if (options?.pcd?.shape === 'mesh') {
|
|
106
|
+
return convertPCDTableToMesh(table, mesh);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return makeTableScanBatch({
|
|
110
|
+
...table,
|
|
111
|
+
loader: mesh.loader,
|
|
112
|
+
loaderData: mesh.loaderData
|
|
113
|
+
} as MeshArrowTable);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Convert the parser's Arrow table to legacy PCD mesh output. */
|
|
117
|
+
function convertPCDTableToMesh(table: MeshArrowTable, sourceMesh: PCDMesh): PCDMesh {
|
|
118
|
+
return {
|
|
119
|
+
...(convertTableToMesh(table) as PCDMesh),
|
|
120
|
+
loader: sourceMesh.loader,
|
|
121
|
+
loaderData: sourceMesh.loaderData
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function makePCDHeaderText(pcdHeader: any, pointCount: number): string {
|
|
126
|
+
const lines = pcdHeader.str
|
|
127
|
+
.split(/\r?\n/)
|
|
128
|
+
.filter(line => line.trim().length > 0)
|
|
129
|
+
.map(line => {
|
|
130
|
+
if (/^WIDTH\s+/i.test(line)) {
|
|
131
|
+
return `WIDTH ${pointCount}`;
|
|
132
|
+
}
|
|
133
|
+
if (/^HEIGHT\s+/i.test(line)) {
|
|
134
|
+
return 'HEIGHT 1';
|
|
135
|
+
}
|
|
136
|
+
if (/^POINTS\s+/i.test(line)) {
|
|
137
|
+
return `POINTS ${pointCount}`;
|
|
138
|
+
}
|
|
139
|
+
return line;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
if (!lines.some(line => /^POINTS\s+/i.test(line))) {
|
|
143
|
+
const dataLineIndex = lines.findIndex(line => /^DATA\s+/i.test(line));
|
|
144
|
+
lines.splice(dataLineIndex >= 0 ? dataLineIndex : lines.length, 0, `POINTS ${pointCount}`);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return `${lines.join('\n')}\n`;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Hydrates worker columns before reconstructing legacy PCD meshes on the caller. */
|
|
151
|
+
function deserializePCDWorkerResult(
|
|
152
|
+
result: unknown,
|
|
153
|
+
options?: PCDLoaderOptions
|
|
154
|
+
): PCDMesh | MeshArrowTable {
|
|
155
|
+
const table = deserializeArrowWorkerTable(result);
|
|
156
|
+
return options?.pcd?.shape === 'mesh' ? convertPCDTableToMesh(table, table) : table;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Restores the existing PCD batch shape after caller-side hydration. */
|
|
160
|
+
function deserializePCDWorkerBatch(result: unknown, options?: PCDLoaderOptions): PCDParsedBatch {
|
|
161
|
+
return deserializePCDWorkerResult(result, options) as PCDParsedBatch;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Parses PCD batches before shared cumulative metadata refinement. */
|
|
165
|
+
async function* parsePCDWithMetadataInBatches(
|
|
166
|
+
arrayBuffer:
|
|
167
|
+
| AsyncIterable<ArrayBufferLike | ArrayBufferView>
|
|
168
|
+
| Iterable<ArrayBufferLike | ArrayBufferView>,
|
|
169
|
+
options?: PCDLoaderOptions
|
|
170
|
+
): AsyncIterable<PCDParsedBatch> {
|
|
171
|
+
const batchSize = getNumericBatchSize(options);
|
|
172
|
+
const data = await concatenateArrayBuffersAsync(arrayBuffer);
|
|
173
|
+
const textData = new TextDecoder().decode(data);
|
|
174
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
175
|
+
|
|
176
|
+
if (pcdHeader.data === 'ascii') {
|
|
177
|
+
yield* parsePCDASCIIInBatches(data, options, batchSize);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (pcdHeader.data === 'binary') {
|
|
182
|
+
yield* parsePCDBinaryInBatches(data, options, batchSize);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
yield makePCDBatch(parsePCD(data, options), options);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Exposes native Arrow output while retaining the worker's column protocol. */
|
|
190
|
+
export const PCDLoaderWithParser = {
|
|
191
|
+
...PCDColumnLoader,
|
|
192
|
+
dataType: PCDLoaderMetadata.dataType,
|
|
193
|
+
batchType: PCDLoaderMetadata.batchType,
|
|
194
|
+
parse: async (input: ArrayBuffer, options?: PCDLoaderOptions) =>
|
|
195
|
+
unwrapPCDTable(await PCDColumnLoader.parse(input, options)),
|
|
196
|
+
parseSync: (input: ArrayBuffer, options?: PCDLoaderOptions) =>
|
|
197
|
+
unwrapPCDTable(PCDColumnLoader.parseSync(input, options)),
|
|
198
|
+
async *parseInBatches(input, options) {
|
|
199
|
+
for await (const batch of PCDColumnLoader.parseInBatches(input, options)) {
|
|
200
|
+
if (isColumnBatch(batch)) {
|
|
201
|
+
batch.data.schema.metadata.set(
|
|
202
|
+
'loaders.gl.pcd.header',
|
|
203
|
+
JSON.stringify((batch as ArrowTableBatch & {loaderData?: unknown}).loaderData)
|
|
204
|
+
);
|
|
205
|
+
for (const recordBatch of batch.data.batches) {
|
|
206
|
+
recordBatch.schema.metadata.set(
|
|
207
|
+
'loaders.gl.pcd.header',
|
|
208
|
+
batch.data.schema.metadata.get('loaders.gl.pcd.header')!
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
if (batch.data.batches.length) yield* batch.data.batches;
|
|
212
|
+
else yield makeArrowMetadataBatch(batch.data.schema);
|
|
213
|
+
} else yield batch;
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
deserializeWorkerResult: (result: unknown, options?: PCDLoaderOptions) =>
|
|
217
|
+
unwrapPCDTable(PCDColumnLoader.deserializeWorkerResult(result, options)),
|
|
218
|
+
deserializeWorkerBatch(result: unknown, options?: PCDLoaderOptions) {
|
|
219
|
+
const batch = PCDColumnLoader.deserializeWorkerBatch(result, options);
|
|
220
|
+
if (isColumnBatch(batch)) {
|
|
221
|
+
const recordBatch = batch.data.batches[0] ?? makeArrowMetadataBatch(batch.data.schema);
|
|
222
|
+
recordBatch.schema.metadata.set(
|
|
223
|
+
'loaders.gl.pcd.header',
|
|
224
|
+
JSON.stringify((batch as ArrowTableBatch & {loaderData?: unknown}).loaderData)
|
|
225
|
+
);
|
|
226
|
+
return recordBatch;
|
|
227
|
+
}
|
|
228
|
+
return batch;
|
|
229
|
+
}
|
|
230
|
+
} as const satisfies LoaderWithParser<PCDMesh | Table, PCDMesh | RecordBatch, PCDLoaderOptions>;
|
|
231
|
+
|
|
232
|
+
/** Returns the Arrow table with its file metadata or the requested mesh. */
|
|
233
|
+
function unwrapPCDTable(result: PCDMesh | MeshArrowTable): PCDMesh | Table {
|
|
234
|
+
if ('shape' in result && result.shape === 'arrow-table') {
|
|
235
|
+
result.data.schema.metadata.set(
|
|
236
|
+
'loaders.gl.pcd.header',
|
|
237
|
+
JSON.stringify((result as MeshArrowTable & {loaderData?: unknown}).loaderData)
|
|
238
|
+
);
|
|
239
|
+
return result.data;
|
|
240
|
+
}
|
|
241
|
+
return result as PCDMesh;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** Identifies the private Arrow batch envelope. */
|
|
245
|
+
function isColumnBatch(batch: PCDMesh | ArrowTableBatch): batch is ArrowTableBatch {
|
|
246
|
+
return 'shape' in batch && batch.shape === 'arrow-table';
|
|
247
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Table} from 'apache-arrow';
|
|
6
|
+
import type {WriterOptions, WriterWithEncoder} from '@loaders.gl/core/loader-utils';
|
|
7
|
+
import type {Mesh, MeshArrowTable, MeshAttribute} from '@loaders.gl/core/schema';
|
|
8
|
+
import {convertMeshToArrowTableWrapper, convertTableToMesh} from '@loaders.gl/core/schema-utils';
|
|
9
|
+
import {PCDFormat} from './pcd-format';
|
|
10
|
+
|
|
11
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
12
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
13
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
14
|
+
|
|
15
|
+
/** Options for `PCDWriter`. */
|
|
16
|
+
export type PCDWriterOptions = WriterOptions & {
|
|
17
|
+
/** Reserved for future PCD writer options. */
|
|
18
|
+
pcd?: Record<string, never>;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Writer for the PCD point cloud format.
|
|
23
|
+
*/
|
|
24
|
+
export const PCDWriter = {
|
|
25
|
+
...PCDFormat,
|
|
26
|
+
dataType: null as unknown as Mesh | MeshArrowTable | Table,
|
|
27
|
+
batchType: null as never,
|
|
28
|
+
version: VERSION,
|
|
29
|
+
options: {
|
|
30
|
+
pcd: {}
|
|
31
|
+
},
|
|
32
|
+
text: true,
|
|
33
|
+
encode: async (data, options) => encodePCDSync(data, options),
|
|
34
|
+
encodeSync: encodePCDSync,
|
|
35
|
+
encodeTextSync: encodePCD
|
|
36
|
+
} as const satisfies WriterWithEncoder<Mesh | MeshArrowTable | Table, never, PCDWriterOptions>;
|
|
37
|
+
|
|
38
|
+
/** Encode mesh category data as PCD bytes. */
|
|
39
|
+
function encodePCDSync(
|
|
40
|
+
data: Mesh | MeshArrowTable | Table,
|
|
41
|
+
options?: PCDWriterOptions
|
|
42
|
+
): ArrayBuffer {
|
|
43
|
+
const text = encodePCD(data, options);
|
|
44
|
+
return new TextEncoder().encode(text).buffer;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Encode mesh category data as ASCII PCD text. */
|
|
48
|
+
function encodePCD(data: Mesh | MeshArrowTable | Table, options?: PCDWriterOptions): string {
|
|
49
|
+
const mesh = convertTableToMesh(normalizeMeshArrowTable(data));
|
|
50
|
+
const positionAttribute = getRequiredAttribute(mesh, 'POSITION');
|
|
51
|
+
const normalAttribute = mesh.attributes.NORMAL;
|
|
52
|
+
const colorAttribute = mesh.attributes.COLOR_0;
|
|
53
|
+
const vertexCount = positionAttribute.value.length / positionAttribute.size;
|
|
54
|
+
const fieldNames = ['x', 'y', 'z'];
|
|
55
|
+
const fieldSizes = ['4', '4', '4'];
|
|
56
|
+
const fieldTypes = ['F', 'F', 'F'];
|
|
57
|
+
const fieldCounts = ['1', '1', '1'];
|
|
58
|
+
|
|
59
|
+
if (normalAttribute) {
|
|
60
|
+
fieldNames.push('normal_x', 'normal_y', 'normal_z');
|
|
61
|
+
fieldSizes.push('4', '4', '4');
|
|
62
|
+
fieldTypes.push('F', 'F', 'F');
|
|
63
|
+
fieldCounts.push('1', '1', '1');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (colorAttribute) {
|
|
67
|
+
fieldNames.push('rgb');
|
|
68
|
+
fieldSizes.push('4');
|
|
69
|
+
fieldTypes.push('F');
|
|
70
|
+
fieldCounts.push('1');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const lines = [
|
|
74
|
+
'# .PCD v0.7 - Point Cloud Data file generated by loaders.gl',
|
|
75
|
+
'VERSION 0.7',
|
|
76
|
+
`FIELDS ${fieldNames.join(' ')}`,
|
|
77
|
+
`SIZE ${fieldSizes.join(' ')}`,
|
|
78
|
+
`TYPE ${fieldTypes.join(' ')}`,
|
|
79
|
+
`COUNT ${fieldCounts.join(' ')}`,
|
|
80
|
+
`WIDTH ${vertexCount}`,
|
|
81
|
+
'HEIGHT 1',
|
|
82
|
+
'VIEWPOINT 0 0 0 1 0 0 0',
|
|
83
|
+
`POINTS ${vertexCount}`,
|
|
84
|
+
'DATA ascii'
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
for (let vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) {
|
|
88
|
+
const row = [
|
|
89
|
+
getComponent(positionAttribute, vertexIndex, 0),
|
|
90
|
+
getComponent(positionAttribute, vertexIndex, 1),
|
|
91
|
+
getComponent(positionAttribute, vertexIndex, 2)
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
if (normalAttribute) {
|
|
95
|
+
row.push(
|
|
96
|
+
getComponent(normalAttribute, vertexIndex, 0),
|
|
97
|
+
getComponent(normalAttribute, vertexIndex, 1),
|
|
98
|
+
getComponent(normalAttribute, vertexIndex, 2)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (colorAttribute) {
|
|
103
|
+
row.push(getPackedRGB(colorAttribute, vertexIndex));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
lines.push(row.join(' '));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return `${lines.join('\n')}\n`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Return mesh data as a MeshArrowTable, converting plain Mesh data first. */
|
|
113
|
+
function normalizeMeshArrowTable(data: Mesh | MeshArrowTable | Table): MeshArrowTable | Table {
|
|
114
|
+
if (!('attributes' in data)) {
|
|
115
|
+
return data;
|
|
116
|
+
}
|
|
117
|
+
return convertMeshToArrowTableWrapper(data as Mesh);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Return a required mesh attribute or throw a format-specific error. */
|
|
121
|
+
function getRequiredAttribute(mesh: Mesh, attributeName: string): MeshAttribute {
|
|
122
|
+
const attribute = mesh.attributes[attributeName];
|
|
123
|
+
if (!attribute) {
|
|
124
|
+
throw new Error(`PCDWriter: ${attributeName} attribute is required`);
|
|
125
|
+
}
|
|
126
|
+
return attribute;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Return a single attribute component with 0 as the missing component fallback. */
|
|
130
|
+
function getComponent(
|
|
131
|
+
attribute: MeshAttribute,
|
|
132
|
+
vertexIndex: number,
|
|
133
|
+
componentIndex: number
|
|
134
|
+
): number {
|
|
135
|
+
return attribute.value[vertexIndex * attribute.size + componentIndex] || 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Return an RGB value packed into the PCD float convention. */
|
|
139
|
+
function getPackedRGB(attribute: MeshAttribute, vertexIndex: number): number {
|
|
140
|
+
const bytes = new Uint8Array(4);
|
|
141
|
+
bytes[0] = getColorByte(attribute, vertexIndex, 0);
|
|
142
|
+
bytes[1] = getColorByte(attribute, vertexIndex, 1);
|
|
143
|
+
bytes[2] = getColorByte(attribute, vertexIndex, 2);
|
|
144
|
+
return new DataView(bytes.buffer).getFloat32(0, true);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Return one color component as an unsigned byte. */
|
|
148
|
+
function getColorByte(
|
|
149
|
+
attribute: MeshAttribute,
|
|
150
|
+
vertexIndex: number,
|
|
151
|
+
componentIndex: number
|
|
152
|
+
): number {
|
|
153
|
+
const value = getComponent(attribute, vertexIndex, componentIndex);
|
|
154
|
+
const byteValue = attribute.normalized || value <= 1 ? value * 255 : value;
|
|
155
|
+
return Math.max(0, Math.min(255, Math.round(byteValue)));
|
|
156
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {createLoaderWorker} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
import {PCDColumnLoader} from '../pcd-loader';
|
|
7
|
+
|
|
8
|
+
createLoaderWorker({
|
|
9
|
+
...PCDColumnLoader,
|
|
10
|
+
/** Always returns columnar data; legacy mesh conversion runs on the caller. */
|
|
11
|
+
parse(input, options) {
|
|
12
|
+
return PCDColumnLoader.parse(input, {
|
|
13
|
+
...options,
|
|
14
|
+
pcd: {...options?.pcd, shape: 'arrow'}
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
/** Keeps one columnar parser alive for the entire worker input stream. */
|
|
18
|
+
parseInBatches(input, options) {
|
|
19
|
+
return PCDColumnLoader.parseInBatches(input, {
|
|
20
|
+
...options,
|
|
21
|
+
pcd: {...options?.pcd, shape: 'arrow'}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './pcd/pcd-loader-types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './pcd/pcd-loader.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './pcd/pcd-writer.js';
|
package/src/ply/index.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
// PLYLoader
|
|
6
|
+
export {PLYFormat} from './ply-format';
|
|
7
|
+
|
|
8
|
+
export type {PLYLoaderOptions} from './ply-loader-types';
|
|
9
|
+
export {PLYLoader} from './ply-loader-types';
|
|
10
|
+
export type {PLYWriterOptions} from './ply-writer';
|
|
11
|
+
export {PLYWriter} from './ply-writer';
|