@loaders.gl/potree 4.4.0-alpha.2 → 4.4.0-alpha.9

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 (47) hide show
  1. package/README.md +1 -1
  2. package/dist/dist.dev.js +6135 -710
  3. package/dist/dist.min.js +20 -17
  4. package/dist/index.cjs +106 -12
  5. package/dist/index.cjs.map +4 -4
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/octree.js +1 -0
  11. package/dist/lib/octree.js.map +1 -0
  12. package/dist/lib/potree-node-source.d.ts +42 -6
  13. package/dist/lib/potree-node-source.d.ts.map +1 -1
  14. package/dist/lib/potree-node-source.js +91 -9
  15. package/dist/lib/potree-node-source.js.map +1 -0
  16. package/dist/parsers/parse-potree-bin.js +1 -0
  17. package/dist/parsers/parse-potree-bin.js.map +1 -0
  18. package/dist/parsers/parse-potree-hierarchy-chunk.d.ts +10 -0
  19. package/dist/parsers/parse-potree-hierarchy-chunk.d.ts.map +1 -1
  20. package/dist/parsers/parse-potree-hierarchy-chunk.js +3 -0
  21. package/dist/parsers/parse-potree-hierarchy-chunk.js.map +1 -0
  22. package/dist/potree-bin-loader.js +1 -0
  23. package/dist/potree-bin-loader.js.map +1 -0
  24. package/dist/potree-hierarchy-chunk-loader.js +2 -1
  25. package/dist/potree-hierarchy-chunk-loader.js.map +1 -0
  26. package/dist/potree-loader.js +2 -1
  27. package/dist/potree-loader.js.map +1 -0
  28. package/dist/potree-source.js +1 -0
  29. package/dist/potree-source.js.map +1 -0
  30. package/dist/types/potree-metadata.js +1 -0
  31. package/dist/types/potree-metadata.js.map +1 -0
  32. package/dist/utils/bounding-box-utils.d.ts +9 -0
  33. package/dist/utils/bounding-box-utils.d.ts.map +1 -0
  34. package/dist/utils/bounding-box-utils.js +23 -0
  35. package/dist/utils/bounding-box-utils.js.map +1 -0
  36. package/dist/utils/parse-version.js +1 -0
  37. package/dist/utils/parse-version.js.map +1 -0
  38. package/dist/utils/projection-utils.d.ts +8 -0
  39. package/dist/utils/projection-utils.d.ts.map +1 -0
  40. package/dist/utils/projection-utils.js +16 -0
  41. package/dist/utils/projection-utils.js.map +1 -0
  42. package/package.json +7 -6
  43. package/src/index.ts +2 -0
  44. package/src/lib/potree-node-source.ts +110 -15
  45. package/src/parsers/parse-potree-hierarchy-chunk.ts +12 -0
  46. package/src/utils/bounding-box-utils.ts +27 -0
  47. package/src/utils/projection-utils.ts +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-node-source.js","sourceRoot":"","sources":["../../src/lib/potree-node-source.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export function parsePotreeBin(arrayBuffer, byteOffset, options, index) {
2
2
  return null;
3
3
  }
4
+ //# sourceMappingURL=parse-potree-bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-potree-bin.js","sourceRoot":"","sources":["../../src/parsers/parse-potree-bin.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,WAAwB,EACxB,UAAkB,EAClB,OAAgB,EAChB,KAAU;IAEV,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -9,6 +9,8 @@ export type POTreeTileHeader = {
9
9
  };
10
10
  /** Hierarchical potree node structure */
