@loaders.gl/tiles 4.4.2 → 5.0.0-alpha.1

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 (198) hide show
  1. package/README.md +110 -1
  2. package/dist/dist.dev.js +4359 -1950
  3. package/dist/dist.min.js +1 -1
  4. package/dist/image-set.d.ts +94 -0
  5. package/dist/image-set.d.ts.map +1 -0
  6. package/dist/image-set.js +243 -0
  7. package/dist/image-set.js.map +1 -0
  8. package/dist/index.cjs +4178 -1892
  9. package/dist/index.cjs.map +4 -4
  10. package/dist/index.d.ts +27 -9
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +17 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
  15. package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
  16. package/dist/point-cloud/point-cloud-tile.js +67 -0
  17. package/dist/point-cloud/point-cloud-tile.js.map +1 -0
  18. package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
  19. package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
  20. package/dist/point-cloud/point-cloud-tileset.js +507 -0
  21. package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
  22. package/dist/point-cloud/types.d.ts +64 -0
  23. package/dist/point-cloud/types.d.ts.map +1 -0
  24. package/dist/point-cloud/types.js +2 -0
  25. package/dist/point-cloud/types.js.map +1 -0
  26. package/dist/raster-set.d.ts +107 -0
  27. package/dist/raster-set.d.ts.map +1 -0
  28. package/dist/raster-set.js +268 -0
  29. package/dist/raster-set.js.map +1 -0
  30. package/dist/tileset-2d/adapter.d.ts +38 -0
  31. package/dist/tileset-2d/adapter.d.ts.map +1 -0
  32. package/dist/tileset-2d/adapter.js +5 -0
  33. package/dist/tileset-2d/adapter.js.map +1 -0
  34. package/dist/tileset-2d/index.d.ts +7 -0
  35. package/dist/tileset-2d/index.d.ts.map +1 -0
  36. package/dist/tileset-2d/index.js +6 -0
  37. package/dist/tileset-2d/index.js.map +1 -0
  38. package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
  39. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  40. package/dist/tileset-2d/tile-2d-header.js +181 -0
  41. package/dist/tileset-2d/tile-2d-header.js.map +1 -0
  42. package/dist/tileset-2d/tileset-2d.d.ts +201 -0
  43. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  44. package/dist/tileset-2d/tileset-2d.js +532 -0
  45. package/dist/tileset-2d/tileset-2d.js.map +1 -0
  46. package/dist/tileset-2d/types.d.ts +44 -0
  47. package/dist/tileset-2d/types.d.ts.map +1 -0
  48. package/dist/tileset-2d/types.js +5 -0
  49. package/dist/tileset-2d/types.js.map +1 -0
  50. package/dist/tileset-2d.d.ts +2 -0
  51. package/dist/tileset-2d.d.ts.map +1 -0
  52. package/dist/tileset-2d.js +5 -0
  53. package/dist/tileset-2d.js.map +1 -0
  54. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
  55. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
  56. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
  57. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
  58. package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +36 -27
  59. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
  60. package/dist/{tileset → tileset-3d/common}/tile-3d.js +53 -62
  61. package/dist/tileset-3d/common/tile-3d.js.map +1 -0
  62. package/dist/tileset-3d/common/tileset-3d.d.ts +177 -0
  63. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
  64. package/dist/tileset-3d/common/tileset-3d.js +566 -0
  65. package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
  66. package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
  67. package/dist/{tileset → tileset-3d/common}/tileset-cache.js +1 -1
  68. package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
  69. package/dist/tileset-3d/common/tileset-source.d.ts +186 -0
  70. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
  71. package/dist/tileset-3d/common/tileset-source.js +17 -0
  72. package/dist/tileset-3d/common/tileset-source.js.map +1 -0
  73. package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +2 -2
  74. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
  75. package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +2 -2
  76. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
  77. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +100 -0
  78. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
  79. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +312 -0
  80. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
  81. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.d.ts +1 -1
  82. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  83. package/dist/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.js +1 -1
  84. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  85. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  86. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  87. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
  88. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
  89. package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
  90. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
  91. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  92. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +2 -2
  93. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
  94. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
  95. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  96. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +14 -23
  97. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
  98. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
  99. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
  100. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
  101. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
  102. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
  103. package/dist/{tileset → tileset-3d}/helpers/frame-state.d.ts +1 -1
  104. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
  105. package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
  106. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
  107. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
  108. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
  109. package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
  110. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +20 -0
  111. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
  112. package/dist/{tileset → tileset-3d}/helpers/tiles-3d-lod.js +43 -4
  113. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
  114. package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
  115. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
  116. package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
  117. package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
  118. package/dist/tileset-3d/helpers/zoom.js.map +1 -0
  119. package/dist/types.d.ts +7 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/package.json +7 -6
  122. package/src/image-set.ts +328 -0
  123. package/src/index.ts +80 -9
  124. package/src/point-cloud/point-cloud-tile.ts +76 -0
  125. package/src/point-cloud/point-cloud-tileset.ts +709 -0
  126. package/src/point-cloud/types.ts +78 -0
  127. package/src/raster-set.ts +374 -0
  128. package/src/tileset-2d/adapter.ts +47 -0
  129. package/src/tileset-2d/index.ts +33 -0
  130. package/src/tileset-2d/tile-2d-header.ts +224 -0
  131. package/src/tileset-2d/tileset-2d.ts +716 -0
  132. package/src/tileset-2d/types.ts +39 -0
  133. package/src/tileset-2d.ts +5 -0
  134. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
  135. package/src/{tileset → tileset-3d/common}/tile-3d.ts +64 -73
  136. package/src/tileset-3d/common/tileset-3d.ts +736 -0
  137. package/src/{tileset → tileset-3d/common}/tileset-cache.ts +1 -1
  138. package/src/tileset-3d/common/tileset-source.ts +234 -0
  139. package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +3 -3
  140. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +379 -0
  141. package/src/{tileset → tileset-3d}/format-3d-tiles/tileset-3d-traverser.ts +1 -1
  142. package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
  143. package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +2 -2
  144. package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +15 -24
  145. package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +1 -1
  146. package/src/{tileset → tileset-3d}/helpers/frame-state.ts +1 -1
  147. package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
  148. package/src/{tileset → tileset-3d}/helpers/tiles-3d-lod.ts +46 -4
  149. package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
  150. package/src/types.ts +7 -0
  151. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  152. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  153. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  154. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  155. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  156. package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
  157. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  158. package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
  159. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
  160. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  161. package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
  162. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  163. package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
  164. package/dist/tileset/helpers/frame-state.js.map +0 -1
  165. package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
  166. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  167. package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
  168. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
  169. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  170. package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
  171. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  172. package/dist/tileset/helpers/zoom.d.ts.map +0 -1
  173. package/dist/tileset/helpers/zoom.js.map +0 -1
  174. package/dist/tileset/tile-3d.d.ts.map +0 -1
  175. package/dist/tileset/tile-3d.js.map +0 -1
  176. package/dist/tileset/tileset-3d.d.ts +0 -284
  177. package/dist/tileset/tileset-3d.d.ts.map +0 -1
  178. package/dist/tileset/tileset-3d.js +0 -814
  179. package/dist/tileset/tileset-3d.js.map +0 -1
  180. package/dist/tileset/tileset-cache.d.ts.map +0 -1
  181. package/dist/tileset/tileset-cache.js.map +0 -1
  182. package/dist/tileset/tileset-traverser.d.ts.map +0 -1
  183. package/dist/tileset/tileset-traverser.js.map +0 -1
  184. package/src/tileset/tileset-3d.ts +0 -1037
  185. /package/dist/{tileset → tileset-3d/common}/tileset-cache.d.ts +0 -0
  186. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
  187. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +0 -0
  188. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
  189. /package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +0 -0
  190. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
  191. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +0 -0
  192. /package/dist/{tileset → tileset-3d}/helpers/frame-state.js +0 -0
  193. /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
  194. /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
  195. /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
  196. /package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +0 -0
  197. /package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +0 -0
  198. /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
