@hztxi/cesium-engine 25.0.7 → 26.2.2

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 (471) hide show
  1. package/Build/Workers/chunk-2FNKHQL3.js +754 -0
  2. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  3. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  4. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  5. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  6. package/Build/Workers/chunk-3JZXI44G.js +3822 -0
  7. package/Build/Workers/chunk-3N2UNLWJ.js +101 -0
  8. package/Build/Workers/chunk-3NCG2YYR.js +58 -0
  9. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  10. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  11. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  12. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  13. package/Build/Workers/chunk-4FFIJ7ZV.js +56 -0
  14. package/Build/Workers/chunk-4N227IPR.js +973 -0
  15. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  16. package/Build/Workers/chunk-4XR3K4GD.js +280 -0
  17. package/Build/Workers/chunk-4Z2JINRS.js +519 -0
  18. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  19. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  20. package/Build/Workers/chunk-5I76476T.js +288 -0
  21. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  22. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  23. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  24. package/Build/Workers/chunk-6SEICASZ.js +241 -0
  25. package/Build/Workers/chunk-77DBX23X.js +455 -0
  26. package/Build/Workers/chunk-7C2D3DTI.js +959 -0
  27. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  28. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  29. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  30. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  31. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  32. package/Build/Workers/chunk-7T4MW2W4.js +368 -0
  33. package/Build/Workers/chunk-7UXZUGUZ.js +82 -0
  34. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  35. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  36. package/Build/Workers/chunk-A2UHPWPL.js +38 -0
  37. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  38. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  39. package/Build/Workers/chunk-AS2QC7H2.js +219 -0
  40. package/Build/Workers/chunk-AVOLMIGJ.js +57 -0
  41. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  42. package/Build/Workers/chunk-BHRHMUDM.js +147 -0
  43. package/Build/Workers/chunk-BUWAHRK5.js +672 -0
  44. package/Build/Workers/chunk-C5ET5HON.js +198 -0
  45. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  46. package/Build/Workers/chunk-C7B672RR.js +73 -0
  47. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  48. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  49. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  50. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  51. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  52. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  53. package/Build/Workers/chunk-DCMOBPLG.js +352 -0
  54. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  55. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  56. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  57. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  58. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  59. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  60. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  61. package/Build/Workers/chunk-E6IPM6HP.js +56 -0
  62. package/Build/Workers/chunk-EB2HAHRY.js +1054 -0
  63. package/Build/Workers/chunk-ECDCQXCO.js +1992 -0
  64. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  65. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  66. package/Build/Workers/chunk-EIENGLA5.js +278 -0
  67. package/Build/Workers/chunk-EK5CWDW2.js +476 -0
  68. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  69. package/Build/Workers/chunk-EUCUBIEZ.js +97 -0
  70. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  71. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  72. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  73. package/Build/Workers/chunk-FM6EQUFX.js +1800 -0
  74. package/Build/Workers/chunk-FPFGGQ4X.js +301 -0
  75. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  76. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  77. package/Build/Workers/chunk-FQTV6W3I.js +973 -0
  78. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  79. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  80. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  81. package/Build/Workers/chunk-GTA727KQ.js +140 -0
  82. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  83. package/Build/Workers/chunk-GXTM7AG3.js +1483 -0
  84. package/Build/Workers/chunk-HAXQB2FS.js +2719 -0
  85. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  86. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  87. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  88. package/Build/Workers/chunk-IEPPOHF3.js +44 -0
  89. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  90. package/Build/Workers/chunk-J3AXZ4WC.js +124 -0
  91. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  92. package/Build/Workers/chunk-KBNW776Q.js +305 -0
  93. package/Build/Workers/chunk-KBSWXVSY.js +837 -0
  94. package/Build/Workers/chunk-KEYTLNVK.js +1067 -0
  95. package/Build/Workers/chunk-KN3RQWUA.js +3201 -0
  96. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  97. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  98. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  99. package/Build/Workers/chunk-L2TFZKN6.js +455 -0
  100. package/Build/Workers/chunk-LHKE2VUR.js +945 -0
  101. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  102. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  103. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  104. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  105. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  106. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  107. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  108. package/Build/Workers/chunk-MICPAD7R.js +398 -0
  109. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  110. package/Build/Workers/chunk-MPJ73WMH.js +138 -0
  111. package/Build/Workers/chunk-MUTHG7T7.js +171 -0
  112. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  113. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  114. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  115. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  116. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  117. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  118. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  119. package/Build/Workers/chunk-PHUELDXQ.js +76 -0
  120. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  121. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  122. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  123. package/Build/Workers/chunk-PQZW2QZG.js +163 -0
  124. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  125. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  126. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  127. package/Build/Workers/chunk-R2JQAAU7.js +630 -0
  128. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  129. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  130. package/Build/Workers/chunk-RUOETBWP.js +288 -0
  131. package/Build/Workers/chunk-RV4EPLBO.js +2342 -0
  132. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  133. package/Build/Workers/chunk-SBEQLEO5.js +352 -0
  134. package/Build/Workers/chunk-SGC2GT3Y.js +1284 -0
  135. package/Build/Workers/chunk-SKLK4CBL.js +162 -0
  136. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  137. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  138. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  139. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  140. package/Build/Workers/chunk-TNDQT5AB.js +682 -0
  141. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  142. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  143. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  144. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  145. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  146. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  147. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  148. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  149. package/Build/Workers/chunk-VDBQVKTF.js +387 -0
  150. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  151. package/Build/Workers/chunk-VJLDRHKN.js +511 -0
  152. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  153. package/Build/Workers/chunk-W3X2ZAEJ.js +52 -0
  154. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  155. package/Build/Workers/chunk-X4VZ33YL.js +454 -0
  156. package/Build/Workers/chunk-XDM5A6C4.js +102 -0
  157. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  158. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  159. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  160. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  161. package/Build/Workers/chunk-Y6AQK4FY.js +1344 -0
  162. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  163. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  164. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  165. package/Build/Workers/chunk-YJBPRW4A.js +415 -0
  166. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  167. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  168. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  169. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  170. package/Build/Workers/chunk-YX2FOQMF.js +9237 -0
  171. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  172. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  173. package/Build/Workers/combineGeometry.js +24 -24
  174. package/Build/Workers/createBoxGeometry.js +18 -18
  175. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  176. package/Build/Workers/createCircleGeometry.js +26 -26
  177. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  178. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  179. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  180. package/Build/Workers/createCorridorGeometry.js +36 -37
  181. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  182. package/Build/Workers/createCylinderGeometry.js +20 -20
  183. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  184. package/Build/Workers/createEllipseGeometry.js +26 -26
  185. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  186. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  187. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  188. package/Build/Workers/createFrustumGeometry.js +18 -18
  189. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  190. package/Build/Workers/createGeometry.js +25 -24
  191. package/Build/Workers/createGroundPolylineGeometry.js +26 -26
  192. package/Build/Workers/createMvtTile.js +111 -19
  193. package/Build/Workers/createPlaneGeometry.js +18 -18
  194. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  195. package/Build/Workers/createPolygonGeometry.js +36 -36
  196. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  197. package/Build/Workers/createPolylineGeometry.js +28 -28
  198. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  199. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  200. package/Build/Workers/createRectangleGeometry.js +29 -29
  201. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  202. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  203. package/Build/Workers/createSphereGeometry.js +19 -19
  204. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  205. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  206. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  207. package/Build/Workers/createVectorTileGeometries.js +24 -24
  208. package/Build/Workers/createVectorTilePoints.js +13 -13
  209. package/Build/Workers/createVectorTilePolygons.js +22 -22
  210. package/Build/Workers/createVectorTilePolylines.js +14 -14
  211. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  212. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  213. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  214. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  215. package/Build/Workers/createWallGeometry.js +26 -26
  216. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  217. package/Build/Workers/decodeDraco.js +10 -10
  218. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  219. package/Build/Workers/decodeI3S.js +10 -10
  220. package/Build/Workers/gaussianSplatSorter.js +4 -4
  221. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  222. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  223. package/Build/Workers/transcodeKTX2.js +6 -6
  224. package/Build/Workers/transferTypedArrayTest.js +1 -1
  225. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  226. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  227. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  228. package/Source/Core/BoundingRectangle.js +6 -8
  229. package/Source/Core/BoundingSphere.js +0 -3
  230. package/Source/Core/Cartesian2.js +1 -1
  231. package/Source/Core/Cartesian3.js +1 -1
  232. package/Source/Core/Cartesian4.js +1 -1
  233. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  234. package/Source/Core/Color.js +1 -0
  235. package/Source/Core/ComponentDatatype.js +35 -0
  236. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  237. package/Source/Core/CorridorGeometry.js +2 -4
  238. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  239. package/Source/Core/EarthOrientationParameters.js +2 -2
  240. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  241. package/Source/Core/EllipsoidGeodesic.js +3 -3
  242. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  243. package/Source/Core/Heap.js +1 -1
  244. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  245. package/Source/Core/InterpolationAlgorithm.js +58 -50
  246. package/Source/Core/Ion.js +1 -1
  247. package/Source/Core/JulianDate.js +1 -1
  248. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  249. package/Source/Core/LinearApproximation.js +69 -66
  250. package/Source/Core/MapProjection.js +1 -0
  251. package/Source/Core/Math.js +59 -0
  252. package/Source/Core/Matrix2.js +3 -3
  253. package/Source/Core/Matrix3.js +3 -3
  254. package/Source/Core/Matrix4.js +1 -1
  255. package/Source/Core/OrthographicFrustum.js +1 -1
  256. package/Source/Core/PerspectiveFrustum.js +1 -1
  257. package/Source/Core/PolygonGeometry.js +2 -2
  258. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  259. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  260. package/Source/Core/PolylineGeometry.js +1 -1
  261. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  262. package/Source/Core/Rectangle.js +7 -1
  263. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  264. package/Source/Core/Resource.js +1 -1
  265. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  266. package/Source/Core/SimplePolylineGeometry.js +1 -1
  267. package/Source/Core/TerrainEncoding.js +2 -2
  268. package/Source/Core/TerrainMesh.js +3 -3
  269. package/Source/Core/TerrainPicker.js +180 -168
  270. package/Source/Core/TimeIntervalCollection.js +1 -3
  271. package/Source/Core/Tipsify.js +1 -1
  272. package/Source/Core/Transforms.js +5 -1
  273. package/Source/Core/VectorPipeline.js +1117 -0
  274. package/Source/Core/VectorProvider.js +429 -0
  275. package/Source/Core/WallOutlineGeometry.js +1 -1
  276. package/Source/Core/createColorRamp.js +37 -0
  277. package/Source/Core/getTimestamp.js +4 -2
  278. package/Source/Core/globalTypes.js +25 -0
  279. package/Source/Core/writeTextToCanvas.js +1 -0
  280. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  281. package/Source/DataSources/CzmlDataSource.js +14 -0
  282. package/Source/DataSources/DataSourceDisplay.js +1 -1
  283. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  284. package/Source/DataSources/GeometryVisualizer.js +1 -1
  285. package/Source/DataSources/KmlDataSource.js +529 -557
  286. package/Source/DataSources/PathGraphics.js +8 -1
  287. package/Source/DataSources/PathMode.js +27 -0
  288. package/Source/DataSources/PathVisualizer.js +298 -1
  289. package/Source/DataSources/PolylineVisualizer.js +1 -1
  290. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  291. package/Source/Renderer/AutomaticUniforms.js +23 -0
  292. package/Source/Renderer/Context.js +9 -3
  293. package/Source/Renderer/DrawCommand.js +22 -0
  294. package/Source/Renderer/Framebuffer.js +4 -0
  295. package/Source/Renderer/Pass.js +11 -9
  296. package/Source/Renderer/Texture.js +12 -1
  297. package/Source/Renderer/UniformState.js +7 -0
  298. package/Source/Renderer/VertexArray.js +1 -1
  299. package/Source/Renderer/createUniform.js +346 -239
  300. package/Source/Renderer/createUniformArray.js +494 -381
  301. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  302. package/Source/Scene/ArcGisMapService.js +1 -1
  303. package/Source/Scene/Billboard.js +2 -1
  304. package/Source/Scene/BillboardCollection.js +15 -5
  305. package/Source/Scene/BillboardTexture.js +5 -3
  306. package/Source/Scene/BufferPointCollection.js +11 -1
  307. package/Source/Scene/BufferPolygonCollection.js +26 -0
  308. package/Source/Scene/BufferPolylineCollection.js +2 -0
  309. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  310. package/Source/Scene/Camera.js +85 -9
  311. package/Source/Scene/CameraEventAggregator.js +30 -18
  312. package/Source/Scene/CameraFlightPath.js +7 -4
  313. package/Source/Scene/Cesium3DTile.js +102 -4
  314. package/Source/Scene/Cesium3DTileContent.js +195 -254
  315. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  316. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  317. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  318. package/Source/Scene/Cesium3DTileset.js +213 -8
  319. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  320. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  321. package/Source/Scene/ClippingPolygon.js +2 -0
  322. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  323. package/Source/Scene/Composite3DTileContent.js +254 -292
  324. package/Source/Scene/Controllers/Controller.js +63 -0
  325. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  326. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  327. package/Source/Scene/Controllers/MouseButton.js +32 -0
  328. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  329. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  330. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  331. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  332. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  333. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  334. package/Source/Scene/DerivedCommand.js +98 -0
  335. package/Source/Scene/EdgeDisplayMode.js +50 -0
  336. package/Source/Scene/EdgeFramebuffer.js +1 -5
  337. package/Source/Scene/Empty3DTileContent.js +100 -132
  338. package/Source/Scene/Expression.js +6 -8
  339. package/Source/Scene/FrameState.js +17 -0
  340. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  341. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  342. package/Source/Scene/Geometry3DTileContent.js +151 -185
  343. package/Source/Scene/Globe.js +22 -1
  344. package/Source/Scene/GlobeDepth.js +27 -1
  345. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  346. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  347. package/Source/Scene/GlobeSurfaceTileProvider.js +1412 -1184
  348. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  349. package/Source/Scene/GltfLoader.js +146 -3
  350. package/Source/Scene/GltfLoaderUtil.js +20 -4
  351. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  352. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  353. package/Source/Scene/GltfSpzLoader.js +1 -1
  354. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  355. package/Source/Scene/I3SDataProvider.js +1 -1
  356. package/Source/Scene/I3SLayer.js +1 -1
  357. package/Source/Scene/I3SNode.js +2 -2
  358. package/Source/Scene/ImageryLayer.js +2 -2
  359. package/Source/Scene/ImageryLayerCollection.js +190 -6
  360. package/Source/Scene/Implicit3DTileContent.js +192 -216
  361. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  362. package/Source/Scene/IonImageryProvider.js +1 -5
  363. package/Source/Scene/Label.js +4 -4
  364. package/Source/Scene/LabelCollection.js +4 -1
  365. package/Source/Scene/MVTDataProvider.js +555 -0
  366. package/Source/Scene/Material.js +1 -0
  367. package/Source/Scene/Model/B3dmLoader.js +1 -2
  368. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  369. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  370. package/Source/Scene/Model/I3dmLoader.js +1 -1
  371. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  372. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  373. package/Source/Scene/Model/Model.js +45 -10
  374. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  375. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  376. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  377. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  378. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  379. package/Source/Scene/Model/ModelUtility.js +5 -0
  380. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  381. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  382. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  383. package/Source/Scene/ModelComponents.js +112 -0
  384. package/Source/Scene/Multiple3DTileContent.js +291 -334
  385. package/Source/Scene/MvtLabelCandidates.js +295 -0
  386. package/Source/Scene/MvtLabelManager.js +1069 -0
  387. package/Source/Scene/Picking.js +19 -3
  388. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  389. package/Source/Scene/PntsParser.js +1 -1
  390. package/Source/Scene/PolylineCollection.js +5 -3
  391. package/Source/Scene/PostProcessStage.js +4 -2
  392. package/Source/Scene/QuadtreePrimitive.js +3 -2
  393. package/Source/Scene/ResourceCache.js +7 -4
  394. package/Source/Scene/ResourceCacheKey.js +21 -18
  395. package/Source/Scene/Scene.js +237 -11
  396. package/Source/Scene/SceneTransforms.js +6 -5
  397. package/Source/Scene/ShadowMap.js +9 -3
  398. package/Source/Scene/ShadowMapShader.js +50 -2
  399. package/Source/Scene/SnapFramebuffer.js +121 -0
  400. package/Source/Scene/Snapping.js +184 -0
  401. package/Source/Scene/TerrainFillMesh.js +3 -2
  402. package/Source/Scene/Tileset3DTileContent.js +113 -146
  403. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  404. package/Source/Scene/Vector3DTileContent.js +207 -237
  405. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  406. package/Source/Scene/View.js +10 -8
  407. package/Source/Scene/VoxelPrimitive.js +159 -175
  408. package/Source/Scene/VoxelProvider.js +64 -91
  409. package/Source/Scene/VoxelTraversal.js +1 -1
  410. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  411. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  412. package/Source/Scene/createElevationBandMaterial.js +1 -1
  413. package/Source/Scene/decodeMVT.js +877 -0
  414. package/Source/Scene/findMeshoptExtension.js +23 -0
  415. package/Source/Scene/renderBufferPointCollection.js +114 -64
  416. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  417. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  418. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  419. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  420. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  421. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  422. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  423. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  424. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  425. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  426. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  427. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  428. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  429. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  430. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  431. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  432. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  433. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  434. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  435. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  436. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  437. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  438. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  439. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  440. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  441. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  442. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  443. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  444. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  445. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  446. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  447. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  448. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  449. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  450. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  451. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  452. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  453. package/Source/Shaders/GlobeFS.glsl +10 -6
  454. package/Source/Shaders/GlobeFS.js +10 -6
  455. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  456. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  457. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  458. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  459. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  460. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  461. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  462. package/Source/Shaders/Model/ModelFS.js +105 -0
  463. package/Source/Shaders/VectorCommon.glsl +178 -0
  464. package/Source/Shaders/VectorCommon.js +180 -0
  465. package/Source/ThirdParty/zip-module.wasm +0 -0
  466. package/Source/Widget/CesiumWidget.js +30 -0
  467. package/Source/Workers/createMvtTile.js +39 -0
  468. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  469. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  470. package/index.js +214 -184
  471. package/package.json +13 -13
