@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.
Files changed (511) hide show
  1. package/LAS-README.md +12 -0
  2. package/LICENSE +24 -0
  3. package/PCD-README.md +12 -0
  4. package/PLY-README.md +38 -0
  5. package/README.md +11 -2
  6. package/THIRD-PARTY-NOTICES.md +27 -0
  7. package/dist/dist.dev.js +31514 -0
  8. package/dist/dist.min.js +54 -0
  9. package/dist/index.cjs +55 -0
  10. package/dist/index.cjs.map +7 -0
  11. package/dist/index.d.ts +16 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +13 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/las/bundled.cjs +69 -0
  16. package/dist/las/bundled.cjs.map +7 -0
  17. package/dist/las/bundled.d.ts +11 -0
  18. package/dist/las/bundled.d.ts.map +1 -0
  19. package/dist/las/bundled.js +11 -0
  20. package/dist/las/bundled.js.map +1 -0
  21. package/dist/las/index.cjs +75 -0
  22. package/dist/las/index.cjs.map +7 -0
  23. package/dist/las/index.d.ts +15 -0
  24. package/dist/las/index.d.ts.map +1 -0
  25. package/dist/las/index.js +12 -0
  26. package/dist/las/index.js.map +1 -0
  27. package/dist/las/las-copc-loader-types.cjs +49 -0
  28. package/dist/las/las-copc-loader-types.cjs.map +7 -0
  29. package/dist/las/las-copc-loader-types.d.ts +67 -0
  30. package/dist/las/las-copc-loader-types.d.ts.map +1 -0
  31. package/dist/las/las-copc-loader-types.js +14 -0
  32. package/dist/las/las-copc-loader-types.js.map +1 -0
  33. package/dist/las/las-copc-loader.cjs +60 -0
  34. package/dist/las/las-copc-loader.cjs.map +7 -0
  35. package/dist/las/las-copc-loader.d.ts +39 -0
  36. package/dist/las/las-copc-loader.d.ts.map +1 -0
  37. package/dist/las/las-copc-loader.js +45 -0
  38. package/dist/las/las-copc-loader.js.map +1 -0
  39. package/dist/las/las-format.cjs +44 -0
  40. package/dist/las/las-format.cjs.map +7 -0
  41. package/dist/las/las-format.d.ts +16 -0
  42. package/dist/las/las-format.d.ts.map +1 -0
  43. package/dist/las/las-format.js +19 -0
  44. package/dist/las/las-format.js.map +1 -0
  45. package/dist/las/las-loader-shared.cjs +84 -0
  46. package/dist/las/las-loader-shared.cjs.map +7 -0
  47. package/dist/las/las-loader-shared.d.ts +68 -0
  48. package/dist/las/las-loader-shared.d.ts.map +1 -0
  49. package/dist/las/las-loader-shared.js +60 -0
  50. package/dist/las/las-loader-shared.js.map +1 -0
  51. package/dist/las/las-loader-types.cjs +51 -0
  52. package/dist/las/las-loader-types.cjs.map +7 -0
  53. package/dist/las/las-loader-types.d.ts +77 -0
  54. package/dist/las/las-loader-types.d.ts.map +1 -0
  55. package/dist/las/las-loader-types.js +17 -0
  56. package/dist/las/las-loader-types.js.map +1 -0
  57. package/dist/las/las-loader.cjs +128 -0
  58. package/dist/las/las-loader.cjs.map +7 -0
  59. package/dist/las/las-loader.d.ts +91 -0
  60. package/dist/las/las-loader.d.ts.map +1 -0
  61. package/dist/las/las-loader.js +108 -0
  62. package/dist/las/las-loader.js.map +1 -0
  63. package/dist/las/las-writer.cjs +1054 -0
  64. package/dist/las/las-writer.cjs.map +7 -0
  65. package/dist/las/las-writer.d.ts +70 -0
  66. package/dist/las/las-writer.d.ts.map +1 -0
  67. package/dist/las/las-writer.js +992 -0
  68. package/dist/las/las-writer.js.map +1 -0
  69. package/dist/las/laz-rs-loader-types.cjs +49 -0
  70. package/dist/las/laz-rs-loader-types.cjs.map +7 -0
  71. package/dist/las/laz-rs-loader-types.d.ts +69 -0
  72. package/dist/las/laz-rs-loader-types.d.ts.map +1 -0
  73. package/dist/las/laz-rs-loader-types.js +16 -0
  74. package/dist/las/laz-rs-loader-types.js.map +1 -0
  75. package/dist/las/laz-rs-loader.cjs +275 -0
  76. package/dist/las/laz-rs-loader.cjs.map +7 -0
  77. package/dist/las/laz-rs-loader.d.ts +39 -0
  78. package/dist/las/laz-rs-loader.d.ts.map +1 -0
  79. package/dist/las/laz-rs-loader.js +43 -0
  80. package/dist/las/laz-rs-loader.js.map +1 -0
  81. package/dist/las/lazperf-loader-types.cjs +49 -0
  82. package/dist/las/lazperf-loader-types.cjs.map +7 -0
  83. package/dist/las/lazperf-loader-types.d.ts +71 -0
  84. package/dist/las/lazperf-loader-types.d.ts.map +1 -0
  85. package/dist/las/lazperf-loader-types.js +17 -0
  86. package/dist/las/lazperf-loader-types.js.map +1 -0
  87. package/dist/las/lazperf-loader.cjs +63 -0
  88. package/dist/las/lazperf-loader.cjs.map +7 -0
  89. package/dist/las/lazperf-loader.d.ts +41 -0
  90. package/dist/las/lazperf-loader.d.ts.map +1 -0
  91. package/dist/las/lazperf-loader.js +49 -0
  92. package/dist/las/lazperf-loader.js.map +1 -0
  93. package/dist/las/lib/copc/parse-las.cjs +177 -0
  94. package/dist/las/lib/copc/parse-las.cjs.map +7 -0
  95. package/dist/las/lib/copc/parse-las.d.ts +17 -0
  96. package/dist/las/lib/copc/parse-las.d.ts.map +1 -0
  97. package/dist/las/lib/copc/parse-las.js +215 -0
  98. package/dist/las/lib/copc/parse-las.js.map +1 -0
  99. package/dist/las/lib/get-las-schema.cjs +67 -0
  100. package/dist/las/lib/get-las-schema.cjs.map +7 -0
  101. package/dist/las/lib/get-las-schema.d.ts +16 -0
  102. package/dist/las/lib/get-las-schema.d.ts.map +1 -0
  103. package/dist/las/lib/get-las-schema.js +52 -0
  104. package/dist/las/lib/get-las-schema.js.map +1 -0
  105. package/dist/las/lib/las-compatibility.cjs +110 -0
  106. package/dist/las/lib/las-compatibility.cjs.map +7 -0
  107. package/dist/las/lib/las-compatibility.d.ts +40 -0
  108. package/dist/las/lib/las-compatibility.d.ts.map +1 -0
  109. package/dist/las/lib/las-compatibility.js +115 -0
  110. package/dist/las/lib/las-compatibility.js.map +1 -0
  111. package/dist/las/lib/las-extra-bytes.cjs +228 -0
  112. package/dist/las/lib/las-extra-bytes.cjs.map +7 -0
  113. package/dist/las/lib/las-extra-bytes.d.ts +35 -0
  114. package/dist/las/lib/las-extra-bytes.d.ts.map +1 -0
  115. package/dist/las/lib/las-extra-bytes.js +197 -0
  116. package/dist/las/lib/las-extra-bytes.js.map +1 -0
  117. package/dist/las/lib/las-types.cjs +19 -0
  118. package/dist/las/lib/las-types.cjs.map +7 -0
  119. package/dist/las/lib/las-types.d.ts +194 -0
  120. package/dist/las/lib/las-types.d.ts.map +1 -0
  121. package/dist/las/lib/las-types.js +5 -0
  122. package/dist/las/lib/las-types.js.map +1 -0
  123. package/dist/las/lib/las-waveform.cjs +196 -0
  124. package/dist/las/lib/las-waveform.cjs.map +7 -0
  125. package/dist/las/lib/las-waveform.d.ts +89 -0
  126. package/dist/las/lib/las-waveform.d.ts.map +1 -0
  127. package/dist/las/lib/las-waveform.js +193 -0
  128. package/dist/las/lib/las-waveform.js.map +1 -0
  129. package/dist/las/lib/laz-perf/laslaz-decoder.cjs +382 -0
  130. package/dist/las/lib/laz-perf/laslaz-decoder.cjs.map +7 -0
  131. package/dist/las/lib/laz-perf/laslaz-decoder.d.ts +129 -0
  132. package/dist/las/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
  133. package/dist/las/lib/laz-perf/laslaz-decoder.js +377 -0
  134. package/dist/las/lib/laz-perf/laslaz-decoder.js.map +1 -0
  135. package/dist/las/lib/laz-perf/parse-las.cjs +271 -0
  136. package/dist/las/lib/laz-perf/parse-las.cjs.map +7 -0
  137. package/dist/las/lib/laz-perf/parse-las.d.ts +24 -0
  138. package/dist/las/lib/laz-perf/parse-las.d.ts.map +1 -0
  139. package/dist/las/lib/laz-perf/parse-las.js +308 -0
  140. package/dist/las/lib/laz-perf/parse-las.js.map +1 -0
  141. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs +631 -0
  142. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs.map +7 -0
  143. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts +129 -0
  144. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
  145. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js +414 -0
  146. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
  147. package/dist/las/lib/laz-rs-wasm/parse-las.cjs +271 -0
  148. package/dist/las/lib/laz-rs-wasm/parse-las.cjs.map +7 -0
  149. package/dist/las/lib/laz-rs-wasm/parse-las.d.ts +24 -0
  150. package/dist/las/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
  151. package/dist/las/lib/laz-rs-wasm/parse-las.js +308 -0
  152. package/dist/las/lib/laz-rs-wasm/parse-las.js.map +1 -0
  153. package/dist/las/lib/typescript/parse-las.cjs +2889 -0
  154. package/dist/las/lib/typescript/parse-las.cjs.map +7 -0
  155. package/dist/las/lib/typescript/parse-las.d.ts +39 -0
  156. package/dist/las/lib/typescript/parse-las.d.ts.map +1 -0
  157. package/dist/las/lib/typescript/parse-las.js +2703 -0
  158. package/dist/las/lib/typescript/parse-las.js.map +1 -0
  159. package/dist/las/libs/laz-perf/laz-perf.cjs +18093 -0
  160. package/dist/las/libs/laz-perf/laz-perf.cjs.map +7 -0
  161. package/dist/las/libs/laz-perf/laz-perf.d.ts +2 -0
  162. package/dist/las/libs/laz-perf/laz-perf.d.ts.map +1 -0
  163. package/dist/las/libs/laz-perf/laz-perf.js +19003 -0
  164. package/dist/las/libs/laz-perf/laz-perf.js.map +1 -0
  165. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
  166. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
  167. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js +442 -0
  168. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
  169. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  170. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
  171. package/dist/las/unbundled.cjs +69 -0
  172. package/dist/las/unbundled.cjs.map +7 -0
  173. package/dist/las/unbundled.d.ts +11 -0
  174. package/dist/las/unbundled.d.ts.map +1 -0
  175. package/dist/las/unbundled.js +11 -0
  176. package/dist/las/unbundled.js.map +1 -0
  177. package/dist/las/workers/las-worker.cjs +23 -0
  178. package/dist/las/workers/las-worker.cjs.map +7 -0
  179. package/dist/las/workers/las-worker.d.ts +2 -0
  180. package/dist/las/workers/las-worker.d.ts.map +1 -0
  181. package/dist/las/workers/las-worker.js +23 -0
  182. package/dist/las/workers/las-worker.js.map +1 -0
  183. package/dist/las-copc-loader-types.cjs +51 -0
  184. package/dist/las-copc-loader-types.cjs.map +7 -0
  185. package/dist/las-copc-loader-types.d.ts +2 -0
  186. package/dist/las-copc-loader-types.d.ts.map +1 -0
  187. package/dist/las-copc-loader-types.js +2 -0
  188. package/dist/las-copc-loader-types.js.map +1 -0
  189. package/dist/las-copc-loader.cjs +62 -0
  190. package/dist/las-copc-loader.cjs.map +7 -0
  191. package/dist/las-copc-loader.d.ts +2 -0
  192. package/dist/las-copc-loader.d.ts.map +1 -0
  193. package/dist/las-copc-loader.js +2 -0
  194. package/dist/las-copc-loader.js.map +1 -0
  195. package/dist/las-loader-types.cjs +53 -0
  196. package/dist/las-loader-types.cjs.map +7 -0
  197. package/dist/las-loader-types.d.ts +2 -0
  198. package/dist/las-loader-types.d.ts.map +1 -0
  199. package/dist/las-loader-types.js +2 -0
  200. package/dist/las-loader-types.js.map +1 -0
  201. package/dist/las-loader.cjs +130 -0
  202. package/dist/las-loader.cjs.map +7 -0
  203. package/dist/las-loader.d.ts +2 -0
  204. package/dist/las-loader.d.ts.map +1 -0
  205. package/dist/las-loader.js +2 -0
  206. package/dist/las-loader.js.map +1 -0
  207. package/dist/las-worker.js +24024 -0
  208. package/dist/las-writer.cjs +1056 -0
  209. package/dist/las-writer.cjs.map +7 -0
  210. package/dist/las-writer.d.ts +2 -0
  211. package/dist/las-writer.d.ts.map +1 -0
  212. package/dist/las-writer.js +2 -0
  213. package/dist/las-writer.js.map +1 -0
  214. package/dist/laz-rs-loader-types.cjs +51 -0
  215. package/dist/laz-rs-loader-types.cjs.map +7 -0
  216. package/dist/laz-rs-loader-types.d.ts +2 -0
  217. package/dist/laz-rs-loader-types.d.ts.map +1 -0
  218. package/dist/laz-rs-loader-types.js +2 -0
  219. package/dist/laz-rs-loader-types.js.map +1 -0
  220. package/dist/laz-rs-loader.cjs +277 -0
  221. package/dist/laz-rs-loader.cjs.map +7 -0
  222. package/dist/laz-rs-loader.d.ts +2 -0
  223. package/dist/laz-rs-loader.d.ts.map +1 -0
  224. package/dist/laz-rs-loader.js +2 -0
  225. package/dist/laz-rs-loader.js.map +1 -0
  226. package/dist/lazperf-loader-types.cjs +51 -0
  227. package/dist/lazperf-loader-types.cjs.map +7 -0
  228. package/dist/lazperf-loader-types.d.ts +2 -0
  229. package/dist/lazperf-loader-types.d.ts.map +1 -0
  230. package/dist/lazperf-loader-types.js +2 -0
  231. package/dist/lazperf-loader-types.js.map +1 -0
  232. package/dist/lazperf-loader.cjs +65 -0
  233. package/dist/lazperf-loader.cjs.map +7 -0
  234. package/dist/lazperf-loader.d.ts +2 -0
  235. package/dist/lazperf-loader.d.ts.map +1 -0
  236. package/dist/lazperf-loader.js +2 -0
  237. package/dist/lazperf-loader.js.map +1 -0
  238. package/dist/pcd/bundled.cjs +31 -0
  239. package/dist/pcd/bundled.cjs.map +7 -0
  240. package/dist/pcd/bundled.d.ts +3 -0
  241. package/dist/pcd/bundled.d.ts.map +1 -0
  242. package/dist/pcd/bundled.js +5 -0
  243. package/dist/pcd/bundled.js.map +1 -0
  244. package/dist/pcd/index.cjs +37 -0
  245. package/dist/pcd/index.cjs.map +7 -0
  246. package/dist/pcd/index.d.ts +6 -0
  247. package/dist/pcd/index.d.ts.map +1 -0
  248. package/dist/pcd/index.js +7 -0
  249. package/dist/pcd/index.js.map +1 -0
  250. package/dist/pcd/lib/decompress-lzf.cjs +80 -0
  251. package/dist/pcd/lib/decompress-lzf.cjs.map +7 -0
  252. package/dist/pcd/lib/decompress-lzf.d.ts +7 -0
  253. package/dist/pcd/lib/decompress-lzf.d.ts.map +1 -0
  254. package/dist/pcd/lib/decompress-lzf.js +62 -0
  255. package/dist/pcd/lib/decompress-lzf.js.map +1 -0
  256. package/dist/pcd/lib/get-pcd-schema.cjs +70 -0
  257. package/dist/pcd/lib/get-pcd-schema.cjs.map +7 -0
  258. package/dist/pcd/lib/get-pcd-schema.d.ts +10 -0
  259. package/dist/pcd/lib/get-pcd-schema.d.ts.map +1 -0
  260. package/dist/pcd/lib/get-pcd-schema.js +53 -0
  261. package/dist/pcd/lib/get-pcd-schema.js.map +1 -0
  262. package/dist/pcd/lib/parse-pcd.cjs +354 -0
  263. package/dist/pcd/lib/parse-pcd.cjs.map +7 -0
  264. package/dist/pcd/lib/parse-pcd.d.ts +20 -0
  265. package/dist/pcd/lib/parse-pcd.d.ts.map +1 -0
  266. package/dist/pcd/lib/parse-pcd.js +341 -0
  267. package/dist/pcd/lib/parse-pcd.js.map +1 -0
  268. package/dist/pcd/lib/pcd-types.cjs +19 -0
  269. package/dist/pcd/lib/pcd-types.cjs.map +7 -0
  270. package/dist/pcd/lib/pcd-types.d.ts +31 -0
  271. package/dist/pcd/lib/pcd-types.d.ts.map +1 -0
  272. package/dist/pcd/lib/pcd-types.js +5 -0
  273. package/dist/pcd/lib/pcd-types.js.map +1 -0
  274. package/dist/pcd/pcd-format.cjs +42 -0
  275. package/dist/pcd/pcd-format.cjs.map +7 -0
  276. package/dist/pcd/pcd-format.d.ts +16 -0
  277. package/dist/pcd/pcd-format.d.ts.map +1 -0
  278. package/dist/pcd/pcd-format.js +19 -0
  279. package/dist/pcd/pcd-format.js.map +1 -0
  280. package/dist/pcd/pcd-loader-types.cjs +63 -0
  281. package/dist/pcd/pcd-loader-types.cjs.map +7 -0
  282. package/dist/pcd/pcd-loader-types.d.ts +82 -0
  283. package/dist/pcd/pcd-loader-types.d.ts.map +1 -0
  284. package/dist/pcd/pcd-loader-types.js +35 -0
  285. package/dist/pcd/pcd-loader-types.js.map +1 -0
  286. package/dist/pcd/pcd-loader.cjs +201 -0
  287. package/dist/pcd/pcd-loader.cjs.map +7 -0
  288. package/dist/pcd/pcd-loader.d.ts +80 -0
  289. package/dist/pcd/pcd-loader.d.ts.map +1 -0
  290. package/dist/pcd/pcd-loader.js +179 -0
  291. package/dist/pcd/pcd-loader.js.map +1 -0
  292. package/dist/pcd/pcd-writer.cjs +134 -0
  293. package/dist/pcd/pcd-writer.cjs.map +7 -0
  294. package/dist/pcd/pcd-writer.d.ts +38 -0
  295. package/dist/pcd/pcd-writer.d.ts.map +1 -0
  296. package/dist/pcd/pcd-writer.js +115 -0
  297. package/dist/pcd/pcd-writer.js.map +1 -0
  298. package/dist/pcd/unbundled.cjs +31 -0
  299. package/dist/pcd/unbundled.cjs.map +7 -0
  300. package/dist/pcd/unbundled.d.ts +3 -0
  301. package/dist/pcd/unbundled.d.ts.map +1 -0
  302. package/dist/pcd/unbundled.js +5 -0
  303. package/dist/pcd/unbundled.js.map +1 -0
  304. package/dist/pcd/workers/pcd-worker.cjs +23 -0
  305. package/dist/pcd/workers/pcd-worker.cjs.map +7 -0
  306. package/dist/pcd/workers/pcd-worker.d.ts +2 -0
  307. package/dist/pcd/workers/pcd-worker.d.ts.map +1 -0
  308. package/dist/pcd/workers/pcd-worker.js +23 -0
  309. package/dist/pcd/workers/pcd-worker.js.map +1 -0
  310. package/dist/pcd-loader-types.cjs +65 -0
  311. package/dist/pcd-loader-types.cjs.map +7 -0
  312. package/dist/pcd-loader-types.d.ts +2 -0
  313. package/dist/pcd-loader-types.d.ts.map +1 -0
  314. package/dist/pcd-loader-types.js +2 -0
  315. package/dist/pcd-loader-types.js.map +1 -0
  316. package/dist/pcd-loader.cjs +203 -0
  317. package/dist/pcd-loader.cjs.map +7 -0
  318. package/dist/pcd-loader.d.ts +2 -0
  319. package/dist/pcd-loader.d.ts.map +1 -0
  320. package/dist/pcd-loader.js +2 -0
  321. package/dist/pcd-loader.js.map +1 -0
  322. package/dist/pcd-worker.js +18561 -0
  323. package/dist/pcd-writer.cjs +136 -0
  324. package/dist/pcd-writer.cjs.map +7 -0
  325. package/dist/pcd-writer.d.ts +2 -0
  326. package/dist/pcd-writer.d.ts.map +1 -0
  327. package/dist/pcd-writer.js +2 -0
  328. package/dist/pcd-writer.js.map +1 -0
  329. package/dist/ply/bundled.cjs +31 -0
  330. package/dist/ply/bundled.cjs.map +7 -0
  331. package/dist/ply/bundled.d.ts +3 -0
  332. package/dist/ply/bundled.d.ts.map +1 -0
  333. package/dist/ply/bundled.js +5 -0
  334. package/dist/ply/bundled.js.map +1 -0
  335. package/dist/ply/index.cjs +37 -0
  336. package/dist/ply/index.cjs.map +7 -0
  337. package/dist/ply/index.d.ts +6 -0
  338. package/dist/ply/index.d.ts.map +1 -0
  339. package/dist/ply/index.js +8 -0
  340. package/dist/ply/index.js.map +1 -0
  341. package/dist/ply/lib/get-ply-schema.cjs +128 -0
  342. package/dist/ply/lib/get-ply-schema.cjs.map +7 -0
  343. package/dist/ply/lib/get-ply-schema.d.ts +16 -0
  344. package/dist/ply/lib/get-ply-schema.d.ts.map +1 -0
  345. package/dist/ply/lib/get-ply-schema.js +117 -0
  346. package/dist/ply/lib/get-ply-schema.js.map +1 -0
  347. package/dist/ply/lib/normalize-ply.cjs +96 -0
  348. package/dist/ply/lib/normalize-ply.cjs.map +7 -0
  349. package/dist/ply/lib/normalize-ply.d.ts +8 -0
  350. package/dist/ply/lib/normalize-ply.d.ts.map +1 -0
  351. package/dist/ply/lib/normalize-ply.js +89 -0
  352. package/dist/ply/lib/normalize-ply.js.map +1 -0
  353. package/dist/ply/lib/parse-ply-arrow.cjs +552 -0
  354. package/dist/ply/lib/parse-ply-arrow.cjs.map +7 -0
  355. package/dist/ply/lib/parse-ply-arrow.d.ts +25 -0
  356. package/dist/ply/lib/parse-ply-arrow.d.ts.map +1 -0
  357. package/dist/ply/lib/parse-ply-arrow.js +493 -0
  358. package/dist/ply/lib/parse-ply-arrow.js.map +1 -0
  359. package/dist/ply/lib/parse-ply-in-batches.cjs +613 -0
  360. package/dist/ply/lib/parse-ply-in-batches.cjs.map +7 -0
  361. package/dist/ply/lib/parse-ply-in-batches.d.ts +9 -0
  362. package/dist/ply/lib/parse-ply-in-batches.d.ts.map +1 -0
  363. package/dist/ply/lib/parse-ply-in-batches.js +630 -0
  364. package/dist/ply/lib/parse-ply-in-batches.js.map +1 -0
  365. package/dist/ply/lib/parse-ply.cjs +758 -0
  366. package/dist/ply/lib/parse-ply.cjs.map +7 -0
  367. package/dist/ply/lib/parse-ply.d.ts +69 -0
  368. package/dist/ply/lib/parse-ply.d.ts.map +1 -0
  369. package/dist/ply/lib/parse-ply.js +855 -0
  370. package/dist/ply/lib/parse-ply.js.map +1 -0
  371. package/dist/ply/lib/ply-types.cjs +19 -0
  372. package/dist/ply/lib/ply-types.cjs.map +7 -0
  373. package/dist/ply/lib/ply-types.d.ts +37 -0
  374. package/dist/ply/lib/ply-types.d.ts.map +1 -0
  375. package/dist/ply/lib/ply-types.js +2 -0
  376. package/dist/ply/lib/ply-types.js.map +1 -0
  377. package/dist/ply/ply-format.cjs +43 -0
  378. package/dist/ply/ply-format.cjs.map +7 -0
  379. package/dist/ply/ply-format.d.ts +18 -0
  380. package/dist/ply/ply-format.d.ts.map +1 -0
  381. package/dist/ply/ply-format.js +22 -0
  382. package/dist/ply/ply-format.js.map +1 -0
  383. package/dist/ply/ply-loader-types.cjs +64 -0
  384. package/dist/ply/ply-loader-types.cjs.map +7 -0
  385. package/dist/ply/ply-loader-types.d.ts +88 -0
  386. package/dist/ply/ply-loader-types.d.ts.map +1 -0
  387. package/dist/ply/ply-loader-types.js +38 -0
  388. package/dist/ply/ply-loader-types.js.map +1 -0
  389. package/dist/ply/ply-loader.cjs +192 -0
  390. package/dist/ply/ply-loader.cjs.map +7 -0
  391. package/dist/ply/ply-loader.d.ts +81 -0
  392. package/dist/ply/ply-loader.d.ts.map +1 -0
  393. package/dist/ply/ply-loader.js +173 -0
  394. package/dist/ply/ply-loader.js.map +1 -0
  395. package/dist/ply/ply-writer.cjs +175 -0
  396. package/dist/ply/ply-writer.cjs.map +7 -0
  397. package/dist/ply/ply-writer.d.ts +38 -0
  398. package/dist/ply/ply-writer.d.ts.map +1 -0
  399. package/dist/ply/ply-writer.js +140 -0
  400. package/dist/ply/ply-writer.js.map +1 -0
  401. package/dist/ply/unbundled.cjs +31 -0
  402. package/dist/ply/unbundled.cjs.map +7 -0
  403. package/dist/ply/unbundled.d.ts +3 -0
  404. package/dist/ply/unbundled.d.ts.map +1 -0
  405. package/dist/ply/unbundled.js +5 -0
  406. package/dist/ply/unbundled.js.map +1 -0
  407. package/dist/ply/workers/ply-worker.cjs +34 -0
  408. package/dist/ply/workers/ply-worker.cjs.map +7 -0
  409. package/dist/ply/workers/ply-worker.d.ts +2 -0
  410. package/dist/ply/workers/ply-worker.d.ts.map +1 -0
  411. package/dist/ply/workers/ply-worker.js +37 -0
  412. package/dist/ply/workers/ply-worker.js.map +1 -0
  413. package/dist/ply-loader-types.cjs +66 -0
  414. package/dist/ply-loader-types.cjs.map +7 -0
  415. package/dist/ply-loader-types.d.ts +2 -0
  416. package/dist/ply-loader-types.d.ts.map +1 -0
  417. package/dist/ply-loader-types.js +2 -0
  418. package/dist/ply-loader-types.js.map +1 -0
  419. package/dist/ply-loader.cjs +194 -0
  420. package/dist/ply-loader.cjs.map +7 -0
  421. package/dist/ply-loader.d.ts +2 -0
  422. package/dist/ply-loader.d.ts.map +1 -0
  423. package/dist/ply-loader.js +2 -0
  424. package/dist/ply-loader.js.map +1 -0
  425. package/dist/ply-worker.js +20962 -0
  426. package/dist/ply-writer.cjs +177 -0
  427. package/dist/ply-writer.cjs.map +7 -0
  428. package/dist/ply-writer.d.ts +2 -0
  429. package/dist/ply-writer.d.ts.map +1 -0
  430. package/dist/ply-writer.js +2 -0
  431. package/dist/ply-writer.js.map +1 -0
  432. package/package.json +238 -4
  433. package/src/index.ts +19 -0
  434. package/src/las/bundled.ts +38 -0
  435. package/src/las/index.ts +66 -0
  436. package/src/las/las-copc-loader-types.ts +18 -0
  437. package/src/las/las-copc-loader.ts +61 -0
  438. package/src/las/las-format.ts +21 -0
  439. package/src/las/las-loader-shared.ts +126 -0
  440. package/src/las/las-loader-types.ts +24 -0
  441. package/src/las/las-loader.ts +163 -0
  442. package/src/las/las-writer.ts +1477 -0
  443. package/src/las/laz-rs-loader-types.ts +21 -0
  444. package/src/las/laz-rs-loader.ts +53 -0
  445. package/src/las/lazperf-loader-types.ts +22 -0
  446. package/src/las/lazperf-loader.ts +65 -0
  447. package/src/las/lib/LASZIP-LICENSE +202 -0
  448. package/src/las/lib/LASZIP-NOTICE +4 -0
  449. package/src/las/lib/copc/parse-las.ts +265 -0
  450. package/src/las/lib/get-las-schema.ts +55 -0
  451. package/src/las/lib/las-compatibility.ts +178 -0
  452. package/src/las/lib/las-extra-bytes.ts +276 -0
  453. package/src/las/lib/las-types.ts +206 -0
  454. package/src/las/lib/las-waveform.ts +292 -0
  455. package/src/las/lib/laz-perf/laslaz-decoder.ts +443 -0
  456. package/src/las/lib/laz-perf/parse-las.ts +411 -0
  457. package/src/las/lib/laz-rs-wasm/laslaz-decoder.ts +488 -0
  458. package/src/las/lib/laz-rs-wasm/parse-las.ts +411 -0
  459. package/src/las/lib/typescript/parse-las.ts +3862 -0
  460. package/src/las/libs/laz-perf/laz-perf.ts +20615 -0
  461. package/src/las/libs/laz-rs-wasm/README.md +5 -0
  462. package/src/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +89 -0
  463. package/src/las/libs/laz-rs-wasm/laz_rs_wasm.js +497 -0
  464. package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  465. package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
  466. package/src/las/libs/laz-rs-wasm/package.json +25 -0
  467. package/src/las/unbundled.ts +38 -0
  468. package/src/las/workers/las-worker.ts +24 -0
  469. package/src/las-copc-loader-types.ts +1 -0
  470. package/src/las-copc-loader.ts +1 -0
  471. package/src/las-loader-types.ts +1 -0
  472. package/src/las-loader.ts +1 -0
  473. package/src/las-writer.ts +1 -0
  474. package/src/laz-rs-loader-types.ts +1 -0
  475. package/src/laz-rs-loader.ts +1 -0
  476. package/src/lazperf-loader-types.ts +1 -0
  477. package/src/lazperf-loader.ts +1 -0
  478. package/src/pcd/bundled.ts +6 -0
  479. package/src/pcd/index.ts +9 -0
  480. package/src/pcd/lib/decompress-lzf.ts +68 -0
  481. package/src/pcd/lib/get-pcd-schema.ts +66 -0
  482. package/src/pcd/lib/parse-pcd.ts +474 -0
  483. package/src/pcd/lib/pcd-types.ts +34 -0
  484. package/src/pcd/pcd-format.ts +21 -0
  485. package/src/pcd/pcd-loader-types.ts +52 -0
  486. package/src/pcd/pcd-loader.ts +247 -0
  487. package/src/pcd/pcd-writer.ts +156 -0
  488. package/src/pcd/unbundled.ts +6 -0
  489. package/src/pcd/workers/pcd-worker.ts +24 -0
  490. package/src/pcd-loader-types.ts +1 -0
  491. package/src/pcd-loader.ts +1 -0
  492. package/src/pcd-writer.ts +1 -0
  493. package/src/ply/bundled.ts +6 -0
  494. package/src/ply/index.ts +11 -0
  495. package/src/ply/lib/get-ply-schema.ts +133 -0
  496. package/src/ply/lib/normalize-ply.ts +110 -0
  497. package/src/ply/lib/parse-ply-arrow.ts +676 -0
  498. package/src/ply/lib/parse-ply-in-batches.ts +832 -0
  499. package/src/ply/lib/parse-ply.ts +1084 -0
  500. package/src/ply/lib/ply-types.ts +47 -0
  501. package/src/ply/ply-format.ts +24 -0
  502. package/src/ply/ply-loader-types.ts +60 -0
  503. package/src/ply/ply-loader.ts +255 -0
  504. package/src/ply/ply-writer.ts +219 -0
  505. package/src/ply/unbundled.ts +6 -0
  506. package/src/ply/workers/ply-worker.ts +40 -0
  507. package/src/ply-loader-types.ts +1 -0
  508. package/src/ply-loader.ts +1 -0
  509. package/src/ply-writer.ts +1 -0
  510. package/third-party-licenses/plasio-LICENSE +21 -0
  511. package/third-party-licenses/three-LICENSE +21 -0