@@ -0,0 +1,60 @@
1
+ import type { CoreAPI, LoaderOptions, LoaderWithParser, ReadableFile } from '@loaders.gl/loader-utils';
2
+ import type { TilesetSourceResolver } from "./tileset-source.js";
3
+ /** Options for {@link IndexedArchiveTilesetSource}. */
4
+ export type IndexedArchiveTilesetSourceOptions<ArchiveT> = {
5
+ /** Archive URL or Blob. */
6
+ data: string | Blob;
7
+ /** Filename to expose for Blob inputs that do not provide a name. */
8
+ fallbackFilename: string;
9
+ /** Archive file extension used as the URL path marker. */
10
+ archiveExtension: string;
11
+ /** Path to the root metadata resource inside the archive. */
12
+ rootPath: string;
13
+ /** Optional mode passed when loading the root metadata resource. */
14
+ rootMode?: string;
15
+ /** Parses an opened readable file into an indexed archive object. */
16
+ parseArchive: (file: ReadableFile) => Promise<ArchiveT>;
17
+ /** Loads one resource from the parsed archive. */
18
+ getFile: (archive: ArchiveT, pathInArchive: string, mode?: string) => Promise<ArrayBuffer>;
19
+ /** Returns the core API used for local file loading and nested resource parsing. */
20
+ getCoreApi: () => CoreAPI | undefined;
21
+ /** Error message to throw when the core API is required but unavailable. */
22
+ missingCoreApiMessage: string;
23
+ };
24
+ /**
25
+ * Tileset source resolver backed by an indexed archive such as 3TZ or SLPK.
26
+ *
27
+ * The source owns archive opening, archive caching, path resolution, and archive-backed `fetch`
28
+ * injection. Format-specific parsing and file lookup stay in the owning format module.
29
+ */
30
+ export declare class IndexedArchiveTilesetSource<ArchiveT> implements TilesetSourceResolver {
31
+ /** URL exposed to the tileset source that owns this archive source. */
32
+ readonly sourceUrl: string;
33
+ private readonly options;
34
+ private archivePromise?;
35
+ /**
36
+ * Creates an indexed archive tileset source.
37
+ * @param options Archive source options
38
+ */
39
+ constructor(options: IndexedArchiveTilesetSourceOptions<ArchiveT>);
40
+ /**
41
+ * Loads and parses the archive root metadata resource.
42
+ * @param url Root URL, ignored because the archive root path is configured explicitly
43
+ * @param loader Loader used to parse the root metadata
44
+ * @param loadOptions Loader options forwarded to parsing
45
+ */
46
+ loadRoot<DataT>(url: string, loader: LoaderWithParser<DataT>, loadOptions: LoaderOptions): Promise<DataT>;
47
+ /**
48
+ * Loads and parses an archive resource relative to a requesting resource URL.
49
+ * @param url Resource URL
50
+ * @param loader Loader used to parse the resource
51
+ * @param loadOptions Loader options forwarded to parsing
52
+ */
53
+ loadResource<DataT>(url: string, loader: LoaderWithParser<DataT>, loadOptions: LoaderOptions): Promise<DataT>;
54
+ private parseArchiveResource;
55
+ private createArchiveFetch;
56
+ private loadFile;
57
+ private openArchiveReadableFile;
58
+ private resolveArchivePath;
59
+ }
60
+ //# sourceMappingURL=indexed-archive-tileset-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed-archive-tileset-source.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/common/indexed-archive-tileset-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAC,qBAAqB,EAAC,4BAAyB;AAE5D,uDAAuD;AACvD,MAAM,MAAM,kCAAkC,CAAC,QAAQ,IAAI;IACzD,2BAA2B;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,kDAAkD;IAClD,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3F,oFAAoF;IACpF,UAAU,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACtC,4EAA4E;IAC5E,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,2BAA2B,CAAC,QAAQ,CAAE,YAAW,qBAAqB;IACjF,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C;;;OAGG;gBACS,OAAO,EAAE,kCAAkC,CAAC,QAAQ,CAAC;IAKjE;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC/B,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,KAAK,CAAC;IAUjB;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC/B,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,KAAK,CAAC;YAKH,oBAAoB;IA+BlC,OAAO,CAAC,kBAAkB;YAUZ,QAAQ;YAQR,uBAAuB;IAkBrC,OAAO,CAAC,kBAAkB;CA8B3B"}
@@ -0,0 +1,125 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { BlobFile, HttpFile, path } from '@loaders.gl/loader-utils';
5
+ /**
6
+ * Tileset source resolver backed by an indexed archive such as 3TZ or SLPK.
7
+ *
8
+ * The source owns archive opening, archive caching, path resolution, and archive-backed `fetch`
9
+ * injection. Format-specific parsing and file lookup stay in the owning format module.
10
+ */
11
+ export class IndexedArchiveTilesetSource {
12
+ /** URL exposed to the tileset source that owns this archive source. */
13
+ sourceUrl;
14
+ options;
15
+ archivePromise;
16
+ /**
17
+ * Creates an indexed archive tileset source.
18
+ * @param options Archive source options
19
+ */
20
+ constructor(options) {
21
+ this.options = options;
22
+ this.sourceUrl = getArchiveSourceUrl(options.data, options.fallbackFilename);
23
+ }
24
+ /**
25
+ * Loads and parses the archive root metadata resource.
26
+ * @param url Root URL, ignored because the archive root path is configured explicitly
27
+ * @param loader Loader used to parse the root metadata
28
+ * @param loadOptions Loader options forwarded to parsing
29
+ */
30
+ async loadRoot(url, loader, loadOptions) {
31
+ return await this.parseArchiveResource(url, this.options.rootPath, loader, loadOptions, this.options.rootMode);
32
+ }
33
+ /**
34
+ * Loads and parses an archive resource relative to a requesting resource URL.
35
+ * @param url Resource URL
36
+ * @param loader Loader used to parse the resource
37
+ * @param loadOptions Loader options forwarded to parsing
38
+ */
39
+ async loadResource(url, loader, loadOptions) {
40
+ const pathInArchive = this.resolveArchivePath(url, url);
41
+ return await this.parseArchiveResource(url, pathInArchive, loader, loadOptions);
42
+ }
43
+ async parseArchiveResource(resourceUrl, pathInArchive, loader, loadOptions, mode) {
44
+ const coreApi = this.options.getCoreApi();
45
+ if (!coreApi) {
46
+ throw new Error(this.options.missingCoreApiMessage);
47
+ }
48
+ const data = await this.loadFile(pathInArchive, mode);
49
+ const archiveFetch = this.createArchiveFetch(resourceUrl);
50
+ return (await coreApi.parse(data, loader, {
51
+ ...loadOptions,
52
+ fetch: archiveFetch
53
+ }, {
54
+ url: resourceUrl,
55
+ fetch: archiveFetch,
56
+ _parse: coreApi.parse,
57
+ loaders: [loader],
58
+ coreApi
59
+ }));
60
+ }
61
+ createArchiveFetch(contextUrl) {
62
+ return async (input) => {
63
+ const requestUrl = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
64
+ const pathInArchive = this.resolveArchivePath(requestUrl, contextUrl);
65
+ const data = await this.loadFile(pathInArchive);
66
+ return new Response(data, { status: 200 });
67
+ };
68
+ }
69
+ async loadFile(pathInArchive, mode) {
70
+ this.archivePromise ||= this.openArchiveReadableFile().then(file => this.options.parseArchive(file));
71
+ const archive = await this.archivePromise;
72
+ return await this.options.getFile(archive, pathInArchive, mode);
73
+ }
74
+ async openArchiveReadableFile() {
75
+ const { data } = this.options;
76
+ if (typeof data !== 'string') {
77
+ return new BlobFile(data);
78
+ }
79
+ if (/^https?:\/\//i.test(data)) {
80
+ return new HttpFile(data);
81
+ }
82
+ const coreApi = this.options.getCoreApi();
83
+ if (!coreApi) {
84
+ throw new Error(this.options.missingCoreApiMessage);
85
+ }
86
+ const response = await coreApi.fetchFile(data);
87
+ return new BlobFile(await response.arrayBuffer());
88
+ }
89
+ resolveArchivePath(request, baseUrl) {
90
+ const requestWithoutQuery = stripQueryString(request);
91
+ const archiveRoot = stripQueryString(this.sourceUrl);
92
+ const baseWithoutQuery = stripQueryString(baseUrl);
93
+ const basePath = baseWithoutQuery === archiveRoot ? archiveRoot : path.dirname(baseWithoutQuery);
94
+ const markerExpression = new RegExp(`\\.${this.options.archiveExtension}/(.*)$`, 'i');
95
+ const markerMatch = requestWithoutQuery.match(markerExpression);
96
+ if (markerMatch?.[1]) {
97
+ return markerMatch[1];
98
+ }
99
+ const isAbsoluteRequest = /^[a-z][a-z0-9+.-]*:/i.test(requestWithoutQuery) || requestWithoutQuery.startsWith('/');
100
+ const absoluteRequest = requestWithoutQuery.startsWith(archiveRoot)
101
+ ? requestWithoutQuery
102
+ : baseWithoutQuery === archiveRoot && !isAbsoluteRequest
103
+ ? `${archiveRoot}/${requestWithoutQuery}`
104
+ : path.resolve(basePath, requestWithoutQuery);
105
+ if (absoluteRequest === archiveRoot) {
106
+ return '';
107
+ }
108
+ if (absoluteRequest.startsWith(`${archiveRoot}/`)) {
109
+ return absoluteRequest.slice(archiveRoot.length + 1);
110
+ }
111
+ return absoluteRequest.replace(/^\/+/, '');
112
+ }
113
+ }
114
+ function getArchiveSourceUrl(data, fallbackFilename) {
115
+ if (typeof data === 'string') {
116
+ return data;
117
+ }
118
+ const fileName = 'name' in data && typeof data.name === 'string' && data.name ? data.name : fallbackFilename;
119
+ return `memory://${fileName}`;
120
+ }
121
+ function stripQueryString(url) {
122
+ const queryIndex = url.indexOf('?');
123
+ return queryIndex >= 0 ? url.slice(0, queryIndex) : url;
124
+ }
125
+ //# sourceMappingURL=indexed-archive-tileset-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed-archive-tileset-source.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/indexed-archive-tileset-source.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { Matrix4 } from '@math.gl/core';
2
2
  import type { Tileset3D } from "./tileset-3d.js";