@@ -0,0 +1,877 @@
1
+ // @ts-check
2
+ import RuntimeError from "../Core/RuntimeError.js";
3
+
4
+ // Mapbox Vector Tile specification:
5
+ // https://github.com/mapbox/vector-tile-spec/tree/master/2.1
6
+
7
+ /**
8
+ * @typedef {object} MVTPoint
9
+ * @property {number} x Tile-local x (0–extent)
10
+ * @property {number} y Tile-local y (0–extent)
11
+ * @ignore
12
+ */
13
+
14
+ /**
15
+ * @typedef {object} MVTFeature
16
+ * @property {bigint|undefined} id Optional MVT feature ID.
17
+ * @property {"Point"|"LineString"|"Polygon"|"Unknown"} type
18
+ * @property {Array<MVTPoint>|Array<Array<MVTPoint>>} geometry
19
+ * @property {Record<string, string|number|boolean|bigint>} properties
20
+ * @ignore
21
+ */
22
+
23
+ /**
24
+ * @typedef {object} MVTLayer
25
+ * @property {string} name
26
+ * @property {number} extent
27
+ * @property {MVTFeature[]} features
28
+ * @ignore
29
+ */
30
+
31
+ /**
32
+ * @typedef {object} DecodedMVT
33
+ * @property {MVTLayer[]} layers
34
+ * @ignore
35
+ */
36
+
37
+ /**
38
+ * @typedef {(string|number|boolean|bigint)} MVTValue
39
+ * @ignore
40
+ */
41
+
42
+ /**
43
+ * @typedef {object} ReadTagResult
44
+ * @property {number} fieldNumber
45
+ * @property {number} wireType
46
+ * @property {number} newPos
47
+ * @ignore
48
+ */
49
+
50
+ /**
51
+ * @typedef {object} ReadVarintResult
52
+ * @property {number} value
53
+ * @property {number} newPos
54
+ * @ignore
55
+ */
56
+
57
+ /**
58
+ * @typedef {object} ReadBigVarintResult
59
+ * @property {bigint} value
60
+ * @property {number} newPos
61
+ * @ignore
62
+ */
63
+
64
+ const textDecoder = new TextDecoder();
65
+
66
+ // Geometry type enum from the MVT spec
67
+ const GeomType = {
68
+ UNKNOWN: 0,
69
+ POINT: 1,
70
+ LINESTRING: 2,
71
+ POLYGON: 3,
72
+ };
73
+
74
+ // Tile message field numbers (spec §4.1)
75
+ const TileField = {
76
+ LAYERS: 3,
77
+ };
78
+
79
+ // Layer message field numbers (spec §4.1)
80
+ const LayerField = {
81
+ NAME: 1,
82
+ FEATURES: 2,
83
+ KEYS: 3,
84
+ VALUES: 4,
85
+ EXTENT: 5,
86
+ };
87
+
88
+ // Feature message field numbers (spec §4.2)
89
+ const FeatureField = {
90
+ ID: 1,
91
+ TAGS: 2,
92
+ TYPE: 3,
93
+ GEOMETRY: 4,
94
+ };
95
+
96
+ // GeoVis compact vector-tile field numbers. GeoVis PBF is not standard MVT,
97
+ // but it retains MVT's value, tag, and delta-coordinate encoding.
98
+ const GeoVisLayerField = {
99
+ VALUES: 1,
100
+ FEATURES: 2,
101
+ NAME: 3,
102
+ KEYS: 4,
103
+ EXTENT: 5,
104
+ };
105
+
106
+ const GeoVisFeatureField = {
107
+ TYPE: 1,
108
+ GEOMETRY: 2,
109
+ TAGS: 3,
110
+ };
111
+
112
+ // Value message field numbers (spec §4.4)
113
+ const ValueField = {
114
+ STRING: 1,
115
+ FLOAT: 2,
116
+ DOUBLE: 3,
117
+ INT64: 4,
118
+ UINT64: 5,
119
+ SINT64: 6,
120
+ BOOL: 7,
121
+ };
122
+
123
+ const geomTypeName = ["Unknown", "Point", "LineString", "Polygon"];
124
+
125
+ /**
126
+ * Decode a Mapbox Vector Tile (MVT / .pbf) binary buffer into layers and
127
+ * features. Geometry coordinates remain in tile-local integer space
128
+ * (0 – layer.extent, typically 4096).
129
+ *
130
+ * @param {ArrayBuffer} arrayBuffer The raw .pbf tile binary
131
+ * @param {"mvt"|"geovis"} [format="mvt"] PBF schema used by the tile service.
132
+ * @returns {DecodedMVT}
133
+ * @ignore
134
+ */
135
+ function decodeMVT(arrayBuffer, format = "mvt") {
136
+ const bytes = new Uint8Array(arrayBuffer);
137
+ if (format === "geovis") {
138
+ return decodeGeoVisMVT(bytes);
139
+ }
140
+ const layers = [];
141
+ let pos = 0;
142
+
143
+ while (pos < bytes.length) {
144
+ const tag = readTag(bytes, pos, bytes.length);
145
+ const fieldNumber = tag.fieldNumber;
146
+ const wireType = tag.wireType;
147
+ pos = tag.newPos;
148
+
149
+ // Tile.layers = field 3, wire type 2 (length-delimited)
150
+ if (fieldNumber === TileField.LAYERS && wireType === 2) {
151
+ const layerLength = readVarintLength(bytes, pos, bytes.length);
152
+ pos = layerLength.newPos;
153
+ const layerEnd = advanceByLength(
154
+ pos,
155
+ layerLength.value,
156
+ bytes.length,
157
+ "layer",
158
+ );
159
+ layers.push(decodeLayer(bytes, pos, layerEnd));
160
+ pos = layerEnd;
161
+ } else {
162
+ pos = skipField(bytes, pos, wireType, bytes.length);
163
+ }
164
+ }
165
+
166
+ return { layers };
167
+ }
168
+
169
+ /**
170
+ * Decode GeoVis's compact PBF schema into the same normalized structure as MVT.
171
+ * GeoVis keeps the tile envelope (Tile.layers = field 3), but moves layer values
172
+ * to field 1, layer name to field 3, keys to field 4, and feature type/tags/
173
+ * geometry to fields 1/3/2 respectively.
174
+ *
175
+ * @param {Uint8Array} bytes
176
+ * @returns {DecodedMVT}
177
+ * @ignore
178
+ */
179
+ function decodeGeoVisMVT(bytes) {
180
+ const layers = [];
181
+ let pos = 0;
182
+
183
+ while (pos < bytes.length) {
184
+ const tag = readTag(bytes, pos, bytes.length);
185
+ pos = tag.newPos;
186
+ if (tag.fieldNumber !== TileField.LAYERS || tag.wireType !== 2) {
187
+ pos = skipField(bytes, pos, tag.wireType, bytes.length);
188
+ continue;
189
+ }
190
+
191
+ const layerLength = readVarintLength(bytes, pos, bytes.length);
192
+ pos = layerLength.newPos;
193
+ const layerEnd = advanceByLength(
194
+ pos,
195
+ layerLength.value,
196
+ bytes.length,
197
+ "GeoVis layer",
198
+ );
199
+ layers.push(decodeGeoVisLayer(bytes, pos, layerEnd));
200
+ pos = layerEnd;
201
+ }
202
+
203
+ return { layers };
204
+ }
205
+
206
+ /**
207
+ * @param {Uint8Array} bytes
208
+ * @param {number} start
209
+ * @param {number} end
210
+ * @returns {MVTLayer}
211
+ * @ignore
212
+ */
213
+ function decodeGeoVisLayer(bytes, start, end) {
214
+ let pos = start;
215
+ let name = "";
216
+ let extent = 4096;
217
+ /** @type {string[]} */
218
+ const keys = [];
219
+ /** @type {Array.<string|number|boolean|bigint|undefined>} */
220
+ const values = [];
221
+ const rawFeatures = [];
222
+
223
+ while (pos < end) {
224
+ const tag = readTag(bytes, pos, end);
225
+ pos = tag.newPos;
226
+
227
+ if (tag.wireType === 2) {
228
+ const length = readVarintLength(bytes, pos, end);
229
+ pos = length.newPos;
230
+ const fieldEnd = advanceByLength(
231
+ pos,
232
+ length.value,
233
+ end,
234
+ "GeoVis layer field",
235
+ );
236
+
237
+ if (tag.fieldNumber === GeoVisLayerField.VALUES) {
238
+ values.push(decodeValue(bytes, pos, fieldEnd));
239
+ } else if (tag.fieldNumber === GeoVisLayerField.FEATURES) {
240
+ rawFeatures.push({ start: pos, end: fieldEnd });
241
+ } else if (tag.fieldNumber === GeoVisLayerField.NAME) {
242
+ name = readString(bytes, pos, fieldEnd - pos);
243
+ } else if (tag.fieldNumber === GeoVisLayerField.KEYS) {
244
+ keys.push(readString(bytes, pos, fieldEnd - pos));
245
+ }
246
+ pos = fieldEnd;
247
+ } else if (
248
+ tag.fieldNumber === GeoVisLayerField.EXTENT &&
249
+ tag.wireType === 0
250
+ ) {
251
+ const value = readVarint32(bytes, pos, end);
252
+ extent = value.value;
253
+ pos = value.newPos;
254
+ } else {
255
+ pos = skipField(bytes, pos, tag.wireType, end);
256
+ }
257
+ }
258
+
259
+ const features = rawFeatures.map(({ start: featureStart, end: featureEnd }) =>
260
+ decodeGeoVisFeature(bytes, featureStart, featureEnd, keys, values),
261
+ );
262
+ return { name, extent, features };
263
+ }
264
+
265
+ /**
266
+ * @param {Uint8Array} bytes
267
+ * @param {number} start
268
+ * @param {number} end
269
+ * @param {string[]} keys
270
+ * @param {Array.<string|number|boolean|bigint|undefined>} values
271
+ * @returns {MVTFeature}
272
+ * @ignore
273
+ */
274
+ function decodeGeoVisFeature(bytes, start, end, keys, values) {
275
+ let pos = start;
276
+ let geomType = GeomType.UNKNOWN;
277
+ /** @type {number[]} */
278
+ const tags = [];
279
+ /** @type {number[]} */
280
+ const geometryCommands = [];
281
+
282
+ while (pos < end) {
283
+ const tag = readTag(bytes, pos, end);
284
+ pos = tag.newPos;
285
+
286
+ if (tag.wireType === 0 && tag.fieldNumber === GeoVisFeatureField.TYPE) {
287
+ const value = readVarint32(bytes, pos, end);
288
+ // GeoVis shifts the MVT geometry type by one.
289
+ geomType = value.value - 1;
290
+ pos = value.newPos;
291
+ } else if (tag.wireType === 2) {
292
+ const length = readVarintLength(bytes, pos, end);
293
+ pos = length.newPos;
294
+ const fieldEnd = advanceByLength(
295
+ pos,
296
+ length.value,
297
+ end,
298
+ "GeoVis feature field",
299
+ );
300
+ const target =
301
+ tag.fieldNumber === GeoVisFeatureField.GEOMETRY
302
+ ? geometryCommands
303
+ : tag.fieldNumber === GeoVisFeatureField.TAGS
304
+ ? tags
305
+ : undefined;
306
+ if (target !== undefined) {
307
+ while (pos < fieldEnd) {
308
+ const value = readVarint32(bytes, pos, fieldEnd);
309
+ target.push(value.value);
310
+ pos = value.newPos;
311
+ }
312
+ }
313
+ pos = fieldEnd;
314
+ } else {
315
+ pos = skipField(bytes, pos, tag.wireType, end);
316
+ }
317
+ }
318
+
319
+ /** @type {Record<string, string|number|boolean|bigint>} */
320
+ const properties = {};
321
+ for (let i = 0; i < tags.length - 1; i += 2) {
322
+ const key = keys[tags[i]];
323
+ const value = values[tags[i + 1]];
324
+ if (typeof key === "string" && value !== undefined) {
325
+ properties[key] = value;
326
+ }
327
+ }
328
+
329
+ return {
330
+ id: undefined,
331
+ type: /** @type {"Point"|"LineString"|"Polygon"|"Unknown"} */ (
332
+ geomTypeName[geomType] ?? "Unknown"
333
+ ),
334
+ geometry: decodeGeometry(
335
+ geomType,
336
+ normalizeGeoVisGeometry(geometryCommands),
337
+ ),
338
+ properties,
339
+ };
340
+ }
341
+
342
+ /**
343
+ * GeoVis remaps MoveTo's command ID from 1 to 4 and LineTo's from 2 to 3.
344
+ * Coordinates and command counts remain the standard MVT delta representation.
345
+ *
346
+ * @param {number[]} commands
347
+ * @returns {number[]}
348
+ * @ignore
349
+ */
350
+ function normalizeGeoVisGeometry(commands) {
351
+ const normalized = [];
352
+ let pos = 0;
353
+ while (pos < commands.length) {
354
+ const command = commands[pos++];
355
+ const count = command >>> 3;
356
+ const commandId = command & 0x7;
357
+ let mvtCommandId;
358
+ if (commandId === 4) {
359
+ mvtCommandId = 1;
360
+ } else if (commandId === 3) {
361
+ mvtCommandId = 2;
362
+ } else if (commandId === 7) {
363
+ mvtCommandId = 7;
364
+ } else {
365
+ return [];
366
+ }
367
+
368
+ normalized.push((count << 3) | mvtCommandId);
369
+ if (mvtCommandId === 7) {
370
+ continue;
371
+ }
372
+
373
+ const coordinateCount = count * 2;
374
+ if (pos + coordinateCount > commands.length) {
375
+ return [];
376
+ }
377
+ for (let i = 0; i < coordinateCount; i++) {
378
+ normalized.push(commands[pos++]);
379
+ }
380
+ }
381
+ return normalized;
382
+ }
383
+
384
+ /**
385
+ * @param {Uint8Array} bytes
386
+ * @param {number} start
387
+ * @param {number} end
388
+ * @returns {MVTLayer}
389
+ * @ignore
390
+ */
391
+ function decodeLayer(bytes, start, end) {
392
+ let pos = start;
393
+ let name = "";
394
+ let extent = 4096;
395
+ /** @type {string[]} */
396
+ const keys = [];
397
+ /** @type {Array.<string|number|boolean|bigint|undefined>} */
398
+ const values = [];
399
+ const rawFeatures = [];
400
+
401
+ while (pos < end) {
402
+ const tag = readTag(bytes, pos, end);
403
+ const fieldNumber = tag.fieldNumber;
404
+ const wireType = tag.wireType;
405
+ pos = tag.newPos;
406
+
407
+ if (fieldNumber === LayerField.NAME && wireType === 2) {
408
+ // name
409
+ const length = readVarintLength(bytes, pos, end);
410
+ pos = length.newPos;
411
+ const stringEnd = advanceByLength(pos, length.value, end, "layer name");
412
+ name = readString(bytes, pos, length.value);
413
+ pos = stringEnd;
414
+ } else if (fieldNumber === LayerField.FEATURES && wireType === 2) {
415
+ // feature
416
+ const length = readVarintLength(bytes, pos, end);
417
+ pos = length.newPos;
418
+ const featureEnd = advanceByLength(pos, length.value, end, "feature");
419
+ rawFeatures.push({ start: pos, end: featureEnd });
420
+ pos = featureEnd;
421
+ } else if (fieldNumber === LayerField.KEYS && wireType === 2) {
422
+ // key
423
+ const length = readVarintLength(bytes, pos, end);
424
+ pos = length.newPos;
425
+ const stringEnd = advanceByLength(pos, length.value, end, "key");
426
+ keys.push(readString(bytes, pos, length.value));
427
+ pos = stringEnd;
428
+ } else if (fieldNumber === LayerField.VALUES && wireType === 2) {
429
+ // value
430
+ const length = readVarintLength(bytes, pos, end);
431
+ pos = length.newPos;
432
+ const valueEnd = advanceByLength(pos, length.value, end, "value");
433
+ const value = decodeValue(bytes, pos, valueEnd);
434
+ values.push(value);
435
+ pos = valueEnd;
436
+ } else if (fieldNumber === LayerField.EXTENT && wireType === 0) {
437
+ // extent
438
+ const value = readVarint32(bytes, pos, end);
439
+ extent = value.value;
440
+ pos = value.newPos;
441
+ } else {
442
+ pos = skipField(bytes, pos, wireType, end);
443
+ }
444
+ }
445
+
446
+ const features = rawFeatures.map(({ start: featureStart, end: featureEnd }) =>
447
+ decodeFeature(bytes, featureStart, featureEnd, keys, values),
448
+ );
449
+
450
+ return { name, extent, features };
451
+ }
452
+
453
+ /**
454
+ * @param {Uint8Array} bytes
455
+ * @param {number} start
456
+ * @param {number} end
457
+ * @param {string[]} keys
458
+ * @param {Array.<string|number|boolean|bigint|undefined>} values
459
+ * @returns {MVTFeature}
460
+ * @ignore
461
+ */
462
+ function decodeFeature(bytes, start, end, keys, values) {
463
+ let pos = start;
464
+ let id;
465
+ let geomType = GeomType.UNKNOWN;
466
+ const tags = [];
467
+ const geometryCommands = [];
468
+
469
+ while (pos < end) {
470
+ const tag = readTag(bytes, pos, end);
471
+ const fieldNumber = tag.fieldNumber;
472
+ const wireType = tag.wireType;
473
+ pos = tag.newPos;
474
+
475
+ if (fieldNumber === FeatureField.ID && wireType === 0) {
476
+ const value = readBigVarint(bytes, pos, end);
477
+ id = value.value;
478
+ pos = value.newPos;
479
+ } else if (fieldNumber === FeatureField.TYPE && wireType === 0) {
480
+ // geometry type
481
+ const value = readVarint32(bytes, pos, end);
482
+ geomType = value.value;
483
+ pos = value.newPos;
484
+ } else if (fieldNumber === FeatureField.TAGS && wireType === 2) {
485
+ // tags (packed uint32)
486
+ const length = readVarintLength(bytes, pos, end);
487
+ pos = length.newPos;
488
+ const tagEnd = advanceByLength(pos, length.value, end, "feature tags");
489
+ while (pos < tagEnd) {
490
+ const value = readVarint32(bytes, pos, tagEnd);
491
+ tags.push(value.value);
492
+ pos = value.newPos;
493
+ }
494
+ } else if (fieldNumber === FeatureField.GEOMETRY && wireType === 2) {
495
+ // geometry (packed uint32 commands)
496
+ const length = readVarintLength(bytes, pos, end);
497
+ pos = length.newPos;
498
+ const geometryEnd = advanceByLength(
499
+ pos,
500
+ length.value,
501
+ end,
502
+ "feature geometry",
503
+ );
504
+ while (pos < geometryEnd) {
505
+ const value = readVarint32(bytes, pos, geometryEnd);
506
+ geometryCommands.push(value.value);
507
+ pos = value.newPos;
508
+ }
509
+ } else {
510
+ pos = skipField(bytes, pos, wireType, end);
511
+ }
512
+ }
513
+
514
+ // Build properties from tags
515
+ /** @type {Record<string, string|number|boolean|bigint>} */
516
+ const properties = {};
517
+ for (let i = 0; i < tags.length - 1; i += 2) {
518
+ const key = keys[tags[i]];
519
+ const value = values[tags[i + 1]];
520
+ if (typeof key !== "string" || value === undefined) {
521
+ continue;
522
+ }
523
+ properties[key] = value;
524
+ }
525
+
526
+ const geometry = decodeGeometry(geomType, geometryCommands);
527
+
528
+ return {
529
+ id,
530
+ type: /** @type {"Point"|"LineString"|"Polygon"|"Unknown"} */ (
531
+ geomTypeName[geomType] ?? "Unknown"
532
+ ),
533
+ geometry,
534
+ properties,
535
+ };
536
+ }
537
+
538
+ /**
539
+ * Decode MVT geometry commands into coordinate arrays.
540
+ * @param {number} geomType
541
+ * @param {number[]} cmds
542
+ * @returns {*}
543
+ * @ignore
544
+ */
545
+ function decodeGeometry(geomType, cmds) {
546
+ let i = 0;
547
+ let x = 0;
548
+ let y = 0;
549
+
550
+ if (geomType === GeomType.POINT) {
551
+ const points = [];
552
+ while (i < cmds.length) {
553
+ const cmd = cmds[i++];
554
+ const cmdId = cmd & 0x7;
555
+ const count = cmd >> 3;
556
+ if (cmdId === 1) {
557
+ // MoveTo
558
+ for (let c = 0; c < count; c++) {
559
+ x += zigzag(cmds[i++]);
560
+ y += zigzag(cmds[i++]);
561
+ points.push({ x, y });
562
+ }
563
+ }
564
+ }
565
+ return points;
566
+ }
567
+
568
+ if (geomType === GeomType.LINESTRING) {
569
+ const lines = [];
570
+ let current = null;
571
+ while (i < cmds.length) {
572
+ const cmd = cmds[i++];
573
+ const cmdId = cmd & 0x7;
574
+ const count = cmd >> 3;
575
+ if (cmdId === 1) {
576
+ // MoveTo - start new line
577
+ if (current !== null) {
578
+ lines.push(current);
579
+ }
580
+ current = [];
581
+ x += zigzag(cmds[i++]);
582
+ y += zigzag(cmds[i++]);
583
+ current.push({ x, y });
584
+ } else if (cmdId === 2) {
585
+ // LineTo
586
+ for (let c = 0; c < count; c++) {
587
+ x += zigzag(cmds[i++]);
588
+ y += zigzag(cmds[i++]);
589
+ current.push({ x, y });
590
+ }
591
+ }
592
+ }
593
+ if (current !== null) {
594
+ lines.push(current);
595
+ }
596
+ return lines;
597
+ }
598
+
599
+ if (geomType === GeomType.POLYGON) {
600
+ const rings = [];
601
+ let current = null;
602
+ while (i < cmds.length) {
603
+ const cmd = cmds[i++];
604
+ const cmdId = cmd & 0x7;
605
+ const count = cmd >> 3;
606
+ if (cmdId === 1) {
607
+ // MoveTo - start ring
608
+ if (current !== null) {
609
+ rings.push(current);
610
+ }
611
+ current = [];
612
+ x += zigzag(cmds[i++]);
613
+ y += zigzag(cmds[i++]);
614
+ current.push({ x, y });
615
+ } else if (cmdId === 2) {
616
+ // LineTo
617
+ for (let c = 0; c < count; c++) {
618
+ x += zigzag(cmds[i++]);
619
+ y += zigzag(cmds[i++]);
620
+ current.push({ x, y });
621
+ }
622
+ } else if (cmdId === 7) {
623
+ // ClosePath
624
+ if (current !== null && current.length > 0) {
625
+ current.push({ x: current[0].x, y: current[0].y });
626
+ rings.push(current);
627
+ current = null;
628
+ }
629
+ }
630
+ }
631
+ if (current !== null) {
632
+ rings.push(current);
633
+ }
634
+ return rings;
635
+ }
636
+
637
+ return [];
638
+ }
639
+
640
+ /**
641
+ * @param {Uint8Array} bytes
642
+ * @param {number} start
643
+ * @param {number} end
644
+ * @returns {string|number|boolean|bigint|undefined}
645
+ * @ignore
646
+ */
647
+ function decodeValue(bytes, start, end) {
648
+ let pos = start;
649
+ while (pos < end) {
650
+ const tag = readTag(bytes, pos, end);
651
+ const fieldNumber = tag.fieldNumber;
652
+ const wireType = tag.wireType;
653
+ pos = tag.newPos;
654
+ if (fieldNumber === ValueField.STRING && wireType === 2) {
655
+ const length = readVarintLength(bytes, pos, end);
656
+ pos = length.newPos;
657
+ const stringEnd = advanceByLength(pos, length.value, end, "string value");
658
+ return readString(bytes, pos, stringEnd - pos);
659
+ } else if (fieldNumber === ValueField.FLOAT && wireType === 5) {
660
+ // float
661
+ advanceByLength(pos, 4, end, "float value");
662
+ const v = new DataView(
663
+ bytes.buffer,
664
+ bytes.byteOffset + pos,
665
+ 4,
666
+ ).getFloat32(0, true);
667
+ return v;
668
+ } else if (fieldNumber === ValueField.DOUBLE && wireType === 1) {
669
+ // double
670
+ advanceByLength(pos, 8, end, "double value");
671
+ const v = new DataView(
672
+ bytes.buffer,
673
+ bytes.byteOffset + pos,
674
+ 8,
675
+ ).getFloat64(0, true);
676
+ return v;
677
+ } else if (fieldNumber === ValueField.INT64 && wireType === 0) {
678
+ const value = readBigVarint(bytes, pos, end);
679
+ return toSafeNumber(value.value);
680
+ } else if (fieldNumber === ValueField.UINT64 && wireType === 0) {
681
+ const value = readBigVarint(bytes, pos, end);
682
+ return toSafeNumber(value.value);
683
+ } else if (fieldNumber === ValueField.SINT64 && wireType === 0) {
684
+ const value = readBigVarint(bytes, pos, end);
685
+ return toSafeNumber(zigzagBigInt(value.value));
686
+ } else if (fieldNumber === ValueField.BOOL && wireType === 0) {
687
+ const value = readVarint32(bytes, pos, end);
688
+ return value.value !== 0;
689
+ }
690
+ pos = skipField(bytes, pos, wireType, end);
691
+ }
692
+ return undefined;
693
+ }
694
+
695
+ /**
696
+ * @param {Uint8Array} bytes
697
+ * @param {number} pos
698
+ * @param {number} limit
699
+ * @returns {ReadTagResult}
700
+ * @ignore
701
+ */
702
+ function readTag(bytes, pos, limit) {
703
+ const value = readVarint32(bytes, pos, limit);
704
+ return {
705
+ fieldNumber: value.value >>> 3,
706
+ wireType: value.value & 0x7,
707
+ newPos: value.newPos,
708
+ };
709
+ }
710
+
711
+ /**
712
+ * @param {Uint8Array} bytes
713
+ * @param {number} pos
714
+ * @param {number} limit
715
+ * @returns {ReadVarintResult}
716
+ * @ignore
717
+ */
718
+ function readVarint32(bytes, pos, limit) {
719
+ const value = readBigVarint(bytes, pos, limit, 5);
720
+ if (value.value > 0xffffffffn) {
721
+ throw new RuntimeError("Invalid MVT uint32 varint.");
722
+ }
723
+ return {
724
+ value: Number(value.value),
725
+ newPos: value.newPos,
726
+ };
727
+ }
728
+
729
+ /**
730
+ * @param {Uint8Array} bytes
731
+ * @param {number} pos
732
+ * @param {number} limit
733
+ * @returns {ReadVarintResult}
734
+ * @ignore
735
+ */
736
+ function readVarintLength(bytes, pos, limit) {
737
+ const value = readBigVarint(bytes, pos, limit);
738
+ if (value.value > BigInt(Number.MAX_SAFE_INTEGER)) {
739
+ throw new RuntimeError("Invalid MVT length varint.");
740
+ }
741
+ return {
742
+ value: Number(value.value),
743
+ newPos: value.newPos,
744
+ };
745
+ }
746
+
747
+ /**
748
+ * @param {Uint8Array} bytes
749
+ * @param {number} pos
750
+ * @param {number} limit
751
+ * @param {number} [maxBytes=10]
752
+ * @returns {ReadBigVarintResult}
753
+ * @ignore
754
+ */
755
+ function readBigVarint(bytes, pos, limit, maxBytes) {
756
+ let result = 0n;
757
+ let shift = 0n;
758
+ let byteCount = 0;
759
+ const byteLimit = maxBytes ?? 10;
760
+
761
+ while (true) {
762
+ if (pos >= limit || pos >= bytes.length) {
763
+ throw new RuntimeError("Invalid MVT: truncated varint.");
764
+ }
765
+ const byte = bytes[pos++];
766
+ result |= BigInt(byte & 0x7f) << shift;
767
+ byteCount++;
768
+ if ((byte & 0x80) === 0) {
769
+ break;
770
+ }
771
+ if (byteCount >= byteLimit) {
772
+ throw new RuntimeError("Invalid MVT: varint is too long.");
773
+ }
774
+ shift += 7n;
775
+ }
776
+
777
+ return {
778
+ value: result,
779
+ newPos: pos,
780
+ };
781
+ }
782
+
783
+ /**
784
+ * @param {Uint8Array} bytes
785
+ * @param {number} pos
786
+ * @param {number} len
787
+ * @returns {string}
788
+ * @ignore
789
+ */
790
+ function readString(bytes, pos, len) {
791
+ const end = advanceByLength(pos, len, bytes.length, "string");
792
+ return textDecoder.decode(bytes.subarray(pos, end));
793
+ }
794
+
795
+ /**
796
+ * @param {number} pos
797
+ * @param {number} length
798
+ * @param {number} limit
799
+ * @param {string} fieldName
800
+ * @returns {number}
801
+ * @ignore
802
+ */
803
+ function advanceByLength(pos, length, limit, fieldName) {
804
+ if (!Number.isFinite(length) || length < 0) {
805
+ throw new RuntimeError(`Invalid MVT ${fieldName}: invalid length.`);
806
+ }
807
+ const end = pos + length;
808
+ if (!Number.isFinite(end) || end < pos || end > limit) {
809
+ throw new RuntimeError(
810
+ `Invalid MVT ${fieldName}: length exceeds available bytes.`,
811
+ );
812
+ }
813
+ return end;
814
+ }
815
+
816
+ /**
817
+ * @param {Uint8Array} bytes
818
+ * @param {number} pos
819
+ * @param {number} wireType
820
+ * @param {number} limit
821
+ * @returns {number} newPos
822
+ * @ignore
823
+ */
824
+ function skipField(bytes, pos, wireType, limit) {
825
+ if (wireType === 0) {
826
+ return readBigVarint(bytes, pos, limit).newPos;
827
+ } else if (wireType === 1) {
828
+ return advanceByLength(pos, 8, limit, "fixed64 field");
829
+ } else if (wireType === 2) {
830
+ const length = readVarintLength(bytes, pos, limit);
831
+ return advanceByLength(
832
+ length.newPos,
833
+ length.value,
834
+ limit,
835
+ "length-delimited field",
836
+ );
837
+ } else if (wireType === 5) {
838
+ return advanceByLength(pos, 4, limit, "fixed32 field");
839
+ }
840
+ throw new RuntimeError(`Unsupported protobuf wire type: ${wireType}`);
841
+ }
842
+
843
+ /**
844
+ * Decode a zigzag-encoded signed integer.
845
+ * @param {number} n
846
+ * @returns {number}
847
+ * @ignore
848
+ */
849
+ function zigzag(n) {
850
+ return (n >>> 1) ^ -(n & 1);
851
+ }
852
+
853
+ /**
854
+ * @param {bigint} n
855
+ * @returns {bigint}
856
+ * @ignore
857
+ */
858
+ function zigzagBigInt(n) {
859
+ return (n >> 1n) ^ -(n & 1n);
860
+ }
861
+
862
+ /**
863
+ * @param {bigint} value
864
+ * @returns {number|bigint}
865
+ * @ignore
866
+ */
867
+ function toSafeNumber(value) {
868
+ if (
869
+ value <= BigInt(Number.MAX_SAFE_INTEGER) &&
870
+ value >= BigInt(Number.MIN_SAFE_INTEGER)
871
+ ) {
872
+ return Number(value);
873
+ }
874
+ return value;
875
+ }
876
+
877
+ export default decodeMVT;