11
11
  export type POTreeNode = {
12
+ id: string;
13
+ type: 'pointcloud';
12
14
  /** Index data */
13
15
  header: POTreeTileHeader;
14
16
  /** Human readable name */
@@ -25,6 +27,14 @@ export type POTreeNode = {
25
27
  children: POTreeNode[];
26
28
  /** All children including unavailable */
27
29
  childrenByIndex: POTreeNode[];
30
+ /** Is tile selected for rendering */
31
+ selected: boolean;
32
+ /** Points content data */
33
+ content?: unknown;
34
+ /** Is content loading */
35
+ isContentLoading?: boolean;
36
+ /** Viewport Ids */
37
+ viewportIds: unknown[];
28
38
  };
29
39
  /**
30
40
  * load hierarchy
@@ -1 +1 @@
1
- {"version":3,"file":"parse-potree-hierarchy-chunk.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-potree-hierarchy-chunk.ts"],"names":[],"mappings":"AAwDA,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG;IACvB,iBAAiB;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,yCAAyC;IACzC,eAAe,EAAE,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;IAII;AACJ,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAG9E"}
1
+ {"version":3,"file":"parse-potree-hierarchy-chunk.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-potree-hierarchy-chunk.ts"],"names":[],"mappings":"AAwDA,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,iBAAiB;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,yCAAyC;IACzC,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB;IACnB,WAAW,EAAE,OAAO,EAAE,CAAC;CACxB,CAAC;AAEF;;;;IAII;AACJ,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAG9E"}
@@ -79,6 +79,8 @@ function buildHierarchy(flatNodes, options = {}) {
79
79
  node.children = [];
80
80
  node.childrenByIndex = new Array(8).fill(null);
81
81
  node.spacing = (options?.spacing || 0) / Math.pow(2, level);
82
+ node.type = 'pointcloud';
83
+ node.id = node.name;
82
84
  // tileHeader.boundingVolume = Utils.createChildAABB(parentNode.boundingBox, index);
83
85
  if (parentNode) {
84
86
  parentNode.children.push(node);
@@ -90,3 +92,4 @@ function buildHierarchy(flatNodes, options = {}) {
90
92
  // First node is the root
91
93
  return topNode;
92
94
  }
95
+ //# sourceMappingURL=parse-potree-hierarchy-chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-potree-hierarchy-chunk.js","sourceRoot":"","sources":["../../src/parsers/parse-potree-hierarchy-chunk.ts"],"names":[],"mappings":"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"}
@@ -25,3 +25,4 @@ function parseSync(arrayBuffer, options) {
25
25
  parsePotreeBin(arrayBuffer, byteOffset, options, index);
26
26
  return index;
27
27
  }
28
+ //# sourceMappingURL=potree-bin-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-bin-loader.js","sourceRoot":"","sources":["../src/potree-bin-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,gCAAgC;AAGhC,OAAO,EAAC,cAAc,EAAC,sCAAmC;AAE1D;;KAEK;AACL,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,IAAqB;IAC/B,SAAS,EAAE,IAAa;IAExB,IAAI,EAAE,gCAAgC;IACtC,EAAE,EAAE,QAAQ;IACZ,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,SAAS,EAAE,CAAC,0BAA0B,CAAC;IACvC,2EAA2E;IAC3E,iBAAiB;IACjB,SAAS;IACT,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,aAAa;CACgD,CAAC;AAEhE,SAAS,SAAS,CAAC,WAAwB,EAAE,OAAuB;IAClE,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -4,7 +4,7 @@
4
4
  import { parsePotreeHierarchyChunk } from "./parsers/parse-potree-hierarchy-chunk.js";
5
5
  // __VERSION__ is injected by babel-plugin-version-inline
6
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
- const VERSION = typeof "4.4.0-alpha.1" !== 'undefined' ? "4.4.0-alpha.1" : 'latest';
7
+ const VERSION = typeof "4.4.0-alpha.9" !== 'undefined' ? "4.4.0-alpha.9" : 'latest';
8
8
  /** Potree hierarchy chunk loader */
9
9
  export const PotreeHierarchyChunkLoader = {
10
10
  dataType: null,
@@ -24,3 +24,4 @@ export const PotreeHierarchyChunkLoader = {
24
24
  },
25
25
  binary: true
26
26
  };
27
+ //# sourceMappingURL=potree-hierarchy-chunk-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-hierarchy-chunk-loader.js","sourceRoot":"","sources":["../src/potree-hierarchy-chunk-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,gCAAgC;AAKhC,OAAO,EAAC,yBAAyB,EAAC,kDAA+C;AAEjF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,sBAAkB,KAAK,WAAW,CAAC,CAAC,iBAAa,CAAC,CAAC,QAAQ,CAAC;AAE5E,oCAAoC;AACpC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,IAA6B;IACvC,SAAS,EAAE,IAAa;IAExB,IAAI,EAAE,wBAAwB;IAC9B,EAAE,EAAE,YAAY;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,SAAS,EAAE,CAAC,0BAA0B,CAAC;IACvC,8EAA8E;IAC9E,iBAAiB;IACjB,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,WAAW,CAAC;IAC7E,SAAS,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,WAAW,CAAC;IAC3E,OAAO,EAAE;QACP,MAAM,EAAE,EAAE;KACX;IACD,MAAM,EAAE,IAAI;CAC+D,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // Copyright vis.gl contributors
4
4
  // __VERSION__ is injected by babel-plugin-version-inline
5
5
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
6
- const VERSION = typeof "4.4.0-alpha.1" !== 'undefined' ? "4.4.0-alpha.1" : 'latest';
6
+ const VERSION = typeof "4.4.0-alpha.9" !== 'undefined' ? "4.4.0-alpha.9" : 'latest';
7
7
  /** Potree loader */
8
8
  export const PotreeLoader = {
9
9
  dataType: null,
@@ -21,3 +21,4 @@ export const PotreeLoader = {
21
21
  potree: {}
22
22
  }
23
23
  };
24
+ //# sourceMappingURL=potree-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-loader.js","sourceRoot":"","sources":["../src/potree-loader.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,gCAAgC;AAIhC,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,sBAAkB,KAAK,WAAW,CAAC,CAAC,iBAAa,CAAC,CAAC,QAAQ,CAAC;AAM5E,oBAAoB;AACpB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,IAAsB;IAChC,SAAS,EAAE,IAAa;IAExB,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,SAAS,EAAE,CAAC,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;IAClD,KAAK,EAAE,CAAC,IAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,OAAO,EAAE;QACP,MAAM,EAAE,EAAE;KACX;CACmE,CAAC"}
@@ -22,3 +22,4 @@ export const PotreeSource = {
22
22
  testURL: (url) => url.endsWith('.js'),
23
23
  createDataSource: (url, options) => new PotreeNodesSource(url, options) // , PotreeNodesSource.defaultOptions)
24
24
  };
25
+ //# sourceMappingURL=potree-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-source.js","sourceRoot":"","sources":["../src/potree-source.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,iBAAiB,EAAC,oCAAiC;AAE3D,MAAM,OAAO,GAAG,KAAK,CAAC;AAMtB;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACjC,SAAS,EAAE,CAAC,0BAA0B,CAAC;IACvC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IAEd,cAAc,EAAE;QACd,MAAM,EAAE,EAAE;KACX;IAED,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAW,EAAE,OAA4B,EAAE,EAAE,CAC9D,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,sCAAsC;CAChC,CAAC"}
@@ -2,3 +2,4 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  export {};
5
+ //# sourceMappingURL=potree-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"potree-metadata.js","sourceRoot":"","sources":["../../src/types/potree-metadata.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC"}
@@ -0,0 +1,9 @@
1
+ import { Proj4Projection } from '@math.gl/proj4';
2
+ /**
3
+ * Calculate cartographic origin from Potree bounding box
4
+ * @param projection - Proj4Projection instance to reproject coordinates
5
+ * @param boundingBox - bounding box data
6
+ * @returns - origin of boudngin box in [lng, lat, z] mode
7
+ */
8
+ export declare const getCartographicOriginFromBoundingBox: (projection: Proj4Projection | null, boundingBox?: [number[], number[]]) => number[];
9
+ //# sourceMappingURL=bounding-box-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounding-box-utils.d.ts","sourceRoot":"","sources":["../../src/utils/bounding-box-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,eACnC,eAAe,GAAG,IAAI,gBACpB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,KACjC,MAAM,EAeR,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Calculate cartographic origin from Potree bounding box
3
+ * @param projection - Proj4Projection instance to reproject coordinates
4
+ * @param boundingBox - bounding box data
5
+ * @returns - origin of boudngin box in [lng, lat, z] mode
6
+ */
7
+ export const getCartographicOriginFromBoundingBox = (projection, boundingBox) => {
8
+ if (!boundingBox) {
9
+ return [0, 0, 0];
10
+ }
11
+ const [minXOriginal, minYOriginal, minZ] = boundingBox[0];
12
+ const [maxXOriginal, maxYOriginal, maxZ] = boundingBox[1];
13
+ let minX = minXOriginal;
14
+ let minY = minYOriginal;
15
+ let maxX = maxXOriginal;
16
+ let maxY = maxYOriginal;
17
+ if (projection) {
18
+ [minX, minY] = projection.project([minX, minY]);
19
+ [maxX, maxY] = projection.project([maxX, maxY]);
20
+ }
21
+ return [minX + (maxX - minX) / 2, minY + (maxY - minY) / 2, minZ + (maxZ - minZ) / 2];
22
+ };
23
+ //# sourceMappingURL=bounding-box-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounding-box-utils.js","sourceRoot":"","sources":["../../src/utils/bounding-box-utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,UAAkC,EAClC,WAAkC,EACxB,EAAE;IACZ,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,IAAI,UAAU,EAAE,CAAC;QACf,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC"}
@@ -5,3 +5,4 @@ export function parseVersion(version) {
5
5
  const parts = version.split('.').map(Number);
6
6
  return { major: parts[0], minor: parts[1] };
7
7
  }
8
+ //# sourceMappingURL=parse-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-version.js","sourceRoot":"","sources":["../../src/utils/parse-version.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Proj4Projection } from '@math.gl/proj4';
2
+ /**
3
+ * Create projection from proj4 definition to WGS84
4
+ * @param projectionData - proj4 definition
5
+ * @returns projection instance
6
+ */
7
+ export declare const createProjection: (projectionData?: string) => Proj4Projection | null;
8
+ //# sourceMappingURL=projection-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-utils.d.ts","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oBAAqB,MAAM,KAAG,eAAe,GAAG,IAQ5E,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Proj4Projection } from '@math.gl/proj4';
2
+ /**
3
+ * Create projection from proj4 definition to WGS84
4
+ * @param projectionData - proj4 definition
5
+ * @returns projection instance
6
+ */
7
+ export const createProjection = (projectionData) => {
8
+ if (!projectionData) {
9
+ return null;
10
+ }
11
+ return new Proj4Projection({
12
+ from: projectionData,
13
+ to: 'WGS84'
14
+ });
15
+ };
16
+ //# sourceMappingURL=projection-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-utils.js","sourceRoot":"","sources":["../../src/utils/projection-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAuB,EAA0B,EAAE;IAClF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,OAAO;KACZ,CAAC,CAAC;AACL,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/potree",
3
- "version": "4.4.0-alpha.2",
3
+ "version": "4.4.0-alpha.9",
4
4
  "description": "potree loaders for large point clouds.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -44,13 +44,14 @@
44
44
  "build-bundle-dev": "ocular-bundle ./bundle.ts --env=dev --output=dist/dist.dev.js"
45
45
  },