3
- import type { DoublyLinkedListNode } from "../utils/doubly-linked-list-node.js";
4
- import { TILE_REFINEMENT } from "../constants.js";
5
- import { FrameState } from "./helpers/frame-state.js";
6
- import { CartographicBounds } from "./helpers/bounding-volume.js";
3
+ import type { DoublyLinkedListNode } from "../../utils/doubly-linked-list-node.js";
4
+ import { TILE_REFINEMENT } from "../../constants.js";
5
+ import type { TileContentLoadResult } from "./tileset-source.js";
6
+ import { FrameState } from "../helpers/frame-state.js";
7
+ import { CartographicBounds } from "../helpers/bounding-volume.js";
7
8
  import { TilesetTraverser } from "./tileset-traverser.js";
8
9
  /**
9
10
  * @param tileset - Tileset3D instance
@@ -33,9 +34,17 @@ export declare class Tile3D {
33
34
  type: string;
34
35
  contentUrl: string;
35
36
  /** Different refinement algorithms used by I3S and 3D tiles */
36
- lodMetricType: 'geometricError' | 'maxScreenThreshold';
37
- /** The error, in meters, introduced if this tile is rendered and its children are not. */
37
+ lodMetricType: string;
38
+ /**
39
+ * The world-space geometric error, in meters, introduced if this tile is rendered and its
40
+ * children are not. For I3S this stores the format's unscaled screen-threshold metric instead.
41
+ */
38
42
  lodMetricValue: number;
