@loaders.gl/tiles 5.0.0-alpha.12 → 5.0.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +18 -72
  3. package/dist/dist.dev.js +6979 -42928
  4. package/dist/dist.min.js +3 -22
  5. package/dist/image-set.d.ts +1 -1
  6. package/dist/image-set.d.ts.map +1 -1
  7. package/dist/index.cjs +2847 -8781
  8. package/dist/index.cjs.map +3 -4
  9. package/dist/index.d.ts +4 -45
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -27
  12. package/dist/index.js.map +1 -1
  13. package/dist/mlt/bundled.d.ts +3 -0
  14. package/dist/mlt/bundled.d.ts.map +1 -0
  15. package/dist/mlt/bundled.js +5 -0
  16. package/dist/mlt/bundled.js.map +1 -0
  17. package/dist/mlt/index.cjs +3701 -0
  18. package/dist/mlt/index.cjs.map +6 -0
  19. package/dist/mlt/index.d.ts +10 -0
  20. package/dist/mlt/index.d.ts.map +1 -0
  21. package/dist/mlt/index.js +12 -0
  22. package/dist/mlt/index.js.map +1 -0
  23. package/dist/mlt/lib/encode-mlt-geometry.d.ts +6 -0
  24. package/dist/mlt/lib/encode-mlt-geometry.d.ts.map +1 -0
  25. package/dist/mlt/lib/encode-mlt-geometry.js +150 -0
  26. package/dist/mlt/lib/encode-mlt-geometry.js.map +1 -0
  27. package/dist/mlt/lib/encode-mlt-streams.d.ts +13 -0
  28. package/dist/mlt/lib/encode-mlt-streams.d.ts.map +1 -0
  29. package/dist/mlt/lib/encode-mlt-streams.js +57 -0
  30. package/dist/mlt/lib/encode-mlt-streams.js.map +1 -0
  31. package/dist/mlt/lib/encode-mlt.d.ts +6 -0
  32. package/dist/mlt/lib/encode-mlt.d.ts.map +1 -0
  33. package/dist/mlt/lib/encode-mlt.js +174 -0
  34. package/dist/mlt/lib/encode-mlt.js.map +1 -0
  35. package/dist/mlt/lib/parse-mlt.d.ts +11 -0
  36. package/dist/mlt/lib/parse-mlt.d.ts.map +1 -0
  37. package/dist/mlt/lib/parse-mlt.js +675 -0
  38. package/dist/mlt/lib/parse-mlt.js.map +1 -0
  39. package/dist/mlt/mlt-format.d.ts +14 -0
  40. package/dist/mlt/mlt-format.d.ts.map +1 -0
  41. package/dist/mlt/mlt-format.js +17 -0
  42. package/dist/mlt/mlt-format.js.map +1 -0
  43. package/dist/mlt/mlt-loader-with-parser.d.ts +91 -0
  44. package/dist/mlt/mlt-loader-with-parser.d.ts.map +1 -0
  45. package/dist/mlt/mlt-loader-with-parser.js +29 -0
  46. package/dist/mlt/mlt-loader-with-parser.js.map +1 -0
  47. package/dist/mlt/mlt-loader.d.ts +115 -0
  48. package/dist/mlt/mlt-loader.d.ts.map +1 -0
  49. package/dist/mlt/mlt-loader.js +38 -0
  50. package/dist/mlt/mlt-loader.js.map +1 -0
  51. package/dist/mlt/mlt-source-loader.d.ts +82 -0
  52. package/dist/mlt/mlt-source-loader.d.ts.map +1 -0
  53. package/dist/mlt/mlt-source-loader.js +179 -0
  54. package/dist/mlt/mlt-source-loader.js.map +1 -0
  55. package/dist/mlt/mlt-writer.d.ts +45 -0
  56. package/dist/mlt/mlt-writer.d.ts.map +1 -0
  57. package/dist/mlt/mlt-writer.js +21 -0
  58. package/dist/mlt/mlt-writer.js.map +1 -0
  59. package/dist/mlt/unbundled.d.ts +3 -0
  60. package/dist/mlt/unbundled.d.ts.map +1 -0
  61. package/dist/mlt/unbundled.js +5 -0
  62. package/dist/mlt/unbundled.js.map +1 -0
  63. package/dist/mvt/arrow-table-tile-source-loader-types.d.ts +36 -0
  64. package/dist/mvt/arrow-table-tile-source-loader-types.d.ts.map +1 -0
  65. package/dist/mvt/arrow-table-tile-source-loader-types.js +36 -0
  66. package/dist/mvt/arrow-table-tile-source-loader-types.js.map +1 -0
  67. package/dist/mvt/arrow-table-tile-source-loader.cjs +6343 -0
  68. package/dist/mvt/arrow-table-tile-source-loader.cjs.map +6 -0
  69. package/dist/mvt/arrow-table-tile-source-loader.d.ts +69 -0
  70. package/dist/mvt/arrow-table-tile-source-loader.d.ts.map +1 -0
  71. package/dist/mvt/arrow-table-tile-source-loader.js +216 -0
  72. package/dist/mvt/arrow-table-tile-source-loader.js.map +1 -0
  73. package/dist/mvt/arrow-table-tile-source-types.d.ts +21 -0
  74. package/dist/mvt/arrow-table-tile-source-types.d.ts.map +1 -0
  75. package/dist/mvt/arrow-table-tile-source-types.js +6 -0
  76. package/dist/mvt/arrow-table-tile-source-types.js.map +1 -0
  77. package/dist/mvt/bundled.d.ts +6 -0
  78. package/dist/mvt/bundled.d.ts.map +1 -0
  79. package/dist/mvt/bundled.js +7 -0
  80. package/dist/mvt/bundled.js.map +1 -0
  81. package/dist/mvt/dist.dev.js +46689 -0
  82. package/dist/mvt/dist.min.js +94 -0
  83. package/dist/mvt/index.cjs +10095 -0
  84. package/dist/mvt/index.cjs.map +6 -0
  85. package/dist/mvt/index.d.ts +28 -0
  86. package/dist/mvt/index.d.ts.map +1 -0
  87. package/dist/mvt/index.js +27 -0
  88. package/dist/mvt/index.js.map +1 -0
  89. package/dist/mvt/lib/encode-mvt-arrow.d.ts +6 -0
  90. package/dist/mvt/lib/encode-mvt-arrow.d.ts.map +1 -0
  91. package/dist/mvt/lib/encode-mvt-arrow.js +225 -0
  92. package/dist/mvt/lib/encode-mvt-arrow.js.map +1 -0
  93. package/dist/mvt/lib/encode-mvt.d.ts +30 -0
  94. package/dist/mvt/lib/encode-mvt.d.ts.map +1 -0
  95. package/dist/mvt/lib/encode-mvt.js +20 -0
  96. package/dist/mvt/lib/encode-mvt.js.map +1 -0
  97. package/dist/mvt/lib/get-schemas-from-tilejson.d.ts +4 -0
  98. package/dist/mvt/lib/get-schemas-from-tilejson.d.ts.map +1 -0
  99. package/dist/mvt/lib/get-schemas-from-tilejson.js +56 -0
  100. package/dist/mvt/lib/get-schemas-from-tilejson.js.map +1 -0
  101. package/dist/mvt/lib/is-longitude-latitude-crs.d.ts +3 -0
  102. package/dist/mvt/lib/is-longitude-latitude-crs.d.ts.map +1 -0
  103. package/dist/mvt/lib/is-longitude-latitude-crs.js +13 -0
  104. package/dist/mvt/lib/is-longitude-latitude-crs.js.map +1 -0
  105. package/dist/mvt/lib/mapbox-vt-pbf/geojson-wrapper.d.ts +25 -0
  106. package/dist/mvt/lib/mapbox-vt-pbf/geojson-wrapper.d.ts.map +1 -0
  107. package/dist/mvt/lib/mapbox-vt-pbf/geojson-wrapper.js +73 -0
  108. package/dist/mvt/lib/mapbox-vt-pbf/geojson-wrapper.js.map +1 -0
  109. package/dist/mvt/lib/mapbox-vt-pbf/to-vector-tile.d.ts +52 -0
  110. package/dist/mvt/lib/mapbox-vt-pbf/to-vector-tile.d.ts.map +1 -0
  111. package/dist/mvt/lib/mapbox-vt-pbf/to-vector-tile.js +165 -0
  112. package/dist/mvt/lib/mapbox-vt-pbf/to-vector-tile.js.map +1 -0
  113. package/dist/mvt/lib/mvt-pbf/mvt-constants.d.ts +116 -0
  114. package/dist/mvt/lib/mvt-pbf/mvt-constants.d.ts.map +1 -0
  115. package/dist/mvt/lib/mvt-pbf/mvt-constants.js +127 -0
  116. package/dist/mvt/lib/mvt-pbf/mvt-constants.js.map +1 -0
  117. package/dist/mvt/lib/mvt-pbf/mvt-types.d.ts +17 -0
  118. package/dist/mvt/lib/mvt-pbf/mvt-types.d.ts.map +1 -0
  119. package/dist/mvt/lib/mvt-pbf/mvt-types.js +5 -0
  120. package/dist/mvt/lib/mvt-pbf/mvt-types.js.map +1 -0
  121. package/dist/mvt/lib/mvt-pbf/parse-geometry-from-pbf.d.ts +77 -0
  122. package/dist/mvt/lib/mvt-pbf/parse-geometry-from-pbf.d.ts.map +1 -0
  123. package/dist/mvt/lib/mvt-pbf/parse-geometry-from-pbf.js +235 -0
  124. package/dist/mvt/lib/mvt-pbf/parse-geometry-from-pbf.js.map +1 -0
  125. package/dist/mvt/lib/mvt-pbf/parse-mvt-from-pbf.d.ts +25 -0
  126. package/dist/mvt/lib/mvt-pbf/parse-mvt-from-pbf.d.ts.map +1 -0
  127. package/dist/mvt/lib/mvt-pbf/parse-mvt-from-pbf.js +263 -0
  128. package/dist/mvt/lib/mvt-pbf/parse-mvt-from-pbf.js.map +1 -0
  129. package/dist/mvt/lib/mvt-pbf/write-mvt-to-pbf.d.ts +4 -0
  130. package/dist/mvt/lib/mvt-pbf/write-mvt-to-pbf.d.ts.map +1 -0
  131. package/dist/mvt/lib/mvt-pbf/write-mvt-to-pbf.js +134 -0
  132. package/dist/mvt/lib/mvt-pbf/write-mvt-to-pbf.js.map +1 -0
  133. package/dist/mvt/lib/mvt-worker-transport.d.ts +15 -0
  134. package/dist/mvt/lib/mvt-worker-transport.d.ts.map +1 -0
  135. package/dist/mvt/lib/mvt-worker-transport.js +54 -0
  136. package/dist/mvt/lib/mvt-worker-transport.js.map +1 -0
  137. package/dist/mvt/lib/parse-mvt-geojson.d.ts +6 -0
  138. package/dist/mvt/lib/parse-mvt-geojson.d.ts.map +1 -0
  139. package/dist/mvt/lib/parse-mvt-geojson.js +48 -0
  140. package/dist/mvt/lib/parse-mvt-geojson.js.map +1 -0
  141. package/dist/mvt/lib/parse-mvt.d.ts +14 -0
  142. package/dist/mvt/lib/parse-mvt.d.ts.map +1 -0
  143. package/dist/mvt/lib/parse-mvt.js +105 -0
  144. package/dist/mvt/lib/parse-mvt.js.map +1 -0
  145. package/dist/mvt/lib/parse-tilejson.d.ts +74 -0
  146. package/dist/mvt/lib/parse-tilejson.d.ts.map +1 -0
  147. package/dist/mvt/lib/parse-tilejson.js +267 -0
  148. package/dist/mvt/lib/parse-tilejson.js.map +1 -0
  149. package/dist/mvt/lib/resolve-table-tile-parameters.d.ts +4 -0
  150. package/dist/mvt/lib/resolve-table-tile-parameters.d.ts.map +1 -0
  151. package/dist/mvt/lib/resolve-table-tile-parameters.js +16 -0
  152. package/dist/mvt/lib/resolve-table-tile-parameters.js.map +1 -0
  153. package/dist/mvt/lib/types.d.ts +88 -0
  154. package/dist/mvt/lib/types.d.ts.map +1 -0
  155. package/dist/mvt/lib/types.js.map +1 -0
  156. package/dist/mvt/lib/utils/geometry-utils.d.ts +83 -0
  157. package/dist/mvt/lib/utils/geometry-utils.d.ts.map +1 -0
  158. package/dist/mvt/lib/utils/geometry-utils.js +211 -0
  159. package/dist/mvt/lib/utils/geometry-utils.js.map +1 -0
  160. package/dist/mvt/lib/vector-tile/vector-tile-feature.d.ts +72 -0
  161. package/dist/mvt/lib/vector-tile/vector-tile-feature.d.ts.map +1 -0
  162. package/dist/mvt/lib/vector-tile/vector-tile-feature.js +350 -0
  163. package/dist/mvt/lib/vector-tile/vector-tile-feature.js.map +1 -0
  164. package/dist/mvt/lib/vector-tile/vector-tile-layer.d.ts +29 -0
  165. package/dist/mvt/lib/vector-tile/vector-tile-layer.d.ts.map +1 -0
  166. package/dist/mvt/lib/vector-tile/vector-tile-layer.js +108 -0
  167. package/dist/mvt/lib/vector-tile/vector-tile-layer.js.map +1 -0
  168. package/dist/mvt/lib/vector-tile/vector-tile.d.ts +9 -0
  169. package/dist/mvt/lib/vector-tile/vector-tile.d.ts.map +1 -0
  170. package/dist/mvt/lib/vector-tile/vector-tile.js +28 -0
  171. package/dist/mvt/lib/vector-tile/vector-tile.js.map +1 -0
  172. package/dist/mvt/lib/vector-tiler/arrow-tile.d.ts +6 -0
  173. package/dist/mvt/lib/vector-tiler/arrow-tile.d.ts.map +1 -0
  174. package/dist/mvt/lib/vector-tiler/arrow-tile.js +84 -0
  175. package/dist/mvt/lib/vector-tiler/arrow-tile.js.map +1 -0
  176. package/dist/mvt/lib/vector-tiler/features/clip-features.d.ts +16 -0
  177. package/dist/mvt/lib/vector-tiler/features/clip-features.d.ts.map +1 -0
  178. package/dist/mvt/lib/vector-tiler/features/clip-features.js +211 -0
  179. package/dist/mvt/lib/vector-tiler/features/clip-features.js.map +1 -0
  180. package/dist/mvt/lib/vector-tiler/features/convert-feature.d.ts +18 -0
  181. package/dist/mvt/lib/vector-tiler/features/convert-feature.d.ts.map +1 -0
  182. package/dist/mvt/lib/vector-tiler/features/convert-feature.js +161 -0
  183. package/dist/mvt/lib/vector-tiler/features/convert-feature.js.map +1 -0
  184. package/dist/mvt/lib/vector-tiler/features/proto-feature.d.ts +30 -0
  185. package/dist/mvt/lib/vector-tiler/features/proto-feature.d.ts.map +1 -0
  186. package/dist/mvt/lib/vector-tiler/features/proto-feature.js +53 -0
  187. package/dist/mvt/lib/vector-tiler/features/proto-feature.js.map +1 -0
  188. package/dist/mvt/lib/vector-tiler/features/simplify-path.d.ts +10 -0
  189. package/dist/mvt/lib/vector-tiler/features/simplify-path.d.ts.map +1 -0
  190. package/dist/mvt/lib/vector-tiler/features/simplify-path.js +67 -0
  191. package/dist/mvt/lib/vector-tiler/features/simplify-path.js.map +1 -0
  192. package/dist/mvt/lib/vector-tiler/features/wrap-features.d.ts +17 -0
  193. package/dist/mvt/lib/vector-tiler/features/wrap-features.d.ts.map +1 -0
  194. package/dist/mvt/lib/vector-tiler/features/wrap-features.js +95 -0
  195. package/dist/mvt/lib/vector-tiler/features/wrap-features.js.map +1 -0
  196. package/dist/mvt/lib/vector-tiler/proto-tile.d.ts +40 -0
  197. package/dist/mvt/lib/vector-tiler/proto-tile.d.ts.map +1 -0
  198. package/dist/mvt/lib/vector-tiler/proto-tile.js +139 -0
  199. package/dist/mvt/lib/vector-tiler/proto-tile.js.map +1 -0
  200. package/dist/mvt/lib/vector-tiler/tile-to-geojson.d.ts +12 -0
  201. package/dist/mvt/lib/vector-tiler/tile-to-geojson.d.ts.map +1 -0
  202. package/dist/mvt/lib/vector-tiler/tile-to-geojson.js +81 -0
  203. package/dist/mvt/lib/vector-tiler/tile-to-geojson.js.map +1 -0
  204. package/dist/mvt/lib/vector-tiler/transform-tile.d.ts +7 -0
  205. package/dist/mvt/lib/vector-tiler/transform-tile.d.ts.map +1 -0
  206. package/dist/mvt/lib/vector-tiler/transform-tile.js +42 -0
  207. package/dist/mvt/lib/vector-tiler/transform-tile.js.map +1 -0
  208. package/dist/mvt/map-style-format.d.ts +13 -0
  209. package/dist/mvt/map-style-format.d.ts.map +1 -0
  210. package/dist/mvt/map-style-format.js +16 -0
  211. package/dist/mvt/map-style-format.js.map +1 -0
  212. package/dist/mvt/map-style-loader-with-parser.d.ts +26 -0
  213. package/dist/mvt/map-style-loader-with-parser.d.ts.map +1 -0
  214. package/dist/mvt/map-style-loader-with-parser.js +38 -0
  215. package/dist/mvt/map-style-loader-with-parser.js.map +1 -0
  216. package/dist/mvt/map-style-loader.d.ts +44 -0
  217. package/dist/mvt/map-style-loader.d.ts.map +1 -0
  218. package/dist/mvt/map-style-loader.js +25 -0
  219. package/dist/mvt/map-style-loader.js.map +1 -0
  220. package/dist/mvt/map-style-schema.d.ts +58 -0
  221. package/dist/mvt/map-style-schema.d.ts.map +1 -0
  222. package/dist/mvt/map-style-schema.js +47 -0
  223. package/dist/mvt/map-style-schema.js.map +1 -0
  224. package/dist/mvt/map-style.d.ts +110 -0
  225. package/dist/mvt/map-style.d.ts.map +1 -0
  226. package/dist/mvt/map-style.js +90 -0
  227. package/dist/mvt/map-style.js.map +1 -0
  228. package/dist/mvt/mvt-format.d.ts +14 -0
  229. package/dist/mvt/mvt-format.d.ts.map +1 -0
  230. package/dist/mvt/mvt-format.js +23 -0
  231. package/dist/mvt/mvt-format.js.map +1 -0
  232. package/dist/mvt/mvt-geojson-loader-types.d.ts +82 -0
  233. package/dist/mvt/mvt-geojson-loader-types.d.ts.map +1 -0
  234. package/dist/mvt/mvt-geojson-loader-types.js +34 -0
  235. package/dist/mvt/mvt-geojson-loader-types.js.map +1 -0
  236. package/dist/mvt/mvt-geojson-loader.cjs +1366 -0
  237. package/dist/mvt/mvt-geojson-loader.cjs.map +6 -0
  238. package/dist/mvt/mvt-geojson-loader.d.ts +32 -0
  239. package/dist/mvt/mvt-geojson-loader.d.ts.map +1 -0
  240. package/dist/mvt/mvt-geojson-loader.js +13 -0
  241. package/dist/mvt/mvt-geojson-loader.js.map +1 -0
  242. package/dist/mvt/mvt-loader-with-parser.d.ts +105 -0
  243. package/dist/mvt/mvt-loader-with-parser.d.ts.map +1 -0
  244. package/dist/mvt/mvt-loader-with-parser.js +21 -0
  245. package/dist/mvt/mvt-loader-with-parser.js.map +1 -0
  246. package/dist/mvt/mvt-loader.d.ts +129 -0
  247. package/dist/mvt/mvt-loader.d.ts.map +1 -0
  248. package/dist/mvt/mvt-loader.js +40 -0
  249. package/dist/mvt/mvt-loader.js.map +1 -0
  250. package/dist/mvt/mvt-source-loader.d.ts +102 -0
  251. package/dist/mvt/mvt-source-loader.d.ts.map +1 -0
  252. package/dist/mvt/mvt-source-loader.js +275 -0
  253. package/dist/mvt/mvt-source-loader.js.map +1 -0
  254. package/dist/mvt/mvt-writer.d.ts +28 -0
  255. package/dist/mvt/mvt-writer.d.ts.map +1 -0
  256. package/dist/mvt/mvt-writer.js +32 -0
  257. package/dist/mvt/mvt-writer.js.map +1 -0
  258. package/dist/mvt/table-tile-source-loader.d.ts +169 -0
  259. package/dist/mvt/table-tile-source-loader.d.ts.map +1 -0
  260. package/dist/mvt/table-tile-source-loader.js +478 -0
  261. package/dist/mvt/table-tile-source-loader.js.map +1 -0
  262. package/dist/mvt/tilejson-format.d.ts +13 -0
  263. package/dist/mvt/tilejson-format.d.ts.map +1 -0
  264. package/dist/mvt/tilejson-format.js +16 -0
  265. package/dist/mvt/tilejson-format.js.map +1 -0
  266. package/dist/mvt/tilejson-loader-with-parser.d.ts +13 -0
  267. package/dist/mvt/tilejson-loader-with-parser.d.ts.map +1 -0
  268. package/dist/mvt/tilejson-loader-with-parser.js +25 -0
  269. package/dist/mvt/tilejson-loader-with-parser.js.map +1 -0
  270. package/dist/mvt/tilejson-loader.d.ts +56 -0
  271. package/dist/mvt/tilejson-loader.d.ts.map +1 -0
  272. package/dist/mvt/tilejson-loader.js +28 -0
  273. package/dist/mvt/tilejson-loader.js.map +1 -0
  274. package/dist/mvt/tilejson-zod-schema.cjs +79 -0
  275. package/dist/mvt/tilejson-zod-schema.cjs.map +6 -0
  276. package/dist/mvt/tilejson-zod-schema.d.ts +218 -0
  277. package/dist/mvt/tilejson-zod-schema.d.ts.map +1 -0
  278. package/dist/mvt/tilejson-zod-schema.js +68 -0
  279. package/dist/mvt/tilejson-zod-schema.js.map +1 -0
  280. package/dist/mvt/tilejson.schema.json +197 -0
  281. package/dist/mvt/unbundled.d.ts +8 -0
  282. package/dist/mvt/unbundled.d.ts.map +1 -0
  283. package/dist/mvt/unbundled.js +8 -0
  284. package/dist/mvt/unbundled.js.map +1 -0
  285. package/dist/mvt/workers/mvt-worker-node.d.ts +2 -0
  286. package/dist/mvt/workers/mvt-worker-node.d.ts.map +1 -0
  287. package/dist/mvt/workers/mvt-worker-node.js +8 -0
  288. package/dist/mvt/workers/mvt-worker-node.js.map +1 -0
  289. package/dist/mvt/workers/mvt-worker.d.ts +2 -0
  290. package/dist/mvt/workers/mvt-worker.d.ts.map +1 -0
  291. package/dist/mvt/workers/mvt-worker.js +7 -0
  292. package/dist/mvt/workers/mvt-worker.js.map +1 -0
  293. package/dist/mvt-worker-node.js +72460 -0
  294. package/dist/mvt-worker-node.js.map +7 -0
  295. package/dist/mvt-worker.js +21239 -0
  296. package/dist/pmtiles/bundled.d.ts +3 -0
  297. package/dist/pmtiles/bundled.d.ts.map +1 -0
  298. package/dist/pmtiles/bundled.js +5 -0
  299. package/dist/pmtiles/bundled.js.map +1 -0
  300. package/dist/pmtiles/dist.dev.js +50530 -0
  301. package/dist/pmtiles/dist.min.js +94 -0
  302. package/dist/pmtiles/geoarrow.cjs +6718 -0
  303. package/dist/pmtiles/geoarrow.cjs.map +6 -0
  304. package/dist/pmtiles/geoarrow.d.ts +30 -0
  305. package/dist/pmtiles/geoarrow.d.ts.map +1 -0
  306. package/dist/pmtiles/geoarrow.js +143 -0
  307. package/dist/pmtiles/geoarrow.js.map +1 -0
  308. package/dist/pmtiles/index.cjs +8011 -0
  309. package/dist/pmtiles/index.cjs.map +6 -0
  310. package/dist/pmtiles/index.d.ts +14 -0
  311. package/dist/pmtiles/index.d.ts.map +1 -0
  312. package/dist/pmtiles/index.js +10 -0
  313. package/dist/pmtiles/index.js.map +1 -0
  314. package/dist/pmtiles/lib/blob-source.d.ts +14 -0
  315. package/dist/pmtiles/lib/blob-source.d.ts.map +1 -0
  316. package/dist/pmtiles/lib/blob-source.js +32 -0
  317. package/dist/pmtiles/lib/blob-source.js.map +1 -0
  318. package/dist/pmtiles/lib/encode-pmtiles.d.ts +8 -0
  319. package/dist/pmtiles/lib/encode-pmtiles.d.ts.map +1 -0
  320. package/dist/pmtiles/lib/encode-pmtiles.js +268 -0
  321. package/dist/pmtiles/lib/encode-pmtiles.js.map +1 -0
  322. package/dist/pmtiles/lib/parse-pmtiles.d.ts +52 -0
  323. package/dist/pmtiles/lib/parse-pmtiles.d.ts.map +1 -0
  324. package/dist/pmtiles/lib/parse-pmtiles.js +95 -0
  325. package/dist/pmtiles/lib/parse-pmtiles.js.map +1 -0
  326. package/dist/pmtiles/lib/range-request-source.d.ts +24 -0
  327. package/dist/pmtiles/lib/range-request-source.d.ts.map +1 -0
  328. package/dist/pmtiles/lib/range-request-source.js +45 -0
  329. package/dist/pmtiles/lib/range-request-source.js.map +1 -0
  330. package/dist/pmtiles/lib/version.d.ts +2 -0
  331. package/dist/pmtiles/lib/version.d.ts.map +1 -0
  332. package/dist/pmtiles/lib/version.js +8 -0
  333. package/dist/pmtiles/lib/version.js.map +1 -0
  334. package/dist/pmtiles/pmtiles-format.d.ts +14 -0
  335. package/dist/pmtiles/pmtiles-format.d.ts.map +1 -0
  336. package/dist/pmtiles/pmtiles-format.js +17 -0
  337. package/dist/pmtiles/pmtiles-format.js.map +1 -0
  338. package/dist/pmtiles/pmtiles-loader-with-parser.d.ts +30 -0
  339. package/dist/pmtiles/pmtiles-loader-with-parser.d.ts.map +1 -0
  340. package/dist/pmtiles/pmtiles-loader-with-parser.js +41 -0
  341. package/dist/pmtiles/pmtiles-loader-with-parser.js.map +1 -0
  342. package/dist/pmtiles/pmtiles-loader.d.ts +41 -0
  343. package/dist/pmtiles/pmtiles-loader.d.ts.map +1 -0
  344. package/dist/pmtiles/pmtiles-loader.js +20 -0
  345. package/dist/pmtiles/pmtiles-loader.js.map +1 -0
  346. package/dist/pmtiles/pmtiles-source-loader.d.ts +85 -0
  347. package/dist/pmtiles/pmtiles-source-loader.d.ts.map +1 -0
  348. package/dist/pmtiles/pmtiles-source-loader.js +239 -0
  349. package/dist/pmtiles/pmtiles-source-loader.js.map +1 -0
  350. package/dist/pmtiles/pmtiles-writer-types.d.ts +39 -0
  351. package/dist/pmtiles/pmtiles-writer-types.d.ts.map +1 -0
  352. package/dist/{point-cloud-tile-source-types.js → pmtiles/pmtiles-writer-types.js} +1 -1
  353. package/dist/pmtiles/pmtiles-writer-types.js.map +1 -0
  354. package/dist/pmtiles/pmtiles-writer.d.ts +22 -0
  355. package/dist/pmtiles/pmtiles-writer.d.ts.map +1 -0
  356. package/dist/pmtiles/pmtiles-writer.js +15 -0
  357. package/dist/pmtiles/pmtiles-writer.js.map +1 -0
  358. package/dist/pmtiles/raster.cjs +1183 -0
  359. package/dist/pmtiles/raster.cjs.map +6 -0
  360. package/dist/pmtiles/raster.d.ts +30 -0
  361. package/dist/pmtiles/raster.d.ts.map +1 -0
  362. package/dist/pmtiles/raster.js +212 -0
  363. package/dist/pmtiles/raster.js.map +1 -0
  364. package/dist/pmtiles/source-info.d.ts +25 -0
  365. package/dist/pmtiles/source-info.d.ts.map +1 -0
  366. package/dist/{types.js → pmtiles/source-info.js} +1 -1
  367. package/dist/pmtiles/source-info.js.map +1 -0
  368. package/dist/pmtiles/unbundled.d.ts +3 -0
  369. package/dist/pmtiles/unbundled.d.ts.map +1 -0
  370. package/dist/pmtiles/unbundled.js +5 -0
  371. package/dist/pmtiles/unbundled.js.map +1 -0
  372. package/dist/raster-set.d.ts +1 -1
  373. package/dist/raster-set.d.ts.map +1 -1
  374. package/dist/raster-set.js +1 -1
  375. package/dist/raster-set.js.map +1 -1
  376. package/dist/tile-matrix.cjs +81 -0
  377. package/dist/tile-matrix.cjs.map +6 -0
  378. package/dist/tile-matrix.d.ts +52 -0
  379. package/dist/tile-matrix.d.ts.map +1 -0
  380. package/dist/tile-matrix.js +75 -0
  381. package/dist/tile-matrix.js.map +1 -0
  382. package/dist/tileset-2d/tile-2d-header.d.ts +2 -2
  383. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -1
  384. package/dist/tileset-2d/tile-2d-header.js +11 -11
  385. package/dist/tileset-2d/tile-2d-header.js.map +1 -1
  386. package/dist/tileset-2d/tileset-2d.d.ts +19 -10
  387. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -1
  388. package/dist/tileset-2d/tileset-2d.js +69 -15
  389. package/dist/tileset-2d/tileset-2d.js.map +1 -1
  390. package/package.json +101 -25
  391. package/src/image-set.ts +1 -1
  392. package/src/index.ts +8 -128
  393. package/src/mlt/bundled.ts +9 -0
  394. package/src/mlt/index.ts +18 -0
  395. package/src/mlt/lib/encode-mlt-geometry.ts +162 -0
  396. package/src/mlt/lib/encode-mlt-streams.ts +66 -0
  397. package/src/mlt/lib/encode-mlt.ts +215 -0
  398. package/src/mlt/lib/parse-mlt.ts +906 -0
  399. package/src/mlt/libs/mlt-decoder.cjs +4552 -0
  400. package/src/mlt/mlt-format.ts +19 -0
  401. package/src/mlt/mlt-loader-with-parser.ts +57 -0
  402. package/src/mlt/mlt-loader.ts +64 -0
  403. package/src/mlt/mlt-source-loader.ts +266 -0
  404. package/src/mlt/mlt-writer.ts +47 -0
  405. package/src/mlt/unbundled.ts +6 -0
  406. package/src/mvt/arrow-table-tile-source-loader-types.ts +55 -0
  407. package/src/mvt/arrow-table-tile-source-loader.ts +307 -0
  408. package/src/mvt/arrow-table-tile-source-types.ts +32 -0
  409. package/src/mvt/bundled.ts +14 -0
  410. package/src/mvt/index.ts +67 -0
  411. package/src/mvt/lib/encode-mvt-arrow.ts +273 -0
  412. package/src/mvt/lib/encode-mvt.ts +46 -0
  413. package/src/mvt/lib/get-schemas-from-tilejson.ts +64 -0
  414. package/src/mvt/lib/is-longitude-latitude-crs.ts +15 -0
  415. package/src/mvt/lib/mapbox-vt-pbf/geojson-to-vt.ts.disabled +76 -0
  416. package/src/mvt/lib/mapbox-vt-pbf/geojson-wrapper.ts +89 -0
  417. package/src/mvt/lib/mapbox-vt-pbf/to-vector-tile.ts +230 -0
  418. package/src/mvt/lib/mvt-pbf/mvt-constants.ts +135 -0
  419. package/src/mvt/lib/mvt-pbf/mvt-types.ts +22 -0
  420. package/src/mvt/lib/mvt-pbf/parse-geometry-from-pbf.ts +285 -0
  421. package/src/mvt/lib/mvt-pbf/parse-mvt-from-pbf.ts +310 -0
  422. package/src/mvt/lib/mvt-pbf/write-mvt-to-pbf.ts +162 -0
  423. package/src/mvt/lib/mvt-worker-transport.ts +74 -0
  424. package/src/mvt/lib/parse-mvt-geojson.ts +65 -0
  425. package/src/mvt/lib/parse-mvt.ts +145 -0
  426. package/src/mvt/lib/parse-tilejson.ts +397 -0
  427. package/src/mvt/lib/resolve-table-tile-parameters.ts +23 -0
  428. package/src/mvt/lib/types.ts +90 -0
  429. package/src/mvt/lib/utils/geometry-utils.ts +238 -0
  430. package/src/mvt/lib/vector-tile/LICENSE.txt +31 -0
  431. package/src/mvt/lib/vector-tile/vector-tile-feature.ts +430 -0
  432. package/src/mvt/lib/vector-tile/vector-tile-layer.ts +130 -0
  433. package/src/mvt/lib/vector-tile/vector-tile.ts +32 -0
  434. package/src/mvt/lib/vector-tiler/LICENSE +19 -0
  435. package/src/mvt/lib/vector-tiler/arrow-tile.ts +93 -0
  436. package/src/mvt/lib/vector-tiler/features/clip-features.ts +250 -0
  437. package/src/mvt/lib/vector-tiler/features/convert-feature.ts +213 -0
  438. package/src/mvt/lib/vector-tiler/features/proto-feature.ts +104 -0
  439. package/src/mvt/lib/vector-tiler/features/simplify-path.ts +84 -0
  440. package/src/mvt/lib/vector-tiler/features/wrap-features.ts +125 -0
  441. package/src/mvt/lib/vector-tiler/proto-tile.ts +217 -0
  442. package/src/mvt/lib/vector-tiler/tile-to-geojson.ts +104 -0
  443. package/src/mvt/lib/vector-tiler/transform-tile.ts +57 -0
  444. package/src/mvt/map-style-format.ts +18 -0
  445. package/src/mvt/map-style-loader-with-parser.ts +62 -0
  446. package/src/mvt/map-style-loader.ts +31 -0
  447. package/src/mvt/map-style-schema.ts +53 -0
  448. package/src/mvt/map-style.ts +218 -0
  449. package/src/mvt/mvt-format.ts +25 -0
  450. package/src/mvt/mvt-geojson-loader-types.ts +60 -0
  451. package/src/mvt/mvt-geojson-loader.ts +20 -0
  452. package/src/mvt/mvt-loader-with-parser.ts +53 -0
  453. package/src/mvt/mvt-loader.ts +73 -0
  454. package/src/mvt/mvt-source-loader.ts +410 -0
  455. package/src/mvt/mvt-writer.ts +35 -0
  456. package/src/mvt/table-tile-source-loader.ts +672 -0
  457. package/src/mvt/tilejson-format.ts +18 -0
  458. package/src/mvt/tilejson-loader-with-parser.ts +38 -0
  459. package/src/mvt/tilejson-loader.ts +42 -0
  460. package/src/mvt/tilejson-zod-schema.ts +199 -0
  461. package/src/mvt/unbundled.ts +13 -0
  462. package/src/mvt/workers/mvt-worker-node.ts +9 -0
  463. package/src/mvt/workers/mvt-worker.ts +8 -0
  464. package/src/pmtiles/bundled.ts +6 -0
  465. package/src/pmtiles/geoarrow.ts +188 -0
  466. package/src/pmtiles/index.ts +27 -0
  467. package/src/pmtiles/lib/blob-source.ts +41 -0
  468. package/src/pmtiles/lib/encode-pmtiles.ts +322 -0
  469. package/src/pmtiles/lib/parse-pmtiles.ts +180 -0
  470. package/src/pmtiles/lib/range-request-source.ts +60 -0
  471. package/src/pmtiles/lib/version.ts +8 -0
  472. package/src/pmtiles/pmtiles-format.ts +19 -0
  473. package/src/pmtiles/pmtiles-loader-with-parser.ts +60 -0
  474. package/src/pmtiles/pmtiles-loader.ts +30 -0
  475. package/src/pmtiles/pmtiles-source-loader.ts +346 -0
  476. package/src/pmtiles/pmtiles-writer-types.ts +45 -0
  477. package/src/pmtiles/pmtiles-writer.ts +26 -0
  478. package/src/pmtiles/raster.ts +289 -0
  479. package/src/pmtiles/source-info.ts +25 -0
  480. package/src/pmtiles/unbundled.ts +6 -0
  481. package/src/raster-set.ts +2 -2
  482. package/src/tile-matrix.ts +138 -0
  483. package/src/tileset-2d/tile-2d-header.ts +14 -13
  484. package/src/tileset-2d/tileset-2d.ts +81 -19
  485. package/dist/constants.d.ts +0 -38
  486. package/dist/constants.d.ts.map +0 -1
  487. package/dist/constants.js +0 -39
  488. package/dist/constants.js.map +0 -1
  489. package/dist/point-cloud/point-cloud-tile.d.ts +0 -47
  490. package/dist/point-cloud/point-cloud-tile.d.ts.map +0 -1
  491. package/dist/point-cloud/point-cloud-tile.js +0 -70
  492. package/dist/point-cloud/point-cloud-tile.js.map +0 -1
  493. package/dist/point-cloud/point-cloud-tileset.d.ts +0 -135
  494. package/dist/point-cloud/point-cloud-tileset.d.ts.map +0 -1
  495. package/dist/point-cloud/point-cloud-tileset.js +0 -549
  496. package/dist/point-cloud/point-cloud-tileset.js.map +0 -1
  497. package/dist/point-cloud/types.d.ts +0 -81
  498. package/dist/point-cloud/types.d.ts.map +0 -1
  499. package/dist/point-cloud/types.js.map +0 -1
  500. package/dist/point-cloud-tile-source-loader-types.d.ts +0 -31
  501. package/dist/point-cloud-tile-source-loader-types.d.ts.map +0 -1
  502. package/dist/point-cloud-tile-source-loader-types.js +0 -34
  503. package/dist/point-cloud-tile-source-loader-types.js.map +0 -1
  504. package/dist/point-cloud-tile-source-loader.cjs +0 -81
  505. package/dist/point-cloud-tile-source-loader.cjs.map +0 -7
  506. package/dist/point-cloud-tile-source-loader.d.ts +0 -27
  507. package/dist/point-cloud-tile-source-loader.d.ts.map +0 -1
  508. package/dist/point-cloud-tile-source-loader.js +0 -17
  509. package/dist/point-cloud-tile-source-loader.js.map +0 -1
  510. package/dist/point-cloud-tile-source-types.d.ts +0 -15
  511. package/dist/point-cloud-tile-source-types.d.ts.map +0 -1
  512. package/dist/point-cloud-tile-source-types.js.map +0 -1
  513. package/dist/point-cloud-tile-source.cjs +0 -105
  514. package/dist/point-cloud-tile-source.cjs.map +0 -7
  515. package/dist/point-cloud-tile-source.d.ts +0 -36
  516. package/dist/point-cloud-tile-source.d.ts.map +0 -1
  517. package/dist/point-cloud-tile-source.js +0 -84
  518. package/dist/point-cloud-tile-source.js.map +0 -1
  519. package/dist/spatial/format-spatial-reference.d.ts +0 -68
  520. package/dist/spatial/format-spatial-reference.d.ts.map +0 -1
  521. package/dist/spatial/format-spatial-reference.js +0 -291
  522. package/dist/spatial/format-spatial-reference.js.map +0 -1
  523. package/dist/spatial/get-spatial-coordinate-frame.d.ts +0 -20
  524. package/dist/spatial/get-spatial-coordinate-frame.d.ts.map +0 -1
  525. package/dist/spatial/get-spatial-coordinate-frame.js +0 -139
  526. package/dist/spatial/get-spatial-coordinate-frame.js.map +0 -1
  527. package/dist/spatial/i3s-elevation.d.ts +0 -20
  528. package/dist/spatial/i3s-elevation.d.ts.map +0 -1
  529. package/dist/spatial/i3s-elevation.js +0 -90
  530. package/dist/spatial/i3s-elevation.js.map +0 -1
  531. package/dist/spatial/i3s-spatial-transformer.d.ts +0 -205
  532. package/dist/spatial/i3s-spatial-transformer.d.ts.map +0 -1
  533. package/dist/spatial/i3s-spatial-transformer.js +0 -731
  534. package/dist/spatial/i3s-spatial-transformer.js.map +0 -1
  535. package/dist/spatial/normalize-crs-identifier.d.ts +0 -15
  536. package/dist/spatial/normalize-crs-identifier.d.ts.map +0 -1
  537. package/dist/spatial/normalize-crs-identifier.js +0 -22
  538. package/dist/spatial/normalize-crs-identifier.js.map +0 -1
  539. package/dist/spatial/spatial-coordinate-transformer.d.ts +0 -54
  540. package/dist/spatial/spatial-coordinate-transformer.d.ts.map +0 -1
  541. package/dist/spatial/spatial-coordinate-transformer.js +0 -311
  542. package/dist/spatial/spatial-coordinate-transformer.js.map +0 -1
  543. package/dist/spatial/spatial-resource-registry.d.ts +0 -47
  544. package/dist/spatial/spatial-resource-registry.d.ts.map +0 -1
  545. package/dist/spatial/spatial-resource-registry.js +0 -76
  546. package/dist/spatial/spatial-resource-registry.js.map +0 -1
  547. package/dist/spatial/spatial-types.d.ts +0 -190
  548. package/dist/spatial/spatial-types.d.ts.map +0 -1
  549. package/dist/spatial/spatial-types.js +0 -192
  550. package/dist/spatial/spatial-types.js.map +0 -1
  551. package/dist/spatial/tiles-3d-spatial-transformer.d.ts +0 -32
  552. package/dist/spatial/tiles-3d-spatial-transformer.d.ts.map +0 -1
  553. package/dist/spatial/tiles-3d-spatial-transformer.js +0 -163
  554. package/dist/spatial/tiles-3d-spatial-transformer.js.map +0 -1
  555. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +0 -60
  556. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +0 -1
  557. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +0 -130
  558. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +0 -1
  559. package/dist/tileset-3d/common/tile-3d-contracts.d.ts +0 -63
  560. package/dist/tileset-3d/common/tile-3d-contracts.d.ts.map +0 -1
  561. package/dist/tileset-3d/common/tile-3d-contracts.js +0 -51
  562. package/dist/tileset-3d/common/tile-3d-contracts.js.map +0 -1
  563. package/dist/tileset-3d/common/tile-3d.d.ts +0 -410
  564. package/dist/tileset-3d/common/tile-3d.d.ts.map +0 -1
  565. package/dist/tileset-3d/common/tile-3d.js +0 -1056
  566. package/dist/tileset-3d/common/tile-3d.js.map +0 -1
  567. package/dist/tileset-3d/common/tileset-3d.d.ts +0 -369
  568. package/dist/tileset-3d/common/tileset-3d.d.ts.map +0 -1
  569. package/dist/tileset-3d/common/tileset-3d.js +0 -879
  570. package/dist/tileset-3d/common/tileset-3d.js.map +0 -1
  571. package/dist/tileset-3d/common/tileset-cache.d.ts +0 -29
  572. package/dist/tileset-3d/common/tileset-cache.d.ts.map +0 -1
  573. package/dist/tileset-3d/common/tileset-cache.js +0 -82
  574. package/dist/tileset-3d/common/tileset-cache.js.map +0 -1
  575. package/dist/tileset-3d/common/tileset-content-traversal.d.ts +0 -37
  576. package/dist/tileset-3d/common/tileset-content-traversal.d.ts.map +0 -1
  577. package/dist/tileset-3d/common/tileset-content-traversal.js +0 -80
  578. package/dist/tileset-3d/common/tileset-content-traversal.js.map +0 -1
  579. package/dist/tileset-3d/common/tileset-observability.d.ts +0 -60
  580. package/dist/tileset-3d/common/tileset-observability.d.ts.map +0 -1
  581. package/dist/tileset-3d/common/tileset-observability.js +0 -39
  582. package/dist/tileset-3d/common/tileset-observability.js.map +0 -1
  583. package/dist/tileset-3d/common/tileset-source.d.ts +0 -228
  584. package/dist/tileset-3d/common/tileset-source.d.ts.map +0 -1
  585. package/dist/tileset-3d/common/tileset-source.js +0 -17
  586. package/dist/tileset-3d/common/tileset-source.js.map +0 -1
  587. package/dist/tileset-3d/common/tileset-traverser.d.ts +0 -88
  588. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +0 -1
  589. package/dist/tileset-3d/common/tileset-traverser.js +0 -341
  590. package/dist/tileset-3d/common/tileset-traverser.js.map +0 -1
  591. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +0 -182
  592. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +0 -1
  593. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +0 -678
  594. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +0 -1
  595. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +0 -221
  596. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +0 -1
  597. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +0 -770
  598. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +0 -1
  599. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +0 -111
  600. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  601. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +0 -339
  602. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  603. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts +0 -27
  604. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  605. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js +0 -45
  606. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  607. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +0 -116
  608. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +0 -1
  609. package/dist/tileset-3d/format-i3s/i3s-source.js +0 -450
  610. package/dist/tileset-3d/format-i3s/i3s-source.js.map +0 -1
  611. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts +0 -34
  612. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  613. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js +0 -81
  614. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +0 -1
  615. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts +0 -25
  616. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  617. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js +0 -84
  618. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +0 -1
  619. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts +0 -5
  620. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +0 -1
  621. package/dist/tileset-3d/helpers/3d-tiles-options.js +0 -9
  622. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +0 -1
  623. package/dist/tileset-3d/helpers/bounding-volume.d.ts +0 -23
  624. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +0 -1
  625. package/dist/tileset-3d/helpers/bounding-volume.js +0 -236
  626. package/dist/tileset-3d/helpers/bounding-volume.js.map +0 -1
  627. package/dist/tileset-3d/helpers/frame-state.d.ts +0 -93
  628. package/dist/tileset-3d/helpers/frame-state.d.ts.map +0 -1
  629. package/dist/tileset-3d/helpers/frame-state.js +0 -211
  630. package/dist/tileset-3d/helpers/frame-state.js.map +0 -1
  631. package/dist/tileset-3d/helpers/i3s-lod.d.ts +0 -20
  632. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +0 -1
  633. package/dist/tileset-3d/helpers/i3s-lod.js +0 -95
  634. package/dist/tileset-3d/helpers/i3s-lod.js.map +0 -1
  635. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts +0 -17
  636. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts.map +0 -1
  637. package/dist/tileset-3d/helpers/s2-bounding-volume.js +0 -17
  638. package/dist/tileset-3d/helpers/s2-bounding-volume.js.map +0 -1
  639. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +0 -72
  640. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +0 -1
  641. package/dist/tileset-3d/helpers/tiles-3d-lod.js +0 -257
  642. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +0 -1
  643. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +0 -134
  644. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +0 -1
  645. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +0 -179
  646. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +0 -1
  647. package/dist/tileset-3d/helpers/transform-utils.d.ts +0 -3
  648. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +0 -1
  649. package/dist/tileset-3d/helpers/transform-utils.js +0 -86
  650. package/dist/tileset-3d/helpers/transform-utils.js.map +0 -1
  651. package/dist/tileset-3d/helpers/zoom.d.ts +0 -46
  652. package/dist/tileset-3d/helpers/zoom.d.ts.map +0 -1
  653. package/dist/tileset-3d/helpers/zoom.js +0 -86
  654. package/dist/tileset-3d/helpers/zoom.js.map +0 -1
  655. package/dist/types.d.ts +0 -48
  656. package/dist/types.d.ts.map +0 -1
  657. package/dist/types.js.map +0 -1
  658. package/dist/utils/doubly-linked-list-node.d.ts +0 -11
  659. package/dist/utils/doubly-linked-list-node.d.ts.map +0 -1
  660. package/dist/utils/doubly-linked-list-node.js +0 -20
  661. package/dist/utils/doubly-linked-list-node.js.map +0 -1
  662. package/dist/utils/doubly-linked-list.d.ts +0 -30
  663. package/dist/utils/doubly-linked-list.d.ts.map +0 -1
  664. package/dist/utils/doubly-linked-list.js +0 -93
  665. package/dist/utils/doubly-linked-list.js.map +0 -1
  666. package/dist/utils/managed-array.d.ts +0 -85
  667. package/dist/utils/managed-array.d.ts.map +0 -1
  668. package/dist/utils/managed-array.js +0 -152
  669. package/dist/utils/managed-array.js.map +0 -1
  670. package/src/constants.ts +0 -59
  671. package/src/point-cloud/point-cloud-tile.ts +0 -80
  672. package/src/point-cloud/point-cloud-tileset.ts +0 -767
  673. package/src/point-cloud/types.ts +0 -99
  674. package/src/point-cloud-tile-source-loader-types.ts +0 -53
  675. package/src/point-cloud-tile-source-loader.ts +0 -32
  676. package/src/point-cloud-tile-source-types.ts +0 -20
  677. package/src/point-cloud-tile-source.ts +0 -112
  678. package/src/spatial/format-spatial-reference.ts +0 -385
  679. package/src/spatial/get-spatial-coordinate-frame.ts +0 -169
  680. package/src/spatial/i3s-elevation.ts +0 -96
  681. package/src/spatial/i3s-spatial-transformer.ts +0 -1021
  682. package/src/spatial/normalize-crs-identifier.ts +0 -26
  683. package/src/spatial/spatial-coordinate-transformer.ts +0 -397
  684. package/src/spatial/spatial-resource-registry.ts +0 -90
  685. package/src/spatial/spatial-types.ts +0 -422
  686. package/src/spatial/tiles-3d-spatial-transformer.ts +0 -194
  687. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +0 -205
  688. package/src/tileset-3d/common/tile-3d-contracts.ts +0 -115
  689. package/src/tileset-3d/common/tile-3d.ts +0 -1310
  690. package/src/tileset-3d/common/tileset-3d.ts +0 -1210
  691. package/src/tileset-3d/common/tileset-cache.ts +0 -111
  692. package/src/tileset-3d/common/tileset-content-traversal.ts +0 -114
  693. package/src/tileset-3d/common/tileset-observability.ts +0 -100
  694. package/src/tileset-3d/common/tileset-source.ts +0 -284
  695. package/src/tileset-3d/common/tileset-traverser.ts +0 -416
  696. package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +0 -1056
  697. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +0 -1025
  698. package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +0 -391
  699. package/src/tileset-3d/format-i3s/i3s-pending-tiles-register.ts +0 -48
  700. package/src/tileset-3d/format-i3s/i3s-source.ts +0 -557
  701. package/src/tileset-3d/format-i3s/i3s-tile-manager.ts +0 -105
  702. package/src/tileset-3d/format-i3s/i3s-tileset-traverser.ts +0 -102
  703. package/src/tileset-3d/helpers/3d-tiles-options.ts +0 -11
  704. package/src/tileset-3d/helpers/bounding-volume.ts +0 -281
  705. package/src/tileset-3d/helpers/frame-state.ts +0 -322
  706. package/src/tileset-3d/helpers/i3s-lod.ts +0 -109
  707. package/src/tileset-3d/helpers/s2-bounding-volume.ts +0 -32
  708. package/src/tileset-3d/helpers/tiles-3d-lod.ts +0 -370
  709. package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +0 -301
  710. package/src/tileset-3d/helpers/transform-utils.ts +0 -109
  711. package/src/tileset-3d/helpers/zoom.ts +0 -120
  712. package/src/types.ts +0 -54
  713. package/src/utils/doubly-linked-list-node.ts +0 -22
  714. package/src/utils/doubly-linked-list.ts +0 -105
  715. package/src/utils/managed-array.ts +0 -174
  716. /package/dist/{point-cloud → mvt/lib}/types.js +0 -0