46
46
  "dependencies": {
47
- "@loaders.gl/las": "4.4.0-alpha.2",
48
- "@loaders.gl/math": "4.4.0-alpha.2",
49
- "@loaders.gl/schema": "4.4.0-alpha.2",
50
- "@math.gl/core": "^4.1.0"
47
+ "@loaders.gl/las": "4.4.0-alpha.9",
48
+ "@loaders.gl/math": "4.4.0-alpha.9",
49
+ "@loaders.gl/schema": "4.4.0-alpha.9",
50
+ "@math.gl/core": "^4.1.0",
51
+ "@math.gl/proj4": "^4.1.0"
51
52
  },
52
53
  "peerDependencies": {
53
54
  "@loaders.gl/core": "4.4.0-alpha.1"
54
55
  },
55
- "gitHead": "3d9fed050eabdc0812ddf2f4d5fb9914a34ee0c2"
56
+ "gitHead": "e9e6710379718c7663e97eba868c76e15de4cb84"
56
57
  }
package/src/index.ts CHANGED
@@ -2,3 +2,5 @@ export {PotreeLoader} from './potree-loader';
2
2
  export {PotreeHierarchyChunkLoader} from './potree-hierarchy-chunk-loader';
3
3
  export {PotreeBinLoader} from './potree-bin-loader';