43
+ /**
44
+ * The source LOD metric before applying the tile's computed transform. Keeping the source value
45
+ * separate ensures transform updates never compound an already-scaled geometric error.
46
+ */
47
+ private _unscaledLodMetricValue;
39
48
  /** @todo math.gl is not exporting BoundingVolume base type? */
40
49
  boundingVolume: any;
41
50
  /**
@@ -164,7 +173,7 @@ export declare class Tile3D {
164
173
  * Requests the tile's content.
165
174
  * The request may not be made if the Request Scheduler can't prioritize it.
166
175
  */
167
- loadContent(): Promise<boolean>;
176
+ loadContent(): Promise<TileContentLoadResult>;
168
177
  unloadContent(): boolean;
169
178
  /**
170
179
  * Update the tile's visibility
@@ -197,8 +206,23 @@ export declare class Tile3D {
197
206
  insideViewerRequestVolume(frameState: FrameState): boolean;
198
207
  updateExpiration(): void;
199
208
  get extras(): any;
200
- _initializeLodMetric(header: any): void;
209
+ /** Initializes the tile's LOD metric from its header or its nearest available ancestor. */
210
+ _initializeLodMetric(header: {
211
+ [key: string]: any;
212
+ }): void;
201
213
  _initializeTransforms(tileHeader: any): void;