@@ -1,1021 +0,0 @@
1
- // loaders.gl
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
-
5
- import {Matrix3, Matrix4, Quaternion, Vector3} from '@math.gl/core';
6
- import {Ellipsoid} from '@math.gl/geospatial';
7
- import {
8
- getSpatialCoordinateFrame,
9
- SpatialCoordinateTransformer
10
- } from './spatial-coordinate-transformer';
11
- import {
12
- createTilesetSpatialReference,
13
- markTilesetSpatialReferenceTransformed
14
- } from './spatial-types';
15
- import {getI3SLinearUnitScale} from './i3s-elevation';
16
- import type {
17
- TilesetCoordinateFrame,
18
- TilesetElevationBounds,
19
- TilesetElevationMode,
20
- TilesetElevationProvider,
21
- TilesetSpatialOptions,
22
- TilesetSpatialReference
23
- } from './spatial-types';
24
-
25
- /** Minimal I3S oriented bounding box required by the spatial adapter. */
26
- export type I3SSpatialObb = {
27
- /** Center in source CRS coordinates. */
28
- center: ArrayLike<number>;
29
- /** Half lengths along the oriented axes. */
30
- halfSize: ArrayLike<number>;
31
- /** Orientation quaternion. */
32
- quaternion: ArrayLike<number>;
33
- };
34
-
35
- /** Input used to rebuild an I3S node bound in the selected output frame. */
36
- export type I3SSpatialBounds = {
37
- /** Minimum bounding sphere encoded as source center plus radius. */
38
- mbs?: ArrayLike<number>;
39
- /** Oriented source bound, preferred when available. */
40
- obb?: I3SSpatialObb;
41
- /** Frame in which I3S vectors and quaternions are expressed. */
42
- normalReferenceFrame?: string;
43
- };
44
-
45
- /** Renderer-ready positions and metadata produced for an I3S geometry resource. */
46
- export type I3STransformedPositions = {
47
- /** Float32 offsets from the stable target origin. */
48
- positions: Float32Array;
49
- /** Reconstructed absolute source positions retained for normal transformation. */
50
- sourcePositions: Float64Array;
51
- /** Stable origin in target CRS coordinates. */
52
- origin: [number, number, number];
53
- /** Origin used by geographic deck.gl coordinate systems. */
54
- cartographicOrigin: [number, number, number];
55
- /** Renderer coordinate-system discriminator. */
56
- coordinateSystem: 'cartesian' | 'lnglat-offsets';
57
- /** Translation matrix used for Cartesian target offsets. */
58
- modelMatrix: Matrix4;
59
- };
60
-
61
- /** Double-precision conversion geometry after I3S units, elevation and CRS placement. */
62
- export type I3STransformedGeometry = {
63
- /** Absolute target xyz positions, before any writer-owned float32 rebasing. */
64
- positions: Float64Array;
65
- /** Optional unit normals in the target basis. */
66
- normals?: Float32Array;
67
- };
68
-
69
- /**
70
- * Applies one normalized I3S horizontal CRS operation consistently to geometry, normals, origins,
71
- * and node bounds.
72
- */
73
- export class I3SSpatialTransformer {
74
- /** Descriptor attached to output after all adapter-owned spatial values have been transformed. */
75
- readonly spatialReference: TilesetSpatialReference;
76
-
77
- /** Broad coordinate frame of the selected output CRS. */
78
- readonly targetCoordinateFrame: TilesetCoordinateFrame;
79
-
80
- /** Source-to-target position operation. */
81
- private readonly positionTransformer: SpatialCoordinateTransformer;
82
-
83
- /** Source-to-WGS84 geographic operation used for vector-frame conversion. */
84
- private readonly sourceToGeographicTransformer: SpatialCoordinateTransformer;
85
-
86
- /** WGS84-geographic-to-target operation used for normal finite differences. */
87
- private readonly geographicToTargetTransformer: SpatialCoordinateTransformer;
88
-
89
- /** Source frame recorded by I3S metadata. */
90
- private readonly sourceCoordinateFrame: TilesetCoordinateFrame;
91
-
92
- /** Source Z multiplier that normalizes stored elevation values to meters. */
93
- private readonly sourceVerticalUnitScale: number;
94
-
95
- /** I3S elevation placement mode. */
96
- private readonly elevationMode?: TilesetElevationMode;
97
-
98
- /** I3S elevation offset normalized to meters. */
99
- private readonly elevationOffset: number;
100
-
101
- /** Terrain or scene provider selected for the declared placement mode. */
102
- private readonly elevationProvider?: TilesetElevationProvider;
103
-
104
- /** Provider height multiplier that normalizes returned values to meters. */
105
- private readonly providerUnitScale: number;
106
-
107
- /** Optional provider-height to layer-height datum operation. */
108
- private readonly providerHeightTransformer?: SpatialCoordinateTransformer;
109
-
110
- /**
111
- * Creates an I3S spatial adapter.
112
- *
113
- * @param spatialReference - Transformable I3S spatial descriptor.
114
- * @param options - Registered geoid and custom resource options used by the shared transformer.
115
- */
116
- constructor(spatialReference: TilesetSpatialReference, options: TilesetSpatialOptions = {}) {
117
- if (spatialReference.status !== 'transformable' && spatialReference.status !== 'transformed') {
118
- throw new Error('I3SSpatialTransformer requires a requested, transformable spatial output');
119
- }
120
- const targetCrs = spatialReference.targetCrs || spatialReference.sourceCrs;
121
- if (!targetCrs) {
122
- throw new Error('I3S spatial transformation requires a target CRS');
123
- }
124
-
125
- this.positionTransformer = new SpatialCoordinateTransformer(spatialReference, options);
126
- this.sourceCoordinateFrame = spatialReference.coordinateFrame;
127
- this.sourceVerticalUnitScale = spatialReference.verticalUnitScale;
128
- this.elevationMode = spatialReference.elevationMode;
129
- this.elevationOffset =
130
- (spatialReference.elevationOffset || 0) * spatialReference.elevationUnitScale;
131
- this.elevationProvider = getElevationProvider(this.elevationMode, options);
132
- if (
133
- this.elevationProvider &&
134
- (typeof this.elevationProvider.sampleElevations !== 'function' ||
135
- typeof this.elevationProvider.getElevationRange !== 'function')
136
- ) {
137
- throw new Error(
138
- 'An I3S elevation provider must implement sampleElevations() and getElevationRange()'
139
- );
140
- }
141
- const providerUnitScale = getI3SLinearUnitScale(this.elevationProvider?.unit || 'meter');
142
- if (this.elevationProvider && providerUnitScale === undefined) {
143
- throw new Error(`Unsupported elevation-provider unit ${this.elevationProvider.unit}`);
144
- }
145
- this.providerUnitScale = providerUnitScale || 1;
146
- this.targetCoordinateFrame = getSpatialCoordinateFrame(targetCrs);
147
- this.spatialReference = markTilesetSpatialReferenceTransformed(spatialReference);
148
-
149
- const sourceToGeographicReference = createTilesetSpatialReference(
150
- {
151
- sourceCrs: spatialReference.sourceCrs,
152
- heightReference: spatialReference.heightReference,
153
- coordinateFrame: spatialReference.coordinateFrame,
154
- axisOrder: spatialReference.axisOrder,
155
- provenance: spatialReference.provenance
156
- },
157
- {targetCrs: 'EPSG:4326'}
158
- );
159
- this.sourceToGeographicTransformer = new SpatialCoordinateTransformer(
160
- sourceToGeographicReference
161
- );
162
-
163
- if (requiresElevationSurface(this.elevationMode)) {
164
- if (!this.elevationProvider) {
165
- const providerName = this.elevationMode === 'relativeToScene' ? 'scene' : 'terrain';
166
- throw new Error(
167
- `I3S elevation mode ${this.elevationMode} requires a ${providerName} elevation provider`
168
- );
169
- }
170
- if (spatialReference.heightReference === 'unknown') {
171
- throw new Error(
172
- `I3S elevation mode ${this.elevationMode} requires a known source height reference`
173
- );
174
- }
175
- const providerHeightReference =
176
- this.elevationProvider.heightReference || spatialReference.heightReference;
177
- if (providerHeightReference !== spatialReference.heightReference) {
178
- if (
179
- spatialReference.heightReference !== 'ellipsoidal' &&
180
- spatialReference.heightReference !== 'orthometric'
181
- ) {
182
- throw new Error(
183
- 'Converting elevation-provider heights requires an ellipsoidal or orthometric source height reference'
184
- );
185
- }
186
- const providerHeightSpatialReference = createTilesetSpatialReference(
187
- {
188
- sourceCrs: 'EPSG:4326',
189
- heightReference: providerHeightReference,
190
- coordinateFrame: 'geographic',
191
- axisOrder: 'xyz',
192
- provenance: 'caller-override'
193
- },
194
- {
195
- targetCrs: 'EPSG:4326',
196
- targetHeightReference: spatialReference.heightReference,
197
- geoidModel: options.geoidModel
198
- }
199
- );
200
- this.providerHeightTransformer = new SpatialCoordinateTransformer(
201
- providerHeightSpatialReference,
202
- options
203
- );
204
- }
205
- }
206
-
207
- const geographicToTargetReference = createTilesetSpatialReference(
208
- {
209
- sourceCrs: 'EPSG:4326',
210
- heightReference: spatialReference.heightReference,
211
- coordinateFrame: 'geographic',
212
- axisOrder: 'xyz',
213
- provenance: 'format-default'
214
- },
215
- {
216
- targetCrs,
217
- targetHeightReference: spatialReference.targetHeightReference,
218
- geoidModel: options.geoidModel
219
- }
220
- );
221
- this.geographicToTargetTransformer = new SpatialCoordinateTransformer(
222
- geographicToTargetReference,
223
- options
224
- );
225
- }
226
-
227
- /** Transform one absolute I3S source position. */
228
- transformPosition(position: ArrayLike<number>): [number, number, number] {
229
- const placedPosition = this.placeSourcePositionsSync(position);
230
- const transformed = this.positionTransformer.transformPosition([
231
- placedPosition[0],
232
- placedPosition[1],
233
- placedPosition[2]
234
- ]);
235
- return [transformed[0], transformed[1], transformed[2]];
236
- }
237
-
238
- /** Transform one absolute I3S source position after asynchronous surface placement. */
239
- async transformPositionAsync(position: ArrayLike<number>): Promise<[number, number, number]> {
240
- const placedPosition = await this.placeSourcePositions(position);
241
- const transformed = this.positionTransformer.transformPosition([
242
- placedPosition[0],
243
- placedPosition[1],
244
- placedPosition[2]
245
- ]);
246
- return [transformed[0], transformed[1], transformed[2]];
247
- }
248
-
249
- /** Transform an already placed, meter-normalized position to the requested target. */
250
- private transformPlacedPosition(position: ArrayLike<number>): [number, number, number] {
251
- const transformed = this.positionTransformer.transformPosition([
252
- position[0],
253
- position[1],
254
- position[2]
255
- ]);
256
- return [transformed[0], transformed[1], transformed[2]];
257
- }
258
-
259
- /** Transform one absolute I3S source position to WGS84 longitude, latitude, and height. */
260
- transformSourcePositionToGeographic(position: ArrayLike<number>): [number, number, number] {
261
- const placedPosition = this.placeSourcePositionsSync(position);
262
- const transformed = this.sourceToGeographicTransformer.transformPosition([
263
- placedPosition[0],
264
- placedPosition[1],
265
- placedPosition[2]
266
- ]);
267
- return [transformed[0], transformed[1], transformed[2]];
268
- }
269
-
270
- /** Transform one source position to WGS84 after asynchronous elevation placement. */
271
- async transformSourcePositionToGeographicAsync(
272
- position: ArrayLike<number>
273
- ): Promise<[number, number, number]> {
274
- const placedPosition = await this.placeSourcePositions(position);
275
- const transformed = this.sourceToGeographicTransformer.transformPosition([
276
- placedPosition[0],
277
- placedPosition[1],
278
- placedPosition[2]
279
- ]);
280
- return [transformed[0], transformed[1], transformed[2]];
281
- }
282
-
283
- /**
284
- * Transform absolute Float64 positions and return stable Float32 offsets around a target origin.
285
- *
286
- * @param sourcePositions - Absolute positions in source CRS order.
287
- * @param sourceOrigin - Stable source origin, normally the node MBS or OBB center.
288
- */
289
- transformPositions(
290
- sourcePositions: ArrayLike<number>,
291
- sourceOrigin: ArrayLike<number>
292
- ): I3STransformedPositions {
293
- const placedSourcePositions = this.placeSourcePositionsSync(sourcePositions);
294
- const placedSourceOrigin = this.placeSourcePositionsSync(sourceOrigin);
295
- return this.transformPlacedPositions(placedSourcePositions, placedSourceOrigin);
296
- }
297
-
298
- /**
299
- * Transform positions after asynchronously sampling any requested terrain or scene surface.
300
- *
301
- * @param sourcePositions - Absolute positions in source CRS order.
302
- * @param sourceOrigin - Stable source origin, normally the node MBS or OBB center.
303
- * @returns Renderer-ready target-frame offsets and stable origin metadata.
304
- */
305
- async transformPositionsAsync(
306
- sourcePositions: ArrayLike<number>,
307
- sourceOrigin: ArrayLike<number>
308
- ): Promise<I3STransformedPositions> {
309
- const combinedPositions = new Float64Array(sourcePositions.length + 3);
310
- combinedPositions.set(Array.from(sourcePositions), 0);
311
- combinedPositions.set(Array.from(sourceOrigin).slice(0, 3), sourcePositions.length);
312
- const placedPositions = await this.placeSourcePositions(combinedPositions);
313
- return this.transformPlacedPositions(
314
- placedPositions.subarray(0, sourcePositions.length),
315
- placedPositions.subarray(sourcePositions.length)
316
- );
317
- }
318
-
319
- /**
320
- * Transforms conversion geometry without passing through renderer float32 offsets.
321
- * Positions and normals share one batch of elevation samples. Source arrays remain unchanged.
322
- * @param sourcePositions - Packed absolute xyz positions in source units.
323
- * @param normals - Optional packed normals paired with the positions.
324
- * @param normalReferenceFrame - I3S earth-centered or vertex-reference-frame declaration.
325
- * @returns Absolute target positions and optional transformed normals.
326
- */
327
- async transformGeometryAsync(
328
- sourcePositions: ArrayLike<number>,
329
- normals?: ArrayLike<number>,
330
- normalReferenceFrame = 'earth-centered'
331
- ): Promise<I3STransformedGeometry> {
332
- if (sourcePositions.length % 3 || (normals && normals.length !== sourcePositions.length)) {
333
- throw new Error('Conversion positions and normals must contain matching finite xyz triples');
334
- }
335
- for (let index = 0; index < sourcePositions.length; index++) {
336
- if (
337
- !Number.isFinite(sourcePositions[index]) ||
338
- (normals && !Number.isFinite(normals[index]))
339
- ) {
340
- throw new Error(
341
- 'Conversion positions and normals must contain matching finite xyz triples'
342
- );
343
- }
344
- }
345
- if (!['earth-centered', 'vertex-reference-frame'].includes(normalReferenceFrame)) {
346
- throw new Error('Unsupported I3S normal reference frame');
347
- }
348
- const placedPositions = await this.placeSourcePositions(sourcePositions);
349
- return {
350
- positions: this.positionTransformer.transformPositions(placedPositions),
351
- normals: normals
352
- ? this.transformNormals(normals, placedPositions, normalReferenceFrame)
353
- : undefined
354
- };
355
- }
356
-
357
- /** Transform already placed positions into renderer-relative target coordinates. */
358
- private transformPlacedPositions(
359
- sourcePositions: ArrayLike<number>,
360
- sourceOrigin: ArrayLike<number>
361
- ): I3STransformedPositions {
362
- const origin = this.transformPlacedPosition(sourceOrigin);
363
- const positions = new Float32Array(sourcePositions.length);
364
- const absoluteSourcePositions = Float64Array.from(sourcePositions);
365
-
366
- for (let index = 0; index < sourcePositions.length; index += 3) {
367
- const transformed = this.transformPlacedPosition([
368
- sourcePositions[index],
369
- sourcePositions[index + 1],
370
- sourcePositions[index + 2]
371
- ]);
372
- positions[index] = transformed[0] - origin[0];
373
- positions[index + 1] = transformed[1] - origin[1];
374
- positions[index + 2] = transformed[2] - origin[2];
375
- }
376
-
377
- const isGeographic = this.targetCoordinateFrame === 'geographic';
378
- const modelMatrix = isGeographic ? new Matrix4() : new Matrix4().translate(origin);
379
- return {
380
- positions,
381
- sourcePositions: absoluteSourcePositions,
382
- origin,
383
- cartographicOrigin: isGeographic ? origin : [0, 0, 0],
384
- coordinateSystem: isGeographic ? 'lnglat-offsets' : 'cartesian',
385
- modelMatrix
386
- };
387
- }
388
-
389
- /**
390
- * Transform I3S normals into the selected target basis.
391
- *
392
- * Earth-centered normals are rotated directly. Vertex-reference-frame normals are first mapped
393
- * through the local east/north/up basis at each source position.
394
- *
395
- * @param normals - Three-component normal vectors.
396
- * @param sourcePositions - Absolute source position paired with each normal.
397
- * @param normalReferenceFrame - I3S normal frame declaration.
398
- */
399
- transformNormals(
400
- normals: ArrayLike<number>,
401
- sourcePositions: ArrayLike<number>,
402
- normalReferenceFrame = 'earth-centered'
403
- ): Float32Array {
404
- if (normals.length !== sourcePositions.length || normals.length % 3) {
405
- throw new Error('I3S normals and positions must have matching xyz component counts');
406
- }
407
- const transformedNormals = new Float32Array(normals.length);
408
- // Earth-centered I3S normals already use the output ECEF basis; no position projection is needed.
409
- if (
410
- normalReferenceFrame === 'earth-centered' &&
411
- (this.spatialReference.targetCrs || this.spatialReference.sourceCrs) === 'EPSG:4978'
412
- ) {
413
- for (let index = 0; index < normals.length; index += 3) {
414
- const length = Math.hypot(normals[index], normals[index + 1], normals[index + 2]);
415
- for (let axis = 0; axis < 3; axis++) {
416
- transformedNormals[index + axis] = length
417
- ? normals[index + axis] / length
418
- : normals[index + axis];
419
- }
420
- }
421
- return transformedNormals;
422
- }
423
- for (let index = 0; index < normals.length; index += 3) {
424
- const geographic = this.sourceToGeographicTransformer.transformPosition([
425
- sourcePositions[index],
426
- sourcePositions[index + 1],
427
- sourcePositions[index + 2]
428
- ]);
429
- const inputNormal = new Vector3([
430
- normals[index],
431
- normals[index + 1],
432
- normals[index + 2]
433
- ]).normalize();
434
- const ecefNormal =
435
- normalReferenceFrame === 'earth-centered'
436
- ? inputNormal
437
- : localEnuVectorToEcef(inputNormal, geographic);
438
- const outputNormal = this.transformEcefNormal(ecefNormal, geographic);
439
- transformedNormals.set(outputNormal, index);
440
- }
441
- return transformedNormals;
442
- }
443
-
444
- /**
445
- * Rebuild an I3S node bound from transformed corner or sphere-axis samples.
446
- *
447
- * @param bounds - Source MBS/OBB fields.
448
- * @returns A generic tile `region` for geographic output or axis-aligned `box` otherwise.
449
- */
450
- transformBoundingVolume(bounds: I3SSpatialBounds): {box?: number[]; region?: number[]} {
451
- const geographicSamples = this.getGeographicBoundSamples(bounds);
452
- const targetSamples = geographicSamples.map(position =>
453
- this.geographicToTargetTransformer.transformPosition(position)
454
- );
455
- return this.targetCoordinateFrame === 'geographic'
456
- ? {region: getGeographicRegion(targetSamples)}
457
- : {box: getAxisAlignedBox(targetSamples)};
458
- }
459
-
460
- /** Rebuild an I3S bound in the target frame after asynchronous elevation placement. */
461
- async transformBoundingVolumeAsync(
462
- bounds: I3SSpatialBounds
463
- ): Promise<{box?: number[]; region?: number[]}> {
464
- const geographicSamples = await this.getGeographicBoundSamplesAsync(bounds);
465
- const targetSamples = geographicSamples.map(position =>
466
- this.geographicToTargetTransformer.transformPosition(position)
467
- );
468
- return this.targetCoordinateFrame === 'geographic'
469
- ? {region: getGeographicRegion(targetSamples)}
470
- : {box: getAxisAlignedBox(targetSamples)};
471
- }
472
-
473
- /** Rebuild an I3S bound as a WGS84 geographic region for geographic traversal algorithms. */
474
- transformBoundingVolumeToGeographic(bounds: I3SSpatialBounds): {region: number[]} {
475
- return {region: getGeographicRegion(this.getGeographicBoundSamples(bounds))};
476
- }
477
-
478
- /** Rebuild an I3S bound as WGS84 geographic after asynchronous elevation placement. */
479
- async transformBoundingVolumeToGeographicAsync(
480
- bounds: I3SSpatialBounds
481
- ): Promise<{region: number[]}> {
482
- return {region: getGeographicRegion(await this.getGeographicBoundSamplesAsync(bounds))};
483
- }
484
-
485
- /** Rebuild an I3S bound as a WGS84 ECEF box for generic `Tileset3D` traversal. */
486
- transformBoundingVolumeToGeocentric(bounds: I3SSpatialBounds): {box: number[]} {
487
- const cartesianSamples = this.getGeographicBoundSamples(bounds).map(position =>
488
- Array.from(Ellipsoid.WGS84.cartographicToCartesian(new Vector3(position)))
489
- );
490
- return {box: getAxisAlignedBox(cartesianSamples)};
491
- }
492
-
493
- /** Rebuild an I3S bound as WGS84 ECEF after asynchronous elevation placement. */
494
- async transformBoundingVolumeToGeocentricAsync(
495
- bounds: I3SSpatialBounds
496
- ): Promise<{box: number[]}> {
497
- const cartesianSamples = (await this.getGeographicBoundSamplesAsync(bounds)).map(position =>
498
- Array.from(Ellipsoid.WGS84.cartographicToCartesian(new Vector3(position)))
499
- );
500
- return {box: getAxisAlignedBox(cartesianSamples)};
501
- }
502
-
503
- /** Return a WGS84 geographic MBS used by the I3S screen-threshold calculation. */
504
- transformBoundingSphereToGeographic(bounds: I3SSpatialBounds): [number, number, number, number] {
505
- const sourceCenter = bounds.mbs?.length
506
- ? Array.from(bounds.mbs).slice(0, 3)
507
- : bounds.obb
508
- ? Array.from(bounds.obb.center).slice(0, 3)
509
- : null;
510
- if (!sourceCenter) {
511
- throw new Error('I3S spatial transformation requires an MBS or OBB bound');
512
- }
513
- const placedCenter = this.placeSourcePositionsSync(sourceCenter);
514
- const geographicCenter = this.sourceToGeographicTransformer.transformPosition(
515
- Array.from(placedCenter)
516
- );
517
- const radius = bounds.mbs?.length
518
- ? bounds.mbs[3]
519
- : Math.hypot(...Array.from(bounds.obb!.halfSize).slice(0, 3));
520
- return [geographicCenter[0], geographicCenter[1], geographicCenter[2], radius];
521
- }
522
-
523
- /** Return a placed WGS84 MBS used by the I3S screen-threshold calculation. */
524
- async transformBoundingSphereToGeographicAsync(
525
- bounds: I3SSpatialBounds
526
- ): Promise<[number, number, number, number]> {
527
- return getGeographicBoundingSphere(await this.getGeographicBoundSamplesAsync(bounds));
528
- }
529
-
530
- /**
531
- * Rebuild traversal, target-output, and I3S LOD bounds from one elevation-sampling batch.
532
- *
533
- * @param bounds - Source MBS/OBB fields.
534
- * @returns Parallel bounds in WGS84 ECEF, the selected output frame, and WGS84 geographic.
535
- */
536
- async transformBoundsAsync(bounds: I3SSpatialBounds): Promise<{
537
- boundingVolume: {box: number[]};
538
- spatialBoundingVolume: {box?: number[]; region?: number[]};
539
- i3sLodMbs: [number, number, number, number];
540
- }> {
541
- const geographicSamples = await this.getGeographicBoundSamplesAsync(bounds);
542
- const cartesianSamples = geographicSamples.map(position =>
543
- Array.from(Ellipsoid.WGS84.cartographicToCartesian(new Vector3(position)))
544
- );
545
- const targetSamples = geographicSamples.map(position =>
546
- this.geographicToTargetTransformer.transformPosition(position)
547
- );
548
- return {
549
- boundingVolume: {box: getAxisAlignedBox(cartesianSamples)},
550
- spatialBoundingVolume:
551
- this.targetCoordinateFrame === 'geographic'
552
- ? {region: getGeographicRegion(targetSamples)}
553
- : {box: getAxisAlignedBox(targetSamples)},
554
- i3sLodMbs: requiresElevationSurface(this.elevationMode)
555
- ? getGeographicBoundingSphere(geographicSamples)
556
- : this.transformBoundingSphereToGeographic(bounds)
557
- };
558
- }
559
-
560
- /**
561
- * Rebuild Point Cloud traversal and target-output bounds from one elevation-sampling batch.
562
- *
563
- * @param bounds - Source OBB fields.
564
- * @returns WGS84 geographic traversal bound plus the selected output-frame bound.
565
- */
566
- async transformPointCloudBoundsAsync(bounds: I3SSpatialBounds): Promise<{
567
- boundingVolume: {region: number[]};
568
- spatialBoundingVolume: {box?: number[]; region?: number[]};
569
- }> {
570
- const geographicSamples = await this.getGeographicBoundSamplesAsync(bounds);
571
- const targetSamples = geographicSamples.map(position =>
572
- this.geographicToTargetTransformer.transformPosition(position)
573
- );
574
- return {
575
- boundingVolume: {region: getGeographicRegion(geographicSamples)},
576
- spatialBoundingVolume:
577
- this.targetCoordinateFrame === 'geographic'
578
- ? {region: getGeographicRegion(targetSamples)}
579
- : {box: getAxisAlignedBox(targetSamples)}
580
- };
581
- }
582
-
583
- /** Sample a source I3S bound and normalize every sample to WGS84 geographic coordinates. */
584
- private getGeographicBoundSamples(bounds: I3SSpatialBounds): number[][] {
585
- const sourceSamples = getSourceBoundSamples(
586
- bounds,
587
- this.sourceCoordinateFrame,
588
- this.sourceToGeographicTransformer,
589
- this.sourceVerticalUnitScale
590
- );
591
- if (!sourceSamples.length) {
592
- throw new Error('I3S spatial transformation requires an MBS or OBB bound');
593
- }
594
- const placedSourceSamples = this.placeSourcePositionsSync(sourceSamples.flat(), true);
595
- const placedSamples = toPositionArrays(placedSourceSamples);
596
- return this.sourceCoordinateFrame === 'geographic'
597
- ? placedSamples
598
- : placedSamples.map(position =>
599
- this.sourceToGeographicTransformer.transformPosition(position)
600
- );
601
- }
602
-
603
- /** Sample, place, and normalize one source bound to WGS84 geographic coordinates. */
604
- private async getGeographicBoundSamplesAsync(bounds: I3SSpatialBounds): Promise<number[][]> {
605
- const sourceSamples = getSourceBoundSamples(
606
- bounds,
607
- this.sourceCoordinateFrame,
608
- this.sourceToGeographicTransformer,
609
- this.sourceVerticalUnitScale
610
- );
611
- if (!sourceSamples.length) {
612
- throw new Error('I3S spatial transformation requires an MBS or OBB bound');
613
- }
614
- if (requiresElevationSurface(this.elevationMode)) {
615
- const geographicSamples =
616
- this.sourceCoordinateFrame === 'geographic'
617
- ? sourceSamples
618
- : sourceSamples.map(position =>
619
- this.sourceToGeographicTransformer.transformPosition(position)
620
- );
621
- return await this.placeGeographicBoundSamples(geographicSamples);
622
- }
623
- const placedSamples = toPositionArrays(
624
- await this.placeSourcePositions(sourceSamples.flat(), true)
625
- );
626
- return this.sourceCoordinateFrame === 'geographic'
627
- ? placedSamples
628
- : placedSamples.map(position =>
629
- this.sourceToGeographicTransformer.transformPosition(position)
630
- );
631
- }
632
-
633
- /** Apply a provider's conservative surface range to an entire geographic bound footprint. */
634
- private async placeGeographicBoundSamples(geographicSamples: number[][]): Promise<number[][]> {
635
- const elevationProvider = this.elevationProvider!;
636
- const elevationRange = await elevationProvider.getElevationRange(
637
- getElevationBounds(geographicSamples)
638
- );
639
- const minimumProviderHeight = elevationRange.minimum * this.providerUnitScale;
640
- const maximumProviderHeight = elevationRange.maximum * this.providerUnitScale;
641
- if (
642
- !Number.isFinite(minimumProviderHeight) ||
643
- !Number.isFinite(maximumProviderHeight) ||
644
- minimumProviderHeight > maximumProviderHeight
645
- ) {
646
- throw new Error(
647
- 'Elevation provider returned an invalid range; minimum and maximum must be finite and ordered'
648
- );
649
- }
650
-
651
- const sourceHeights = geographicSamples.map(position => position[2]);
652
- const minimumSourceHeight = Math.min(...sourceHeights);
653
- const maximumSourceHeight = Math.max(...sourceHeights);
654
- const placedSamples: number[][] = [];
655
- for (const [longitude, latitude] of geographicSamples) {
656
- const convertedMinimum = this.providerHeightTransformer
657
- ? this.providerHeightTransformer.transformPosition([
658
- longitude,
659
- latitude,
660
- minimumProviderHeight
661
- ])[2]
662
- : minimumProviderHeight;
663
- const convertedMaximum = this.providerHeightTransformer
664
- ? this.providerHeightTransformer.transformPosition([
665
- longitude,
666
- latitude,
667
- maximumProviderHeight
668
- ])[2]
669
- : maximumProviderHeight;
670
- const minimumSurfaceHeight = Math.min(convertedMinimum, convertedMaximum);
671
- const maximumSurfaceHeight = Math.max(convertedMinimum, convertedMaximum);
672
- const minimumHeight =
673
- this.elevationMode === 'onTheGround'
674
- ? minimumSurfaceHeight
675
- : minimumSurfaceHeight + minimumSourceHeight + this.elevationOffset;
676
- const maximumHeight =
677
- this.elevationMode === 'onTheGround'
678
- ? maximumSurfaceHeight
679
- : maximumSurfaceHeight + maximumSourceHeight + this.elevationOffset;
680
- placedSamples.push(
681
- [longitude, latitude, minimumHeight],
682
- [longitude, latitude, maximumHeight]
683
- );
684
- }
685
- return placedSamples;
686
- }
687
-
688
- /** Apply source units and non-surface placement without awaiting external resources. */
689
- private placeSourcePositionsSync(
690
- sourcePositions: ArrayLike<number>,
691
- sourceHeightsAreMeters = false
692
- ): Float64Array {
693
- if (requiresElevationSurface(this.elevationMode)) {
694
- throw new Error(
695
- `I3S elevation mode ${this.elevationMode} requires asynchronous surface placement`
696
- );
697
- }
698
- const positions = Float64Array.from(sourcePositions);
699
- const offset = this.elevationMode === 'absoluteHeight' ? this.elevationOffset : 0;
700
- for (let index = 2; index < positions.length; index += 3) {
701
- positions[index] =
702
- positions[index] * (sourceHeightsAreMeters ? 1 : this.sourceVerticalUnitScale) + offset;
703
- }
704
- return positions;
705
- }
706
-
707
- /** Apply source units and all I3S elevation-placement modes. */
708
- private async placeSourcePositions(
709
- sourcePositions: ArrayLike<number>,
710
- sourceHeightsAreMeters = false
711
- ): Promise<Float64Array> {
712
- if (!requiresElevationSurface(this.elevationMode)) {
713
- return this.placeSourcePositionsSync(sourcePositions, sourceHeightsAreMeters);
714
- }
715
-
716
- const positions = Float64Array.from(sourcePositions);
717
- const geographicLocations = toPositionArrays(positions).map(position => {
718
- const geographic = this.sourceToGeographicTransformer.transformPosition(position);
719
- return [geographic[0], geographic[1]] as const;
720
- });
721
- const sampledHeights = await this.elevationProvider!.sampleElevations(geographicLocations);
722
- if (sampledHeights.length !== geographicLocations.length) {
723
- throw new Error(
724
- `Elevation provider returned ${sampledHeights.length} heights for ${geographicLocations.length} positions`
725
- );
726
- }
727
-
728
- for (let positionIndex = 0; positionIndex < geographicLocations.length; positionIndex++) {
729
- const sampledHeight = sampledHeights[positionIndex] * this.providerUnitScale;
730
- if (!Number.isFinite(sampledHeight)) {
731
- throw new Error(
732
- `Elevation provider returned a non-finite height at index ${positionIndex}`
733
- );
734
- }
735
- const [longitude, latitude] = geographicLocations[positionIndex];
736
- const surfaceHeight = this.providerHeightTransformer
737
- ? this.providerHeightTransformer.transformPosition([longitude, latitude, sampledHeight])[2]
738
- : sampledHeight;
739
- const sourceHeight =
740
- positions[positionIndex * 3 + 2] *
741
- (sourceHeightsAreMeters ? 1 : this.sourceVerticalUnitScale);
742
- positions[positionIndex * 3 + 2] =
743
- this.elevationMode === 'onTheGround'
744
- ? surfaceHeight
745
- : surfaceHeight + sourceHeight + this.elevationOffset;
746
- }
747
- return positions;
748
- }
749
-
750
- /** Transform one earth-centered normal to the selected target basis. */
751
- private transformEcefNormal(ecefNormal: Vector3, geographic: number[]): Vector3 {
752
- if (this.targetCoordinateFrame === 'geocentric') {
753
- return ecefNormal.normalize();
754
- }
755
- if (this.targetCoordinateFrame === 'geographic') {
756
- return ecefVectorToLocalEnu(ecefNormal, geographic).normalize();
757
- }
758
-
759
- const cartesian = Ellipsoid.WGS84.cartographicToCartesian(new Vector3(geographic));
760
- const jacobianColumns: number[] = [];
761
- for (const direction of getPositiveAxisDirections()) {
762
- const positiveGeographic = Ellipsoid.WGS84.cartesianToCartographic(
763
- new Vector3(cartesian).add(direction)
764
- );
765
- const negativeGeographic = Ellipsoid.WGS84.cartesianToCartographic(
766
- new Vector3(cartesian).subtract(direction)
767
- );
768
- const positiveTarget =
769
- this.geographicToTargetTransformer.transformPosition(positiveGeographic);
770
- const negativeTarget =
771
- this.geographicToTargetTransformer.transformPosition(negativeGeographic);
772
- jacobianColumns.push(
773
- (positiveTarget[0] - negativeTarget[0]) / 2,
774
- (positiveTarget[1] - negativeTarget[1]) / 2,
775
- (positiveTarget[2] - negativeTarget[2]) / 2
776
- );
777
- }
778
- const normalMatrix = new Matrix3(jacobianColumns);
779
- if (Math.abs(normalMatrix.determinant()) < 1e-12) {
780
- throw new Error('Cannot transform an I3S normal through a singular local projection');
781
- }
782
- normalMatrix.invert().transpose();
783
- return new Vector3(ecefNormal).transformByMatrix3(normalMatrix).normalize();
784
- }
785
- }
786
-
787
- /** Select the application-owned surface required by one I3S elevation mode. */
788
- function getElevationProvider(
789
- mode: TilesetElevationMode | undefined,
790
- options: TilesetSpatialOptions
791
- ): TilesetElevationProvider | undefined {
792
- return mode === 'relativeToScene'
793
- ? options.sceneElevationProvider
794
- : requiresElevationSurface(mode)
795
- ? options.terrainElevationProvider
796
- : undefined;
797
- }
798
-
799
- /** Return whether one placement mode requires external surface samples. */
800
- function requiresElevationSurface(mode: TilesetElevationMode | undefined): boolean {
801
- return mode === 'onTheGround' || mode === 'relativeToGround' || mode === 'relativeToScene';
802
- }
803
-
804
- /** Split one packed XYZ sequence into position arrays without losing Float64 precision. */
805
- function toPositionArrays(positions: ArrayLike<number>): number[][] {
806
- if (positions.length % 3 !== 0) {
807
- throw new Error('I3S position arrays must contain complete XYZ tuples');
808
- }
809
- const result: number[][] = [];
810
- for (let index = 0; index < positions.length; index += 3) {
811
- result.push([positions[index], positions[index + 1], positions[index + 2]]);
812
- }
813
- return result;
814
- }
815
-
816
- /** Return a dateline-aware WGS84 footprint in degrees for an elevation range request. */
817
- function getElevationBounds(geographicSamples: number[][]): TilesetElevationBounds {
818
- const region = getGeographicRegion(geographicSamples);
819
- return {
820
- west: (region[0] * 180) / Math.PI,
821
- south: (region[1] * 180) / Math.PI,
822
- east: (region[2] * 180) / Math.PI,
823
- north: (region[3] * 180) / Math.PI
824
- };
825
- }
826
-
827
- /** Build a conservative WGS84 geographic sphere from placed geographic samples. */
828
- function getGeographicBoundingSphere(
829
- geographicSamples: number[][]
830
- ): [number, number, number, number] {
831
- if (!geographicSamples.length) {
832
- throw new Error('I3S spatial transformation requires at least one bound sample');
833
- }
834
- const cartesianSamples = geographicSamples.map(position =>
835
- Ellipsoid.WGS84.cartographicToCartesian(new Vector3(position))
836
- );
837
- const cartesianCenter = new Vector3();
838
- for (const sample of cartesianSamples) {
839
- cartesianCenter.add(sample);
840
- }
841
- cartesianCenter.scale(1 / cartesianSamples.length);
842
- let radius = 0;
843
- for (const sample of cartesianSamples) {
844
- radius = Math.max(radius, new Vector3(sample).subtract(cartesianCenter).magnitude());
845
- }
846
- const geographicCenter = Ellipsoid.WGS84.cartesianToCartographic(cartesianCenter);
847
- return [geographicCenter[0], geographicCenter[1], geographicCenter[2], radius];
848
- }
849
-
850
- /** Generate source-frame samples that conservatively cover an I3S MBS or OBB. */
851
- function getSourceBoundSamples(
852
- bounds: I3SSpatialBounds,
853
- sourceFrame: TilesetCoordinateFrame,
854
- sourceToGeographicTransformer: SpatialCoordinateTransformer,
855
- sourceVerticalUnitScale: number
856
- ): number[][] {
857
- const obb = bounds.obb;
858
- if (obb) {
859
- const center = Array.from(obb.center).slice(0, 3);
860
- center[2] *= sourceVerticalUnitScale;
861
- const halfSize = Array.from(obb.halfSize).slice(0, 3);
862
- const quaternion = new Quaternion().fromArray(Array.from(obb.quaternion));
863
- const axes = [
864
- new Vector3([halfSize[0], 0, 0]).transformByQuaternion(quaternion),
865
- new Vector3([0, halfSize[1], 0]).transformByQuaternion(quaternion),
866
- new Vector3([0, 0, halfSize[2]]).transformByQuaternion(quaternion)
867
- ];
868
- if (sourceFrame === 'geographic') {
869
- const geographicCenter = sourceToGeographicTransformer.transformPosition(center);
870
- const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(
871
- new Vector3(geographicCenter)
872
- );
873
- const cartesianAxes =
874
- bounds.normalReferenceFrame === 'vertex-reference-frame'
875
- ? axes.map(axis => localEnuVectorToEcef(axis, geographicCenter))
876
- : axes;
877
- return getBoxSigns().map(signs => {
878
- const corner = new Vector3(cartesianCenter);
879
- for (let axisIndex = 0; axisIndex < 3; axisIndex++) {
880
- corner.add(new Vector3(cartesianAxes[axisIndex]).scale(signs[axisIndex]));
881
- }
882
- return Array.from(Ellipsoid.WGS84.cartesianToCartographic(corner));
883
- });
884
- }
885
- return getBoxSigns().map(signs => {
886
- const corner = new Vector3(center);
887
- for (let axisIndex = 0; axisIndex < 3; axisIndex++) {
888
- corner.add(new Vector3(axes[axisIndex]).scale(signs[axisIndex]));
889
- }
890
- return Array.from(corner);
891
- });
892
- }
893
-
894
- const mbs = bounds.mbs ? Array.from(bounds.mbs) : [];
895
- if (mbs.length < 4) {
896
- return [];
897
- }
898
- const center = mbs.slice(0, 3);
899
- center[2] *= sourceVerticalUnitScale;
900
- const radius = mbs[3];
901
- if (sourceFrame === 'geographic') {
902
- const geographicCenter = sourceToGeographicTransformer.transformPosition(center);
903
- const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(new Vector3(geographicCenter));
904
- return getAxisDirections().map(direction =>
905
- Array.from(
906
- Ellipsoid.WGS84.cartesianToCartographic(
907
- new Vector3(cartesianCenter).add(new Vector3(direction).scale(radius))
908
- )
909
- )
910
- );
911
- }
912
- return getAxisDirections().map(direction =>
913
- Array.from(new Vector3(center).add(new Vector3(direction).scale(radius)))
914
- );
915
- }
916
-
917
- /** Return the eight sign combinations of a box. */
918
- function getBoxSigns(): number[][] {
919
- return [-1, 1].flatMap(x => [-1, 1].flatMap(y => [-1, 1].map(z => [x, y, z])));
920
- }
921
-
922
- /** Return positive and negative unit directions for three Cartesian axes. */
923
- function getAxisDirections(): number[][] {
924
- return [
925
- [1, 0, 0],
926
- [-1, 0, 0],
927
- [0, 1, 0],
928
- [0, -1, 0],
929
- [0, 0, 1],
930
- [0, 0, -1]
931
- ];
932
- }
933
-
934
- /** Return the positive ECEF basis used to calculate a local projection Jacobian. */
935
- function getPositiveAxisDirections(): Vector3[] {
936
- return [new Vector3([1, 0, 0]), new Vector3([0, 1, 0]), new Vector3([0, 0, 1])];
937
- }
938
-
939
- /** Convert a local east/north/up vector into an earth-centered vector. */
940
- function localEnuVectorToEcef(vector: ArrayLike<number>, geographic: ArrayLike<number>): Vector3 {
941
- const longitude = (geographic[0] * Math.PI) / 180;
942
- const latitude = (geographic[1] * Math.PI) / 180;
943
- const east = new Vector3([-Math.sin(longitude), Math.cos(longitude), 0]);
944
- const north = new Vector3([
945
- -Math.sin(latitude) * Math.cos(longitude),
946
- -Math.sin(latitude) * Math.sin(longitude),
947
- Math.cos(latitude)
948
- ]);
949
- const up = new Vector3([
950
- Math.cos(latitude) * Math.cos(longitude),
951
- Math.cos(latitude) * Math.sin(longitude),
952
- Math.sin(latitude)
953
- ]);
954
- return east.scale(vector[0]).add(north.scale(vector[1])).add(up.scale(vector[2]));
955
- }
956
-
957
- /** Convert an earth-centered vector into local east/north/up components. */
958
- function ecefVectorToLocalEnu(vector: Vector3, geographic: ArrayLike<number>): Vector3 {
959
- const longitude = (geographic[0] * Math.PI) / 180;
960
- const latitude = (geographic[1] * Math.PI) / 180;
961
- const east = new Vector3([-Math.sin(longitude), Math.cos(longitude), 0]);
962
- const north = new Vector3([
963
- -Math.sin(latitude) * Math.cos(longitude),
964
- -Math.sin(latitude) * Math.sin(longitude),
965
- Math.cos(latitude)
966
- ]);
967
- const up = new Vector3([
968
- Math.cos(latitude) * Math.cos(longitude),
969
- Math.cos(latitude) * Math.sin(longitude),
970
- Math.sin(latitude)
971
- ]);
972
- return new Vector3([east.dot(vector), north.dot(vector), up.dot(vector)]);
973
- }
974
-
975
- /** Build a target-frame axis-aligned generic tile box. */
976
- function getAxisAlignedBox(positions: number[][]): number[] {
977
- const minimum = [Infinity, Infinity, Infinity];
978
- const maximum = [-Infinity, -Infinity, -Infinity];
979
- for (const position of positions) {
980
- for (let component = 0; component < 3; component++) {
981
- minimum[component] = Math.min(minimum[component], position[component]);
982
- maximum[component] = Math.max(maximum[component], position[component]);
983
- }
984
- }
985
- const center = minimum.map((value, index) => (value + maximum[index]) / 2);
986
- const halfSize = minimum.map((value, index) => (maximum[index] - value) / 2);
987
- return [center[0], center[1], center[2], halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]];
988
- }
989
-
990
- /** Build a dateline-aware geographic tile region in radians. */
991
- function getGeographicRegion(positions: number[][]): number[] {
992
- const referenceLongitude = positions[0][0];
993
- let minimumLongitude = Infinity;
994
- let maximumLongitude = -Infinity;
995
- let minimumLatitude = Infinity;
996
- let maximumLatitude = -Infinity;
997
- let minimumHeight = Infinity;
998
- let maximumHeight = -Infinity;
999
- for (const position of positions) {
1000
- const longitude = referenceLongitude + normalizeLongitude(position[0] - referenceLongitude);
1001
- minimumLongitude = Math.min(minimumLongitude, longitude);
1002
- maximumLongitude = Math.max(maximumLongitude, longitude);
1003
- minimumLatitude = Math.min(minimumLatitude, position[1]);
1004
- maximumLatitude = Math.max(maximumLatitude, position[1]);
1005
- minimumHeight = Math.min(minimumHeight, position[2]);
1006
- maximumHeight = Math.max(maximumHeight, position[2]);
1007
- }
1008
- return [
1009
- (normalizeLongitude(minimumLongitude) * Math.PI) / 180,
1010
- (minimumLatitude * Math.PI) / 180,
1011
- (normalizeLongitude(maximumLongitude) * Math.PI) / 180,
1012
- (maximumLatitude * Math.PI) / 180,
1013
- minimumHeight,
1014
- maximumHeight
1015
- ];
1016
- }
1017
-
1018
- /** Normalize a longitude delta to the interval [-180, 180). */
1019
- function normalizeLongitude(longitude: number): number {
1020
- return ((((longitude + 180) % 360) + 360) % 360) - 180;
1021
- }