4
4
  export {PotreeSource} from './potree-source';
5
+
6
+ export {type POTreeNode} from './parsers/parse-potree-hierarchy-chunk';
@@ -2,16 +2,53 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ import type {PotreeSourceOptions} from '../potree-source';
5
6
  import {load} from '@loaders.gl/core';
6
7
  import {Mesh} from '@loaders.gl/schema';
7
8
  import {DataSource, resolvePath} from '@loaders.gl/loader-utils';
8
9
  import {LASLoader} from '@loaders.gl/las';
9
- import {PotreeMetadata} from '../types/potree-metadata';
10
+ import {PotreeBoundingBox, PotreeMetadata} from '../types/potree-metadata';
10
11
  import {POTreeNode} from '../parsers/parse-potree-hierarchy-chunk';
11
12
  import {PotreeHierarchyChunkLoader} from '../potree-hierarchy-chunk-loader';
12
13
  import {PotreeLoader} from '../potree-loader';
13
14
  import {parseVersion} from '../utils/parse-version';
14
- import type {PotreeSourceOptions} from '../potree-source';
15
+ import {Proj4Projection} from '@math.gl/proj4';
16
+ import {LASMesh} from '@loaders.gl/las/src/lib/las-types';
17
+ import {createProjection} from '../utils/projection-utils';
18
+ import {getCartographicOriginFromBoundingBox} from '../utils/bounding-box-utils';
19
+
20
+ // https://github.com/visgl/deck.gl/blob/9548f43cba2234a1f4877b6b17f6c88eb35b2e08/modules/core/src/lib/constants.js#L27
21
+ // Describes the format of positions
22
+ export enum COORDINATE_SYSTEM {
23
+ /**
24
+ * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise
25
+ */
26
+ DEFAULT = -1,
27
+ /**
28
+ * Positions are interpreted as [lng, lat, elevation]
29
+ * lng lat are degrees, elevation is meters. distances as meters.
30
+ */
31
+ LNGLAT = 1,
32
+ /**
33
+ * Positions are interpreted as meter offsets, distances as meters
34
+ */
35
+ METER_OFFSETS = 2,
36
+ /**
37
+ * Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]
38
+ * deltaLng, deltaLat are delta degrees, elevation is meters.
39
+ * distances as meters.
40
+ */
41
+ LNGLAT_OFFSETS = 3,
42
+ /**
43
+ * Non-geospatial
44
+ */
45
+ CARTESIAN = 0
46
+ }
47
+
48
+ export interface PotreeNodeMesh extends LASMesh {
49
+ cartographicOrigin: number[];
50
+ coordinateSystem: number;
51
+ }
15
52
 