214
+ /**
215
+ * Updates the world-space LOD metric from the source metric and the complete tile transform.
216
+ *
217
+ * 3D Tiles geometric error is a distance in the tile's local meters. Screen-space error (SSE)
218
+ * compares that distance with a world-space camera distance, so both quantities must use the
219
+ * same scale. For non-uniform transforms the largest axis scale is deliberately used: this is
220
+ * conservative and prevents refinement from stopping while any transformed dimension can still
221
+ * exceed the requested visual error. Rotation and translation do not affect the scale.
222
+ *
223
+ * I3S `maxScreenThreshold` is already a screen-space metric and must not be transform-scaled.
224
+ */
225
+ _updateLodMetricScale(): void;
202
226
  _initializeBoundingVolumes(tileHeader: any): void;
203
227
  _initializeContent(tileHeader: any): void;
204
228
  _initializeRenderingState(header: any): void;
@@ -206,25 +230,10 @@ export declare class Tile3D {
206
230
  _isTileset(): boolean;
207
231
  _onContentLoaded(): void;
208
232
  _updateBoundingVolume(header: any): void;
233
+ /**
234
+ * Updates the tile's computed transform, world-space geometric error, and bounding volumes.
235
+ * @param parentTransform - Current computed transform of the parent tile or tileset.
236
+ */
209
237
  _updateTransform(parentTransform?: Matrix4): void;
210
- _getLoaderSpecificOptions(loaderId: any): {
211
- assetGltfUpAxis: "X" | "Y" | "Z";
212
- } | {
213
- _tileOptions: {
214
- attributeUrls: any;
215
- textureUrl: any;
216
- textureFormat: any;
217
- textureLoaderOptions: any;
218
- materialDefinition: any;
219
- isDracoGeometry: any;
220
- mbs: any;
221
- };
222
- _tilesetOptions: {
223
- store: any;
224
- attributeStorageInfo: any;
225
- fields: any;
226
- };
227
- isTileHeader: boolean;
228
- };
229
238
  }