@@ -0,0 +1,115 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // Copyright (c) vis.gl contributors
4
+ // Compatibility reconstruction follows LASzip, copyright rapidlasso GmbH.
5
+ // See LASZIP-LICENSE and LASZIP-NOTICE in this directory.
6
+ /** Validate the explicit compatibility marker and locate its descriptor-defined fields. */
7
+ export function getLASCompatibilityLayout(header, metadata) {
8
+ const record = metadata.vlrs.find(variableLengthRecord => variableLengthRecord.userId === 'lascompatible' && variableLengthRecord.recordId === 22204);
9
+ if (!record)
10
+ return undefined;
11
+ if (!['1.0', '1.1', '1.2', '1.3'].includes(header.versionAsString || '') ||
12
+ ![1, 3, 4, 5].includes(header.pointsFormatId)) {
13
+ throw new Error('LASLoader: compatibility mode requires a legacy LAS point format');
14
+ }
15
+ const view = new DataView(record.data.buffer, record.data.byteOffset, record.data.byteLength);
16
+ if (view.byteLength < 4)
17
+ throw new Error('LASLoader: truncated LASzip compatibility VLR');
18
+ const version = view.getUint16(2, true);
19
+ if ((version !== 3 && version !== 4) || view.byteLength !== (version === 3 ? 156 : 174)) {
20
+ throw new Error(`LASLoader: unsupported LASzip compatibility VLR version ${version} or length`);
21
+ }
22
+ const offsets = new Map();
23
+ let byteOffset = 0;
24
+ for (const descriptor of metadata.extraBytes) {
25
+ const scalarDataType = descriptor.dataType > 20
26
+ ? descriptor.dataType - 20
27
+ : descriptor.dataType > 10
28
+ ? descriptor.dataType - 10
29
+ : descriptor.dataType;
30
+ const size = descriptor.dataType > 20 ? 3 : descriptor.dataType > 10 ? 2 : 1;
31
+ const byteLength = descriptor.dataType === 0
32
+ ? descriptor.options
33
+ : scalarDataType <= 2
34
+ ? size
35
+ : scalarDataType <= 4
36
+ ? 2 * size
37
+ : scalarDataType <= 6 || scalarDataType === 9
38
+ ? 4 * size
39
+ : 8 * size;
40
+ if (descriptor.dataType > 30 || !byteLength)
41
+ throw new Error('LASLoader: invalid compatibility Extra Bytes layout');
42
+ offsets.set(descriptor.name, { byteOffset, dataType: descriptor.dataType });
43
+ byteOffset += byteLength;
44
+ }
45
+ const baseLength = { 1: 28, 3: 34, 4: 57, 5: 63 }[header.pointsFormatId];
46
+ if (byteOffset !== header.pointsStructSize - baseLength)
47
+ throw new Error('LASLoader: compatibility descriptors do not match point record length');
48
+ const scanAngleByteOffset = getCompatibilityFieldOffset(offsets, 'LAS 1.4 scan angle', 4);
49
+ const returnsByteOffset = getCompatibilityFieldOffset(offsets, 'LAS 1.4 extended returns', 1);
50
+ const classificationByteOffset = getCompatibilityFieldOffset(offsets, 'LAS 1.4 classification', 1);
51
+ const flagsByteOffset = getCompatibilityFieldOffset(offsets, 'LAS 1.4 flags and channel', 1);
52
+ const nirByteOffset = offsets.has('LAS 1.4 NIR band')
53
+ ? getCompatibilityFieldOffset(offsets, 'LAS 1.4 NIR band', 3)
54
+ : undefined;
55
+ const pointDataRecordFormat = header.pointsFormatId === 1
56
+ ? 6
57
+ : header.pointsFormatId === 3
58
+ ? nirByteOffset === undefined
59
+ ? 7
60
+ : 8
61
+ : header.pointsFormatId === 4
62
+ ? 9
63
+ : 10;
64
+ if (header.pointsFormatId === 5 && nirByteOffset === undefined)
65
+ throw new Error('LASLoader: compatibility waveform color points require NIR');
66
+ return {
67
+ pointDataRecordFormat,
68
+ version: version === 3 ? '1.4' : '1.5',
69
+ scanAngleByteOffset,
70
+ returnsByteOffset,
71
+ classificationByteOffset,
72
+ flagsByteOffset,
73
+ nirByteOffset
74
+ };
75
+ }
76
+ /** Require the named field to have the scalar representation used by LASzip. */
77
+ function getCompatibilityFieldOffset(offsets, name, dataType) {
78
+ const field = offsets.get(name);
79
+ if (!field || field.dataType !== dataType)
80
+ throw new Error(`LASLoader: missing or invalid compatibility field ${name}`);
81
+ return field.byteOffset;
82
+ }
83
+ /** Restore selected modern fields from one legacy record without changing raw point bytes. */
84
+ export function populateLASCompatibilityPoint(view, extraByteOffset, pointIndex, layout, target) {
85
+ if (!target.classifications &&
86
+ !target.returnNumbers &&
87
+ !target.numberOfReturns &&
88
+ !target.scanAngles &&
89
+ !target.overlapFlags &&
90
+ !target.scannerChannels &&
91
+ !target.nir)
92
+ return;
93
+ const extendedReturns = view.getUint8(extraByteOffset + layout.returnsByteOffset);
94
+ const flags = view.getUint8(extraByteOffset + layout.flagsByteOffset);
95
+ if (target.classifications)
96
+ target.classifications[pointIndex] += view.getUint8(extraByteOffset + layout.classificationByteOffset);
97
+ if (target.returnNumbers)
98
+ target.returnNumbers[pointIndex] += extendedReturns >> 4;
99
+ if (target.numberOfReturns)
100
+ target.numberOfReturns[pointIndex] += extendedReturns & 15;
101
+ if (target.scanAngles) {
102
+ const rank = target.scanAngles[pointIndex];
103
+ const prediction = Math.fround(rank / Math.fround(0.006));
104
+ const quantized = Math.sign(prediction) * Math.floor(Math.abs(prediction) + 0.5);
105
+ target.scanAngles[pointIndex] =
106
+ quantized + view.getInt16(extraByteOffset + layout.scanAngleByteOffset, true);
107
+ }
108
+ if (target.overlapFlags)
109
+ target.overlapFlags[pointIndex] = flags & 1;
110
+ if (target.scannerChannels)
111
+ target.scannerChannels[pointIndex] = (flags >> 1) & 3;
112
+ if (target.nir && layout.nirByteOffset !== undefined)
113
+ target.nir[pointIndex] = view.getUint16(extraByteOffset + layout.nirByteOffset, true);
114
+ }
115
+ //# sourceMappingURL=las-compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-compatibility.js","sourceRoot":"","sources":["../../../src/las/lib/las-compatibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/las/lib/las-extra-bytes.ts
21
+ var las_extra_bytes_exports = {};
22
+ __export(las_extra_bytes_exports, {
23
+ createLASTypedExtraBytesAttributes: () => createLASTypedExtraBytesAttributes,
24
+ createLASTypedExtraBytesValue: () => createLASTypedExtraBytesValue,
25
+ parseLASExtraBytes: () => parseLASExtraBytes,
26
+ populateLASTypedExtraBytes: () => populateLASTypedExtraBytes,
27
+ populateLASTypedExtraBytesComponent: () => populateLASTypedExtraBytesComponent
28
+ });
29
+ module.exports = __toCommonJS(las_extra_bytes_exports);
30
+ function parseLASExtraBytes(data) {
31
+ if (data.byteLength % 192 !== 0) {
32
+ throw new Error(`LAS Extra Bytes VLR length ${data.byteLength} is not a multiple of 192`);
33
+ }
34
+ const descriptors = [];
35
+ const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
36
+ for (let descriptorOffset = 0; descriptorOffset < data.byteLength; descriptorOffset += 192) {
37
+ const scales = [
38
+ dataView.getFloat64(descriptorOffset + 112, true),
39
+ dataView.getFloat64(descriptorOffset + 120, true),
40
+ dataView.getFloat64(descriptorOffset + 128, true)
41
+ ];
42
+ const offsets = [
43
+ dataView.getFloat64(descriptorOffset + 136, true),
44
+ dataView.getFloat64(descriptorOffset + 144, true),
45
+ dataView.getFloat64(descriptorOffset + 152, true)
46
+ ];
47
+ descriptors.push({
48
+ dataType: data[descriptorOffset + 2],
49
+ options: data[descriptorOffset + 3],
50
+ name: readLASString(data, descriptorOffset + 4, 32),
51
+ description: readLASString(data, descriptorOffset + 160, 32),
52
+ scale: scales[0],
53
+ offset: offsets[0],
54
+ scales,
55
+ offsets,
56
+ data: data.slice(descriptorOffset, descriptorOffset + 192)
57
+ });
58
+ }
59
+ return descriptors;
60
+ }
61
+ function createLASTypedExtraBytesAttributes(pointCount, descriptors, extraByteCount) {
62
+ let byteOffset = 0;
63
+ const usedNames = /* @__PURE__ */ new Set();
64
+ const attributes = [];
65
+ for (let descriptorIndex = 0; descriptorIndex < descriptors.length; descriptorIndex++) {
66
+ const descriptor = descriptors[descriptorIndex];
67
+ const scalarDataType = getExtraBytesScalarDataType(descriptor.dataType);
68
+ const size = getExtraBytesComponentCount(descriptor.dataType);
69
+ const scalarByteLength = getExtraBytesScalarByteLength(scalarDataType);
70
+ const byteLength = scalarByteLength * size;
71
+ if (descriptor.dataType < 1 || descriptor.dataType > 30 || !byteLength) {
72
+ throw new Error(`Unsupported typed LAS Extra Bytes data type ${descriptor.dataType}`);
73
+ }
74
+ let name = `EXTRA_BYTES_${sanitizeExtraBytesName(descriptor.name)}`;
75
+ if (name === "EXTRA_BYTES_") {
76
+ name = `EXTRA_BYTES_${descriptorIndex}`;
77
+ }
78
+ const baseName = name;
79
+ let suffix = 1;
80
+ while (usedNames.has(name)) {
81
+ name = `${baseName}_${suffix++}`;
82
+ }
83
+ usedNames.add(name);
84
+ const scales = descriptor.options & 8 ? descriptor.scales.slice(0, size) : new Array(size).fill(1);
85
+ const offsets = descriptor.options & 16 ? descriptor.offsets.slice(0, size) : new Array(size).fill(0);
86
+ const isBigInt = scalarDataType === 7 || scalarDataType === 8;
87
+ const outputFloat64 = scalarDataType !== 10 && (isBigInt ? scales.some((scale) => scale !== 1) || offsets.some((offset) => offset !== 0) : Boolean(descriptor.options & 24));
88
+ attributes.push({
89
+ name,
90
+ value: createLASTypedExtraBytesValue(scalarDataType, pointCount * size, outputFloat64),
91
+ size,
92
+ scalarDataType,
93
+ byteOffset,
94
+ byteLength,
95
+ outputFloat64,
96
+ scales,
97
+ offsets
98
+ });
99
+ byteOffset += byteLength;
100
+ }
101
+ if (byteOffset !== extraByteCount) {
102
+ throw new Error(
103
+ `LAS Extra Bytes descriptors use ${byteOffset} bytes; point records provide ${extraByteCount}`
104
+ );
105
+ }
106
+ return attributes;
107
+ }
108
+ function populateLASTypedExtraBytes(rawExtraBytes, pointCount, extraByteCount, attributes) {
109
+ if (rawExtraBytes.byteLength < pointCount * extraByteCount) {
110
+ throw new Error("Packed LAS Extra Bytes data is truncated");
111
+ }
112
+ const dataView = new DataView(
113
+ rawExtraBytes.buffer,
114
+ rawExtraBytes.byteOffset,
115
+ rawExtraBytes.byteLength
116
+ );
117
+ for (let pointIndex = 0; pointIndex < pointCount; pointIndex++) {
118
+ const recordOffset = pointIndex * extraByteCount;
119
+ for (const attribute of attributes) {
120
+ const targetOffset = pointIndex * attribute.size;
121
+ const sourceOffset = recordOffset + attribute.byteOffset;
122
+ const scalarByteLength = getExtraBytesScalarByteLength(attribute.scalarDataType);
123
+ for (let componentIndex = 0; componentIndex < attribute.size; componentIndex++) {
124
+ populateLASTypedExtraBytesComponent(
125
+ dataView,
126
+ sourceOffset + componentIndex * scalarByteLength,
127
+ attribute,
128
+ targetOffset + componentIndex,
129
+ componentIndex
130
+ );
131
+ }
132
+ }
133
+ }
134
+ }
135
+ function readLASString(bytes, offset, length) {
136
+ const decoded = new TextDecoder().decode(bytes.subarray(offset, offset + length));
137
+ let end = decoded.length;
138
+ while (end > 0 && decoded[end - 1] === "\0") {
139
+ end--;
140
+ }
141
+ return decoded.slice(0, end).trim();
142
+ }
143
+ function sanitizeExtraBytesName(name) {
144
+ return name.trim().replace(/[^A-Za-z0-9_]+/g, "_");
145
+ }
146
+ function getExtraBytesScalarDataType(dataType) {
147
+ return dataType > 20 ? dataType - 20 : dataType > 10 ? dataType - 10 : dataType;
148
+ }
149
+ function getExtraBytesComponentCount(dataType) {
150
+ return dataType > 20 ? 3 : dataType > 10 ? 2 : 1;
151
+ }
152
+ function getExtraBytesScalarByteLength(dataType) {
153
+ if (dataType <= 2) return 1;
154
+ if (dataType <= 4) return 2;
155
+ if (dataType <= 6 || dataType === 9) return 4;
156
+ if (dataType === 7 || dataType === 8 || dataType === 10) return 8;
157
+ return 0;
158
+ }
159
+ function readExtraBytesValue(dataView, offset, scalarDataType) {
160
+ switch (scalarDataType) {
161
+ case 1:
162
+ return dataView.getUint8(offset);
163
+ case 2:
164
+ return dataView.getInt8(offset);
165
+ case 3:
166
+ return dataView.getUint16(offset, true);
167
+ case 4:
168
+ return dataView.getInt16(offset, true);
169
+ case 5:
170
+ return dataView.getUint32(offset, true);
171
+ case 6:
172
+ return dataView.getInt32(offset, true);
173
+ case 7:
174
+ return dataView.getBigUint64(offset, true);
175
+ case 8:
176
+ return dataView.getBigInt64(offset, true);
177
+ case 9:
178
+ return dataView.getFloat32(offset, true);
179
+ case 10:
180
+ return dataView.getFloat64(offset, true);
181
+ default:
182
+ throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);
183
+ }
184
+ }
185
+ function createLASTypedExtraBytesValue(scalarDataType, length, outputFloat64) {
186
+ if (outputFloat64 && scalarDataType !== 10) return new Float64Array(length);
187
+ switch (scalarDataType) {
188
+ case 1:
189
+ return new Uint8Array(length);
190
+ case 2:
191
+ return new Int8Array(length);
192
+ case 3:
193
+ return new Uint16Array(length);
194
+ case 4:
195
+ return new Int16Array(length);
196
+ case 5:
197
+ return new Uint32Array(length);
198
+ case 6:
199
+ return new Int32Array(length);
200
+ case 7:
201
+ return new BigUint64Array(length);
202
+ case 8:
203
+ return new BigInt64Array(length);
204
+ case 9:
205
+ return new Float32Array(length);
206
+ case 10:
207
+ return new Float64Array(length);
208
+ default:
209
+ throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);
210
+ }
211
+ }
212
+ function populateLASTypedExtraBytesComponent(dataView, sourceOffset, attribute, targetOffset, componentIndex) {
213
+ const value = readExtraBytesValue(dataView, sourceOffset, attribute.scalarDataType);
214
+ if (attribute.value instanceof BigInt64Array || attribute.value instanceof BigUint64Array) {
215
+ attribute.value[targetOffset] = value;
216
+ } else {
217
+ attribute.value[targetOffset] = Number(value) * attribute.scales[componentIndex] + attribute.offsets[componentIndex];
218
+ }
219
+ }
220
+ // Annotate the CommonJS export names for ESM import in node:
221
+ 0 && (module.exports = {
222
+ createLASTypedExtraBytesAttributes,
223
+ createLASTypedExtraBytesValue,
224
+ parseLASExtraBytes,
225
+ populateLASTypedExtraBytes,
226
+ populateLASTypedExtraBytesComponent
227
+ });
228
+ //# sourceMappingURL=las-extra-bytes.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/las/lib/las-extra-bytes.ts"],
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LASExtraBytesDescriptor} from './las-types';\n\n/** Typed-array values supported for LAS Extra Bytes Arrow attributes. */\nexport type LASTypedExtraBytesValue =\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\n/** Prepared typed LAS Extra Bytes attribute and its source-record layout. */\nexport type LASTypedExtraBytesAttribute = {\n /** Stable Arrow attribute name. */\n name: string;\n /** Typed output values. */\n value: LASTypedExtraBytesValue;\n /** Number of components per point. */\n size: number;\n /** LAS scalar data type code. */\n scalarDataType: number;\n /** Byte offset within the packed Extra Bytes record. */\n byteOffset: number;\n /** Total source byte length per point. */\n byteLength: number;\n /** Per-component scales. */\n scales: number[];\n /** Per-component offsets. */\n offsets: number[];\n /** Whether transformed integer values require Float64 output. */\n outputFloat64: boolean;\n};\n\n/** Parse the 192-byte descriptors in an LAS Extra Bytes VLR payload. */\nexport function parseLASExtraBytes(data: Uint8Array): LASExtraBytesDescriptor[] {\n if (data.byteLength % 192 !== 0) {\n throw new Error(`LAS Extra Bytes VLR length ${data.byteLength} is not a multiple of 192`);\n }\n const descriptors: LASExtraBytesDescriptor[] = [];\n const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n for (let descriptorOffset = 0; descriptorOffset < data.byteLength; descriptorOffset += 192) {\n const scales: [number, number, number] = [\n dataView.getFloat64(descriptorOffset + 112, true),\n dataView.getFloat64(descriptorOffset + 120, true),\n dataView.getFloat64(descriptorOffset + 128, true)\n ];\n const offsets: [number, number, number] = [\n dataView.getFloat64(descriptorOffset + 136, true),\n dataView.getFloat64(descriptorOffset + 144, true),\n dataView.getFloat64(descriptorOffset + 152, true)\n ];\n descriptors.push({\n dataType: data[descriptorOffset + 2],\n options: data[descriptorOffset + 3],\n name: readLASString(data, descriptorOffset + 4, 32),\n description: readLASString(data, descriptorOffset + 160, 32),\n scale: scales[0],\n offset: offsets[0],\n scales,\n offsets,\n data: data.slice(descriptorOffset, descriptorOffset + 192)\n });\n }\n return descriptors;\n}\n\n/** Allocate typed Arrow attributes described by an LAS Extra Bytes VLR. */\nexport function createLASTypedExtraBytesAttributes(\n pointCount: number,\n descriptors: readonly LASExtraBytesDescriptor[],\n extraByteCount: number\n): LASTypedExtraBytesAttribute[] {\n let byteOffset = 0;\n const usedNames = new Set<string>();\n const attributes: LASTypedExtraBytesAttribute[] = [];\n for (let descriptorIndex = 0; descriptorIndex < descriptors.length; descriptorIndex++) {\n const descriptor = descriptors[descriptorIndex];\n const scalarDataType = getExtraBytesScalarDataType(descriptor.dataType);\n const size = getExtraBytesComponentCount(descriptor.dataType);\n const scalarByteLength = getExtraBytesScalarByteLength(scalarDataType);\n const byteLength = scalarByteLength * size;\n if (descriptor.dataType < 1 || descriptor.dataType > 30 || !byteLength) {\n throw new Error(`Unsupported typed LAS Extra Bytes data type ${descriptor.dataType}`);\n }\n let name = `EXTRA_BYTES_${sanitizeExtraBytesName(descriptor.name)}`;\n if (name === 'EXTRA_BYTES_') {\n name = `EXTRA_BYTES_${descriptorIndex}`;\n }\n const baseName = name;\n let suffix = 1;\n while (usedNames.has(name)) {\n name = `${baseName}_${suffix++}`;\n }\n usedNames.add(name);\n const scales =\n descriptor.options & 0x08 ? descriptor.scales.slice(0, size) : new Array(size).fill(1);\n const offsets =\n descriptor.options & 0x10 ? descriptor.offsets.slice(0, size) : new Array(size).fill(0);\n const isBigInt = scalarDataType === 7 || scalarDataType === 8;\n const outputFloat64 =\n scalarDataType !== 10 &&\n (isBigInt\n ? scales.some(scale => scale !== 1) || offsets.some(offset => offset !== 0)\n : Boolean(descriptor.options & 0x18));\n attributes.push({\n name,\n value: createLASTypedExtraBytesValue(scalarDataType, pointCount * size, outputFloat64),\n size,\n scalarDataType,\n byteOffset,\n byteLength,\n outputFloat64,\n scales,\n offsets\n });\n byteOffset += byteLength;\n }\n if (byteOffset !== extraByteCount) {\n throw new Error(\n `LAS Extra Bytes descriptors use ${byteOffset} bytes; point records provide ${extraByteCount}`\n );\n }\n return attributes;\n}\n\n/** Populate typed attributes from packed Extra Bytes records. */\nexport function populateLASTypedExtraBytes(\n rawExtraBytes: Uint8Array,\n pointCount: number,\n extraByteCount: number,\n attributes: readonly LASTypedExtraBytesAttribute[]\n): void {\n if (rawExtraBytes.byteLength < pointCount * extraByteCount) {\n throw new Error('Packed LAS Extra Bytes data is truncated');\n }\n const dataView = new DataView(\n rawExtraBytes.buffer,\n rawExtraBytes.byteOffset,\n rawExtraBytes.byteLength\n );\n for (let pointIndex = 0; pointIndex < pointCount; pointIndex++) {\n const recordOffset = pointIndex * extraByteCount;\n for (const attribute of attributes) {\n const targetOffset = pointIndex * attribute.size;\n const sourceOffset = recordOffset + attribute.byteOffset;\n const scalarByteLength = getExtraBytesScalarByteLength(attribute.scalarDataType);\n for (let componentIndex = 0; componentIndex < attribute.size; componentIndex++) {\n populateLASTypedExtraBytesComponent(\n dataView,\n sourceOffset + componentIndex * scalarByteLength,\n attribute,\n targetOffset + componentIndex,\n componentIndex\n );\n }\n }\n }\n}\n\nfunction readLASString(bytes: Uint8Array, offset: number, length: number): string {\n const decoded = new TextDecoder().decode(bytes.subarray(offset, offset + length));\n let end = decoded.length;\n while (end > 0 && decoded[end - 1] === '\\0') {\n end--;\n }\n return decoded.slice(0, end).trim();\n}\n\nfunction sanitizeExtraBytesName(name: string): string {\n return name.trim().replace(/[^A-Za-z0-9_]+/g, '_');\n}\n\nfunction getExtraBytesScalarDataType(dataType: number): number {\n return dataType > 20 ? dataType - 20 : dataType > 10 ? dataType - 10 : dataType;\n}\n\nfunction getExtraBytesComponentCount(dataType: number): number {\n return dataType > 20 ? 3 : dataType > 10 ? 2 : 1;\n}\n\nfunction getExtraBytesScalarByteLength(dataType: number): number {\n if (dataType <= 2) return 1;\n if (dataType <= 4) return 2;\n if (dataType <= 6 || dataType === 9) return 4;\n if (dataType === 7 || dataType === 8 || dataType === 10) return 8;\n return 0;\n}\n\nfunction readExtraBytesValue(\n dataView: DataView,\n offset: number,\n scalarDataType: number\n): number | bigint {\n switch (scalarDataType) {\n case 1:\n return dataView.getUint8(offset);\n case 2:\n return dataView.getInt8(offset);\n case 3:\n return dataView.getUint16(offset, true);\n case 4:\n return dataView.getInt16(offset, true);\n case 5:\n return dataView.getUint32(offset, true);\n case 6:\n return dataView.getInt32(offset, true);\n case 7:\n return dataView.getBigUint64(offset, true);\n case 8:\n return dataView.getBigInt64(offset, true);\n case 9:\n return dataView.getFloat32(offset, true);\n case 10:\n return dataView.getFloat64(offset, true);\n default:\n throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);\n }\n}\n\n/** Allocate the typed-array representation for one LAS Extra Bytes scalar type. */\nexport function createLASTypedExtraBytesValue(\n scalarDataType: number,\n length: number,\n outputFloat64: boolean\n): LASTypedExtraBytesValue {\n if (outputFloat64 && scalarDataType !== 10) return new Float64Array(length);\n switch (scalarDataType) {\n case 1:\n return new Uint8Array(length);\n case 2:\n return new Int8Array(length);\n case 3:\n return new Uint16Array(length);\n case 4:\n return new Int16Array(length);\n case 5:\n return new Uint32Array(length);\n case 6:\n return new Int32Array(length);\n case 7:\n return new BigUint64Array(length);\n case 8:\n return new BigInt64Array(length);\n case 9:\n return new Float32Array(length);\n case 10:\n return new Float64Array(length);\n default:\n throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);\n }\n}\n\n/** Decode one descriptor component, retaining integer precision unless a transform is requested. */\nexport function populateLASTypedExtraBytesComponent(\n dataView: DataView,\n sourceOffset: number,\n attribute: LASTypedExtraBytesAttribute,\n targetOffset: number,\n componentIndex: number\n): void {\n const value = readExtraBytesValue(dataView, sourceOffset, attribute.scalarDataType);\n if (attribute.value instanceof BigInt64Array || attribute.value instanceof BigUint64Array) {\n attribute.value[targetOffset] = value as bigint;\n } else {\n attribute.value[targetOffset] =\n Number(value) * attribute.scales[componentIndex] + attribute.offsets[componentIndex];\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,35 @@
1
+ import type { LASExtraBytesDescriptor } from "./las-types.js";
2
+ /** Typed-array values supported for LAS Extra Bytes Arrow attributes. */
3
+ export type LASTypedExtraBytesValue = Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;
4
+ /** Prepared typed LAS Extra Bytes attribute and its source-record layout. */
5
+ export type LASTypedExtraBytesAttribute = {
6
+ /** Stable Arrow attribute name. */
7
+ name: string;
8
+ /** Typed output values. */
9
+ value: LASTypedExtraBytesValue;
10
+ /** Number of components per point. */
11
+ size: number;
12
+ /** LAS scalar data type code. */
13
+ scalarDataType: number;
14
+ /** Byte offset within the packed Extra Bytes record. */
15
+ byteOffset: number;
16
+ /** Total source byte length per point. */
17
+ byteLength: number;
18
+ /** Per-component scales. */
19
+ scales: number[];
20
+ /** Per-component offsets. */
21
+ offsets: number[];
22
+ /** Whether transformed integer values require Float64 output. */
23
+ outputFloat64: boolean;
24
+ };
25
+ /** Parse the 192-byte descriptors in an LAS Extra Bytes VLR payload. */
26
+ export declare function parseLASExtraBytes(data: Uint8Array): LASExtraBytesDescriptor[];
27
+ /** Allocate typed Arrow attributes described by an LAS Extra Bytes VLR. */
28
+ export declare function createLASTypedExtraBytesAttributes(pointCount: number, descriptors: readonly LASExtraBytesDescriptor[], extraByteCount: number): LASTypedExtraBytesAttribute[];
29
+ /** Populate typed attributes from packed Extra Bytes records. */
30
+ export declare function populateLASTypedExtraBytes(rawExtraBytes: Uint8Array, pointCount: number, extraByteCount: number, attributes: readonly LASTypedExtraBytesAttribute[]): void;
31
+ /** Allocate the typed-array representation for one LAS Extra Bytes scalar type. */
32
+ export declare function createLASTypedExtraBytesValue(scalarDataType: number, length: number, outputFloat64: boolean): LASTypedExtraBytesValue;
33
+ /** Decode one descriptor component, retaining integer precision unless a transform is requested. */
34
+ export declare function populateLASTypedExtraBytesComponent(dataView: DataView, sourceOffset: number, attribute: LASTypedExtraBytesAttribute, targetOffset: number, componentIndex: number): void;
35
+ //# sourceMappingURL=las-extra-bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-extra-bytes.d.ts","sourceRoot":"","sources":["../../../src/las/lib/las-extra-bytes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,uBAAuB,EAAC,uBAAoB;AAEzD,yEAAyE;AACzE,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,SAAS,GACT,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,cAAc,CAAC;AAEnB,6EAA6E;AAC7E,MAAM,MAAM,2BAA2B,GAAG;IACxC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,uBAAuB,EAAE,CA8B9E;AAED,2EAA2E;AAC3E,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,SAAS,uBAAuB,EAAE,EAC/C,cAAc,EAAE,MAAM,GACrB,2BAA2B,EAAE,CAoD/B;AAED,iEAAiE;AACjE,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,UAAU,EACzB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,IAAI,CA0BN;AA8DD,mFAAmF;AACnF,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,GACrB,uBAAuB,CA0BzB;AAED,oGAAoG;AACpG,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,2BAA2B,EACtC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,IAAI,CAQN"}
@@ -0,0 +1,197 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Parse the 192-byte descriptors in an LAS Extra Bytes VLR payload. */
5
+ export function parseLASExtraBytes(data) {
6
+ if (data.byteLength % 192 !== 0) {
7
+ throw new Error(`LAS Extra Bytes VLR length ${data.byteLength} is not a multiple of 192`);
8
+ }
9
+ const descriptors = [];
10
+ const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
11
+ for (let descriptorOffset = 0; descriptorOffset < data.byteLength; descriptorOffset += 192) {
12
+ const scales = [
13
+ dataView.getFloat64(descriptorOffset + 112, true),
14
+ dataView.getFloat64(descriptorOffset + 120, true),
15
+ dataView.getFloat64(descriptorOffset + 128, true)
16
+ ];
17
+ const offsets = [
18
+ dataView.getFloat64(descriptorOffset + 136, true),
19
+ dataView.getFloat64(descriptorOffset + 144, true),
20
+ dataView.getFloat64(descriptorOffset + 152, true)
21
+ ];
22
+ descriptors.push({
23
+ dataType: data[descriptorOffset + 2],
24
+ options: data[descriptorOffset + 3],
25
+ name: readLASString(data, descriptorOffset + 4, 32),
26
+ description: readLASString(data, descriptorOffset + 160, 32),
27
+ scale: scales[0],
28
+ offset: offsets[0],
29
+ scales,
30
+ offsets,
31
+ data: data.slice(descriptorOffset, descriptorOffset + 192)
32
+ });
33
+ }
34
+ return descriptors;
35
+ }
36
+ /** Allocate typed Arrow attributes described by an LAS Extra Bytes VLR. */
37
+ export function createLASTypedExtraBytesAttributes(pointCount, descriptors, extraByteCount) {
38
+ let byteOffset = 0;
39
+ const usedNames = new Set();
40
+ const attributes = [];
41
+ for (let descriptorIndex = 0; descriptorIndex < descriptors.length; descriptorIndex++) {
42
+ const descriptor = descriptors[descriptorIndex];
43
+ const scalarDataType = getExtraBytesScalarDataType(descriptor.dataType);
44
+ const size = getExtraBytesComponentCount(descriptor.dataType);
45
+ const scalarByteLength = getExtraBytesScalarByteLength(scalarDataType);
46
+ const byteLength = scalarByteLength * size;
47
+ if (descriptor.dataType < 1 || descriptor.dataType > 30 || !byteLength) {
48
+ throw new Error(`Unsupported typed LAS Extra Bytes data type ${descriptor.dataType}`);
49
+ }
50
+ let name = `EXTRA_BYTES_${sanitizeExtraBytesName(descriptor.name)}`;
51
+ if (name === 'EXTRA_BYTES_') {
52
+ name = `EXTRA_BYTES_${descriptorIndex}`;
53
+ }
54
+ const baseName = name;
55
+ let suffix = 1;
56
+ while (usedNames.has(name)) {
57
+ name = `${baseName}_${suffix++}`;
58
+ }
59
+ usedNames.add(name);
60
+ const scales = descriptor.options & 0x08 ? descriptor.scales.slice(0, size) : new Array(size).fill(1);
61
+ const offsets = descriptor.options & 0x10 ? descriptor.offsets.slice(0, size) : new Array(size).fill(0);
62
+ const isBigInt = scalarDataType === 7 || scalarDataType === 8;
63
+ const outputFloat64 = scalarDataType !== 10 &&
64
+ (isBigInt
65
+ ? scales.some(scale => scale !== 1) || offsets.some(offset => offset !== 0)
66
+ : Boolean(descriptor.options & 0x18));
67
+ attributes.push({
68
+ name,
69
+ value: createLASTypedExtraBytesValue(scalarDataType, pointCount * size, outputFloat64),
70
+ size,
71
+ scalarDataType,
72
+ byteOffset,
73
+ byteLength,
74
+ outputFloat64,
75
+ scales,
76
+ offsets
77
+ });
78
+ byteOffset += byteLength;
79
+ }
80
+ if (byteOffset !== extraByteCount) {
81
+ throw new Error(`LAS Extra Bytes descriptors use ${byteOffset} bytes; point records provide ${extraByteCount}`);
82
+ }
83
+ return attributes;
84
+ }
85
+ /** Populate typed attributes from packed Extra Bytes records. */
86
+ export function populateLASTypedExtraBytes(rawExtraBytes, pointCount, extraByteCount, attributes) {
87
+ if (rawExtraBytes.byteLength < pointCount * extraByteCount) {
88
+ throw new Error('Packed LAS Extra Bytes data is truncated');
89
+ }
90
+ const dataView = new DataView(rawExtraBytes.buffer, rawExtraBytes.byteOffset, rawExtraBytes.byteLength);
91
+ for (let pointIndex = 0; pointIndex < pointCount; pointIndex++) {
92
+ const recordOffset = pointIndex * extraByteCount;
93
+ for (const attribute of attributes) {
94
+ const targetOffset = pointIndex * attribute.size;
95
+ const sourceOffset = recordOffset + attribute.byteOffset;
96
+ const scalarByteLength = getExtraBytesScalarByteLength(attribute.scalarDataType);
97
+ for (let componentIndex = 0; componentIndex < attribute.size; componentIndex++) {
98
+ populateLASTypedExtraBytesComponent(dataView, sourceOffset + componentIndex * scalarByteLength, attribute, targetOffset + componentIndex, componentIndex);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ function readLASString(bytes, offset, length) {
104
+ const decoded = new TextDecoder().decode(bytes.subarray(offset, offset + length));
105
+ let end = decoded.length;
106
+ while (end > 0 && decoded[end - 1] === '\0') {
107
+ end--;
108
+ }
109
+ return decoded.slice(0, end).trim();
110
+ }
111
+ function sanitizeExtraBytesName(name) {
112
+ return name.trim().replace(/[^A-Za-z0-9_]+/g, '_');
113
+ }
114
+ function getExtraBytesScalarDataType(dataType) {
115
+ return dataType > 20 ? dataType - 20 : dataType > 10 ? dataType - 10 : dataType;
116
+ }
117
+ function getExtraBytesComponentCount(dataType) {
118
+ return dataType > 20 ? 3 : dataType > 10 ? 2 : 1;
119
+ }
120
+ function getExtraBytesScalarByteLength(dataType) {
121
+ if (dataType <= 2)
122
+ return 1;
123
+ if (dataType <= 4)
124
+ return 2;
125
+ if (dataType <= 6 || dataType === 9)
126
+ return 4;
127
+ if (dataType === 7 || dataType === 8 || dataType === 10)
128
+ return 8;
129
+ return 0;
130
+ }
131
+ function readExtraBytesValue(dataView, offset, scalarDataType) {
132
+ switch (scalarDataType) {
133
+ case 1:
134
+ return dataView.getUint8(offset);
135
+ case 2:
136
+ return dataView.getInt8(offset);
137
+ case 3:
138
+ return dataView.getUint16(offset, true);
139
+ case 4:
140
+ return dataView.getInt16(offset, true);
141
+ case 5:
142
+ return dataView.getUint32(offset, true);
143
+ case 6:
144
+ return dataView.getInt32(offset, true);
145
+ case 7:
146
+ return dataView.getBigUint64(offset, true);
147
+ case 8:
148
+ return dataView.getBigInt64(offset, true);
149
+ case 9:
150
+ return dataView.getFloat32(offset, true);
151
+ case 10:
152
+ return dataView.getFloat64(offset, true);
153
+ default:
154
+ throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);
155
+ }
156
+ }
157
+ /** Allocate the typed-array representation for one LAS Extra Bytes scalar type. */
158
+ export function createLASTypedExtraBytesValue(scalarDataType, length, outputFloat64) {
159
+ if (outputFloat64 && scalarDataType !== 10)
160
+ return new Float64Array(length);
161
+ switch (scalarDataType) {
162
+ case 1:
163
+ return new Uint8Array(length);
164
+ case 2:
165
+ return new Int8Array(length);
166
+ case 3:
167
+ return new Uint16Array(length);
168
+ case 4:
169
+ return new Int16Array(length);
170
+ case 5:
171
+ return new Uint32Array(length);
172
+ case 6:
173
+ return new Int32Array(length);
174
+ case 7:
175
+ return new BigUint64Array(length);
176
+ case 8:
177
+ return new BigInt64Array(length);
178
+ case 9:
179
+ return new Float32Array(length);
180
+ case 10:
181
+ return new Float64Array(length);
182
+ default:
183
+ throw new Error(`Unsupported typed LAS Extra Bytes scalar data type ${scalarDataType}`);
184
+ }
185
+ }
186
+ /** Decode one descriptor component, retaining integer precision unless a transform is requested. */
187
+ export function populateLASTypedExtraBytesComponent(dataView, sourceOffset, attribute, targetOffset, componentIndex) {
188
+ const value = readExtraBytesValue(dataView, sourceOffset, attribute.scalarDataType);
189
+ if (attribute.value instanceof BigInt64Array || attribute.value instanceof BigUint64Array) {
190
+ attribute.value[targetOffset] = value;
191
+ }
192
+ else {
193
+ attribute.value[targetOffset] =
194
+ Number(value) * attribute.scales[componentIndex] + attribute.offsets[componentIndex];
195
+ }
196
+ }
197
+ //# sourceMappingURL=las-extra-bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"las-extra-bytes.js","sourceRoot":"","sources":["../../../src/las/lib/las-extra-bytes.ts"],"names":[],"mappings":"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"}