16
53
  /**
17
54
  * A Potree data source
@@ -28,6 +65,10 @@ export class PotreeNodesSource extends DataSource<string, PotreeSourceOptions> {
28
65
  root: POTreeNode | null = null;
29
66
  /** Is data source ready to use after initial loading */
30
67
  isReady = false;
68
+ /** local CRS to WGS84 projection */
69
+ projection: Proj4Projection | null = null;
70
+ /** The data set minimum bounding box */
71
+ boundingBox?: PotreeBoundingBox;
31
72
 
32
73
  private initPromise: Promise<void> | null = null;
33
74
 
@@ -51,6 +92,9 @@ export class PotreeNodesSource extends DataSource<string, PotreeSourceOptions> {
51
92
  return;
52
93
  }
53
94
  this.metadata = await load(`${this.baseUrl}/cloud.js`, PotreeLoader);
95
+ this.projection = createProjection(this.metadata?.projection);
96
+ this.parseBoundingVolume();
97
+
54
98
  await this.loadHierarchy();
55
99
  this.isReady = true;
56
100
  }
@@ -84,36 +128,61 @@ export class PotreeNodesSource extends DataSource<string, PotreeSourceOptions> {
84
128
 
85
129
  /**
86
130
  * Load octree node content
87
- * @param path array of numbers between 0-7 specifying successive octree divisions.
131
+ * @param nodeName name of a node, string of numbers in range 0..7
88
132
  * @return node content geometry or null if the node doesn't exist
89
133
  */
90
- async loadNodeContent(path: number[]): Promise<Mesh | null> {
134
+ async loadNodeContent(nodeName: string): Promise<Mesh | null> {
91
135
  await this.initPromise;
92
136
 
93
137
  if (!this.isSupported()) {
94
138
  return null;
95
139
  }
96
140
 
97
- const isAvailable = await this.isNodeAvailable(path);
141
+ const isAvailable = await this.isNodeAvailable(nodeName);
98
142
  if (isAvailable) {
99
- return load(
100
- `${this.baseUrl}/${this.metadata?.octreeDir}/r/r${path.join(
101
- ''
102
- )}.${this.getContentExtension()}`,
143
+ const result: PotreeNodeMesh = (await load(
144
+ `${this.baseUrl}/${this.metadata?.octreeDir}/r/r${nodeName}.${this.getContentExtension()}`,
103
145
  LASLoader
104
- );
146
+ )) as PotreeNodeMesh;
147
+
148
+ if (result) {
149
+ result.cartographicOrigin = getCartographicOriginFromBoundingBox(
150
+ this.projection,
151
+ result.header?.boundingBox
152
+ );
153
+ const position = result.attributes.POSITION.value as Float32Array;
154
+ for (let i = 0; i < (result.header?.vertexCount ?? 0); i++) {
155
+ let vertex: Float32Array | number[] = position.slice(i * 3, i * 3 + 2);
156
+ if (this.projection) {
157
+ vertex = this.projection.project(Array.from(vertex));
158
+ }
159
+
160
+ const offsets = [
161
+ vertex[0] - result.cartographicOrigin[0],
162
+ vertex[1] - result.cartographicOrigin[1],
163
+ position[i * 3 + 2] - result.cartographicOrigin[2]
164
+ ];
165
+ position.set(offsets, i * 3);
166
+ }
167
+ result.attributes.positions = result.attributes.POSITION;
168
+ result.attributes.colors = result.attributes.COLOR_0;
169
+ result.attributes.normals = result.attributes.NORMAL;
170
+
171
+ result.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;
172
+ return result;
173
+ }
105
174
  }
106
175
  return null;
107
176
  }
108
177
 
109
178
  /**
110
179
  * Check if a node exists in the octree
111
- * @param path array of numbers between 0-7 specifying successive octree divisions
180
+ * @param nodeName name of a node, string of numbers in range 0..7
112
181
  * @returns true - the node does exist, false - the nodes doesn't exist
113
182
  */
114
- async isNodeAvailable(path: number[]): Promise<boolean> {
183
+ async isNodeAvailable(nodeName: string): Promise<boolean> {
115
184
  if (this.metadata?.hierarchy) {
116
- return this.metadata.hierarchy.findIndex((item) => item[0] === `r${path.join()}`) !== -1;
185
+ return this.metadata.hierarchy.findIndex((item) => item[0] === `r${nodeName}`) !== -1;
117
186
  }
118
187
 
119
188
  if (!this.root) {
@@ -122,8 +191,8 @@ export class PotreeNodesSource extends DataSource<string, PotreeSourceOptions> {
122
191
  let currentParent = this.root;
123
192
  let name = '';
124
193
  let result = true;
125
- for (const nodeLevel of path) {
126
- const newName = `${name}${nodeLevel}`;
194
+ for (const char of nodeName) {
195
+ const newName = `${name}${char}`;
127
196
  const node = currentParent.children.find((child) => child.name === newName);
128
197
  if (node) {
129
198
  currentParent = node;
@@ -159,4 +228,30 @@ export class PotreeNodesSource extends DataSource<string, PotreeSourceOptions> {
159
228
  this.baseUrl = this.baseUrl.substring(0, -1);
160
229
  }
161
230
  }
231
+
232
+ private parseBoundingVolume(): void {
233
+ if (this.metadata?.projection && this.metadata.tightBoundingBox) {
234
+ const projection = new Proj4Projection({
235
+ from: this.metadata.projection,
236
+ to: 'WGS84'
237
+ });
238
+
239
+ const {lx, ly, ux, uy} = this.metadata.tightBoundingBox;
240
+ const lCoord = [lx, ly];
241
+ const wgs84LCood = projection.project(lCoord);
242
+
243
+ const uCoord = [ux, uy];
244
+ const wgs84UCood = projection.project(uCoord);
245
+
246
+ this.boundingBox = {
247
+ ...this.metadata.tightBoundingBox,
248
+ lx: wgs84LCood[0],
249
+ ly: wgs84LCood[1],
250
+ ux: wgs84UCood[0],
251
+ uy: wgs84UCood[1]
252
+ };
253
+ } else {
254
+ this.boundingBox = this.metadata?.tightBoundingBox;
255
+ }
256
+ }
162
257
  }
@@ -66,6 +66,8 @@ export type POTreeTileHeader = {
66
66
 
67
67
  /** Hierarchical potree node structure */
68
68
  export type POTreeNode = {
69
+ id: string;
70
+ type: 'pointcloud';
69
71
  /** Index data */
70
72
  header: POTreeTileHeader;
71
73
  /** Human readable name */
@@ -82,6 +84,14 @@ export type POTreeNode = {
82
84
  children: POTreeNode[];
83
85
  /** All children including unavailable */
84
86
  childrenByIndex: POTreeNode[];
87
+ /** Is tile selected for rendering */
88
+ selected: boolean;
89
+ /** Points content data */
90
+ content?: unknown;
91
+ /** Is content loading */
92
+ isContentLoading?: boolean;
93
+ /** Viewport Ids */
94
+ viewportIds: unknown[];
85
95
  };
86
96
 
87
97
  /**
@@ -178,6 +188,8 @@ function buildHierarchy(flatNodes: POTreeNode[], options: {spacing?: number} = {
178
188
  node.children = [];
179
189
  node.childrenByIndex = new Array(8).fill(null);
180
190
  node.spacing = (options?.spacing || 0) / Math.pow(2, level);
191
+ node.type = 'pointcloud';
192
+ node.id = node.name;
181
193
  // tileHeader.boundingVolume = Utils.createChildAABB(parentNode.boundingBox, index);
182
194
 
183
195
  if (parentNode) {
@@ -0,0 +1,27 @@
1
+ import {Proj4Projection} from '@math.gl/proj4';
2
+
3
+ /**
4
+ * Calculate cartographic origin from Potree bounding box
5
+ * @param projection - Proj4Projection instance to reproject coordinates
6
+ * @param boundingBox - bounding box data
7
+ * @returns - origin of boudngin box in [lng, lat, z] mode
8
+ */
9
+ export const getCartographicOriginFromBoundingBox = (
10
+ projection: Proj4Projection | null,
11
+ boundingBox?: [number[], number[]]
12
+ ): number[] => {
13
+ if (!boundingBox) {
14
+ return [0, 0, 0];
15
+ }
16
+ const [minXOriginal, minYOriginal, minZ] = boundingBox[0];
17
+ const [maxXOriginal, maxYOriginal, maxZ] = boundingBox[1];
18
+ let minX = minXOriginal;
19
+ let minY = minYOriginal;
20
+ let maxX = maxXOriginal;
21
+ let maxY = maxYOriginal;
22
+ if (projection) {
23
+ [minX, minY] = projection.project([minX, minY]);
24
+ [maxX, maxY] = projection.project([maxX, maxY]);
25
+ }
26
+ return [minX + (maxX - minX) / 2, minY + (maxY - minY) / 2, minZ + (maxZ - minZ) / 2];
27
+ };
@@ -0,0 +1,16 @@
1
+ import {Proj4Projection} from '@math.gl/proj4';
2
+
3
+ /**
4
+ * Create projection from proj4 definition to WGS84
5
+ * @param projectionData - proj4 definition
6
+ * @returns projection instance
7
+ */
8
+ export const createProjection = (projectionData?: string): Proj4Projection | null => {
9
+ if (!projectionData) {
10
+ return null;
11
+ }
12
+ return new Proj4Projection({
13
+ from: projectionData,
14
+ to: 'WGS84'
15
+ });
16
+ };