230
239
  //# sourceMappingURL=tile-3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-3d.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,10 @@
5
5
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
6
6
  import { Vector3, Matrix4 } from '@math.gl/core';
7
7
  import { CullingVolume } from '@math.gl/culling';
8
- import { load } from '@loaders.gl/core';
9
- import { TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from "../constants.js";
10
- import { createBoundingVolume, getCartographicBounds } from "./helpers/bounding-volume.js";
11
- import { getTiles3DScreenSpaceError } from "./helpers/tiles-3d-lod.js";
12
- import { getProjectedRadius } from "./helpers/i3s-lod.js";
13
- import { get3dTilesOptions } from "./helpers/3d-tiles-options.js";
8
+ import { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from "../../constants.js";
9
+ import { createBoundingVolume, getCartographicBounds } from "../helpers/bounding-volume.js";
10
+ import { getTiles3DScreenSpaceError } from "../helpers/tiles-3d-lod.js";
11
+ import { getProjectedRadius } from "../helpers/i3s-lod.js";
14
12
  import { TilesetTraverser } from "./tileset-traverser.js";
15
13
  const scratchVector = new Vector3();
16
14
  function defined(x) {
@@ -33,8 +31,16 @@ export class Tile3D {
33
31
  contentUrl;
34
32
  /** Different refinement algorithms used by I3S and 3D tiles */
35
33
  lodMetricType = 'geometricError';
36
- /** The error, in meters, introduced if this tile is rendered and its children are not. */
34
+ /**
35
+ * The world-space geometric error, in meters, introduced if this tile is rendered and its
36
+ * children are not. For I3S this stores the format's unscaled screen-threshold metric instead.
37
+ */
37
38
  lodMetricValue = 0;
39
+ /**
40
+ * The source LOD metric before applying the tile's computed transform. Keeping the source value
41
+ * separate ensures transform updates never compound an already-scaled geometric error.
42
+ */
43
+ _unscaledLodMetricValue = 0;
38
44
  /** @todo math.gl is not exporting BoundingVolume base type? */
39
45
  boundingVolume = null;
40
46
  /**
@@ -118,6 +124,7 @@ export class Tile3D {
118
124
  this.contentUrl = header.contentUrl;
119
125
  this._initializeLodMetric(header);
120
126
  this._initializeTransforms(header);
127
+ this._updateLodMetricScale();
121
128
  this._initializeBoundingVolumes(header);
122
129
  this._initializeContent(header);
123
130
  this._initializeRenderingState(header);
@@ -273,10 +280,10 @@ export class Tile3D {
273
280
  // eslint-disable-next-line max-statements, complexity
274
281
  async loadContent() {
275
282
  if (this.hasEmptyContent) {
276
- return false;
283
+ return { loaded: false };
277
284
  }
278
285
  if (this.content) {
279
- return true;
286
+ return { loaded: true };
280
287
  }
281
288
  const expired = this.contentExpired;
282
289
  if (expired) {
@@ -287,34 +294,16 @@ export class Tile3D {
287
294
  if (!requestToken) {
288
295
  // cancelled
289
296
  this.contentState = TILE_CONTENT_STATE.UNLOADED;
290
- return false;
297
+ return { loaded: false };
291
298
  }
292
299
  try {
293
- const contentUrl = this.tileset.getTileUrl(this.contentUrl);
294
- // The content can be a binary tile ot a JSON tileset
295
- const loader = this.tileset.loader;
296
- const tilesetLoaderOptions = this.tileset.loadOptions[loader.id] || {};
297
- const options = {
298
- ...this.tileset.loadOptions,
299
- [loader.id]: {
300
- ...tilesetLoaderOptions,
301
- isTileset: this.type === 'json',
302
- ...this._getLoaderSpecificOptions(loader.id)
303
- } // TODO add typecheck - as const satisfies ...
304
- };
305
- this.content = await load(contentUrl, loader, options);
300
+ const loadResult = await this.tileset.source.loadTileContent(this);
306
301
  if (this.tileset.options.contentLoader) {
307
302
  await this.tileset.options.contentLoader(this);
308
303
  }
309
- if (this._isTileset()) {
310
- // Add tile headers for the nested tilset's subtree
311
- // Async update of the tree should be fine since there would never be edits to the same node
312
- // TODO - we need to capture the child tileset's URL
313
- this.tileset._initializeTileHeaders(this.content, this);
314
- }
315
304
  this.contentState = TILE_CONTENT_STATE.READY;
316
305
  this._onContentLoaded();
317
- return true;
306
+ return loadResult;
318
307
  }
319
308
  catch (error) {
320
309
  // Tile is unloaded before the content finishes loading
@@ -474,6 +463,7 @@ export class Tile3D {
474
463
  return this.header.extras;
475
464
  }
476
465
  // INTERNAL METHODS
466
+ /** Initializes the tile's LOD metric from its header or its nearest available ancestor. */
477
467
  _initializeLodMetric(header) {
478
468
  if ('lodMetricType' in header) {
479
469
  this.lodMetricType = header.lodMetricType;
@@ -485,14 +475,18 @@ export class Tile3D {
485
475
  }
486
476
  // This is used to compute screen space error, i.e., the error measured in pixels.
487
477
  if ('lodMetricValue' in header) {
488
- this.lodMetricValue = header.lodMetricValue;
478
+ this._unscaledLodMetricValue = header.lodMetricValue;
489
479
  }
490
480
  else {
491
- this.lodMetricValue =
492
- (this.parent && this.parent.lodMetricValue) || this.tileset.lodMetricValue;
481
+ // Inherit the source value, not the parent's world-space value. The child's complete
482
+ // transform will be applied after transform initialization below.
483
+ this._unscaledLodMetricValue = this.parent
484
+ ? this.parent._unscaledLodMetricValue
485
+ : this.tileset.lodMetricValue;
493
486
  // eslint-disable-next-line
494
487
  console.warn('3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue');
495
488
  }
489
+ this.lodMetricValue = this._unscaledLodMetricValue;
496
490
  }
497
491
  _initializeTransforms(tileHeader) {
498
492
  // The local transform of this tile.
@@ -506,6 +500,26 @@ export class Tile3D {
506
500
  const parentInitialTransform = parent && parent._initialTransform ? parent._initialTransform.clone() : new Matrix4();
507
501
  this._initialTransform = new Matrix4(parentInitialTransform).multiplyRight(this.transform);
508
502
  }
503
+ /**
504
+ * Updates the world-space LOD metric from the source metric and the complete tile transform.
505
+ *
506
+ * 3D Tiles geometric error is a distance in the tile's local meters. Screen-space error (SSE)
507
+ * compares that distance with a world-space camera distance, so both quantities must use the
508
+ * same scale. For non-uniform transforms the largest axis scale is deliberately used: this is
509
+ * conservative and prevents refinement from stopping while any transformed dimension can still
510
+ * exceed the requested visual error. Rotation and translation do not affect the scale.
511
+ *
512
+ * I3S `maxScreenThreshold` is already a screen-space metric and must not be transform-scaled.
513
+ */
514
+ _updateLodMetricScale() {
515
+ if (this.lodMetricType !== LOD_METRIC_TYPE.GEOMETRIC_ERROR) {
516
+ this.lodMetricValue = this._unscaledLodMetricValue;
517
+ return;
518
+ }
519
+ const transformScale = this.computedTransform.getScale(scratchVector);
520
+ const maximumScale = Math.max(transformScale[0], transformScale[1], transformScale[2]);
521
+ this.lodMetricValue = this._unscaledLodMetricValue * maximumScale;
522
+ }
509
523
  _initializeBoundingVolumes(tileHeader) {
510
524
  this._contentBoundingVolume = null;
511
525
  this._viewerRequestVolume = null;
@@ -589,7 +603,10 @@ export class Tile3D {
589
603
  this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);
590
604
  }
591
605
  }
592
- // Update the tile's transform. The transform is applied to the tile's bounding volumes.
606
+ /**
607
+ * Updates the tile's computed transform, world-space geometric error, and bounding volumes.
608
+ * @param parentTransform - Current computed transform of the parent tile or tileset.
609
+ */
593
610
  _updateTransform(parentTransform = new Matrix4()) {
594
611
  const computedTransform = parentTransform.clone().multiplyRight(this.transform);
595
612
  const didTransformChange = !computedTransform.equals(this.computedTransform);
@@ -597,35 +614,9 @@ export class Tile3D {
597
614
  return;
598
615
  }
599
616
  this.computedTransform = computedTransform;
617
+ // Recalculate from the unscaled source metric so repeated model-matrix changes never compound.
618
+ this._updateLodMetricScale();
600
619
  this._updateBoundingVolume(this.header);
601
620
  }
602
- // Get options which are applicable only for the particular loader
603
- _getLoaderSpecificOptions(loaderId) {
604
- switch (loaderId) {
605
- case 'i3s':
606
- return {
607
- ...this.tileset.options.i3s,
608
- _tileOptions: {
609
- attributeUrls: this.header.attributeUrls,
610
- textureUrl: this.header.textureUrl,
611
- textureFormat: this.header.textureFormat,
612
- textureLoaderOptions: this.header.textureLoaderOptions,
613
- materialDefinition: this.header.materialDefinition,
614
- isDracoGeometry: this.header.isDracoGeometry,
615
- mbs: this.header.mbs
616
- },
617
- _tilesetOptions: {
618
- store: this.tileset.tileset.store,
619
- attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
620
- fields: this.tileset.tileset.fields
621
- },
622
- isTileHeader: false
623
- };
624
- case '3d-tiles':
625
- case 'cesium-ion':
626
- default:
627
- return get3dTilesOptions(this.tileset.tileset);
628
- }
629
- }
630
621
  }
631
622
  //# sourceMappingURL=tile-3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-3d.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d.ts"],"names":[],"mappings":"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"}