@cesium/engine 23.0.1 → 25.0.0

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 (398) hide show
  1. package/Build/Workers/{chunk-ZEMJQKHD.js → chunk-35H3UBIO.js} +13 -12
  2. package/Build/Workers/{chunk-PQTSXJBJ.js → chunk-3LSD7OOA.js} +16 -16
  3. package/Build/Workers/{chunk-PUO7BYDY.js → chunk-3RFFPH4M.js} +1 -1
  4. package/Build/Workers/{chunk-PBECJOWF.js → chunk-3TKLDHV3.js} +2 -2
  5. package/Build/Workers/{chunk-TMCTZ5E3.js → chunk-3VDDRF2E.js} +14 -14
  6. package/Build/Workers/{chunk-FKU77FNM.js → chunk-3XY3MVPG.js} +4 -4
  7. package/Build/Workers/{chunk-2OBWHTIC.js → chunk-4GF4MVPY.js} +7 -7
  8. package/Build/Workers/{chunk-JUKGMJX7.js → chunk-4MTRQFJP.js} +3 -2
  9. package/Build/Workers/{chunk-66OWUDO7.js → chunk-4QQXGTCE.js} +8 -8
  10. package/Build/Workers/{chunk-ALTCIHRH.js → chunk-4XXHJI6Y.js} +17 -17
  11. package/Build/Workers/{chunk-K7UTK4OM.js → chunk-5T6QQAJW.js} +3 -2
  12. package/Build/Workers/{chunk-IJ3SUMK3.js → chunk-6SDGQI27.js} +3 -2
  13. package/Build/Workers/{chunk-FXSRA5UG.js → chunk-77RL3MBD.js} +6 -5
  14. package/Build/Workers/{chunk-G6MJ3ZW3.js → chunk-7LSFAEWF.js} +12 -11
  15. package/Build/Workers/{chunk-C6HHBKT5.js → chunk-A7A433MD.js} +5 -5
  16. package/Build/Workers/{chunk-PGZ3B6CB.js → chunk-A7ZBMVFS.js} +14 -14
  17. package/Build/Workers/{chunk-OZYB3AOR.js → chunk-ACFFCHHZ.js} +11 -11
  18. package/Build/Workers/{chunk-DNMASBMH.js → chunk-AEAVLYPS.js} +2 -2
  19. package/Build/Workers/{chunk-VPWYHFQA.js → chunk-AWFZHD2B.js} +4 -4
  20. package/Build/Workers/{chunk-TFPG3ZKW.js → chunk-BTX2NL3P.js} +59 -46
  21. package/Build/Workers/{chunk-TNXOPEIG.js → chunk-BVAIWR7O.js} +12 -12
  22. package/Build/Workers/chunk-CKQP3DSS.js +973 -0
  23. package/Build/Workers/{chunk-N6HRZLS6.js → chunk-CZ23Y3RM.js} +2 -2
  24. package/Build/Workers/{chunk-EIC3VAOZ.js → chunk-DFEI5MAV.js} +7 -7
  25. package/Build/Workers/{chunk-BTP3634E.js → chunk-DH26SNAB.js} +4 -1
  26. package/Build/Workers/{chunk-TXYQNXNW.js → chunk-DYT5NR6P.js} +3 -3
  27. package/Build/Workers/{chunk-O67UP5YO.js → chunk-EZARA5FJ.js} +13 -13
  28. package/Build/Workers/{chunk-YSJRB2UZ.js → chunk-FIBS5S7R.js} +2 -2
  29. package/Build/Workers/{chunk-2M7DKGLW.js → chunk-FVLVVOBQ.js} +10 -10
  30. package/Build/Workers/{chunk-B2VA6IEL.js → chunk-GL7DNVUS.js} +5 -5
  31. package/Build/Workers/{chunk-77DJBHMI.js → chunk-GPIGURCG.js} +59 -32
  32. package/Build/Workers/{chunk-QPXGGVHC.js → chunk-H2A4USJR.js} +10 -10
  33. package/Build/Workers/chunk-HSVQATK2.js +147 -0
  34. package/Build/Workers/{chunk-HXEPZWJN.js → chunk-HVMG6AG4.js} +11 -10
  35. package/Build/Workers/{chunk-H3TVRJLY.js → chunk-I3A6DXYZ.js} +4 -4
  36. package/Build/Workers/{chunk-UEWYSOFD.js → chunk-ITD2IN7N.js} +2 -2
  37. package/Build/Workers/{chunk-CYOPNGPX.js → chunk-J3OFS2RD.js} +12 -12
  38. package/Build/Workers/{chunk-RZX6LOG6.js → chunk-J647NNZW.js} +6 -6
  39. package/Build/Workers/{chunk-GLCPE2BJ.js → chunk-J7KQEKPK.js} +13 -13
  40. package/Build/Workers/{chunk-XPMXRJDD.js → chunk-K6NFIRFB.js} +5 -5
  41. package/Build/Workers/{chunk-CID5SY7L.js → chunk-LH5SF3XV.js} +7 -6
  42. package/Build/Workers/{chunk-UOQB7XQI.js → chunk-ND3NTTOF.js} +713 -435
  43. package/Build/Workers/chunk-QO2CGXMP.js +2342 -0
  44. package/Build/Workers/chunk-QSDY4NS7.js +1287 -0
  45. package/Build/Workers/chunk-QXNQQYPV.js +3201 -0
  46. package/Build/Workers/{chunk-CJ7ZDY77.js → chunk-ST2UWDUU.js} +5 -5
  47. package/Build/Workers/{chunk-YDR5LX5Z.js → chunk-TA777BGS.js} +3 -2
  48. package/Build/Workers/{chunk-U4SWB6TI.js → chunk-TAI4HLII.js} +4 -4
  49. package/Build/Workers/{chunk-VX774SWE.js → chunk-URUCCIPS.js} +6 -6
  50. package/Build/Workers/{chunk-MNSNOONX.js → chunk-VQKLRBIK.js} +7 -7
  51. package/Build/Workers/{chunk-CVAAIRNP.js → chunk-WC57YYBN.js} +2 -2
  52. package/Build/Workers/{chunk-QNABVTTP.js → chunk-WN6P5UDH.js} +12 -12
  53. package/Build/Workers/{chunk-CNLXMOPM.js → chunk-WNN5D4W3.js} +12 -11
  54. package/Build/Workers/{chunk-4JJQRZYL.js → chunk-WTQGE7Q6.js} +17 -17
  55. package/Build/Workers/{chunk-FCJQO4NC.js → chunk-WUBKZFF6.js} +2213 -1349
  56. package/Build/Workers/{chunk-3UQ2YMPP.js → chunk-ZAPOS52G.js} +12 -10
  57. package/Build/Workers/{chunk-LHFC4R7Z.js → chunk-ZCCIIBZT.js} +6 -6
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +175 -118
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +24 -23
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +25 -25
  100. package/Build/Workers/createWallOutlineGeometry.js +24 -24
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +12 -12
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +12 -9
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/ArcType.js +6 -1
  112. package/Source/Core/ArticulationStageType.js +5 -1
  113. package/Source/Core/AssociativeArray.js +100 -94
  114. package/Source/Core/BoundingSphere.js +1296 -1300
  115. package/Source/Core/Cartesian2.js +7 -5
  116. package/Source/Core/Cartesian3.js +9 -8
  117. package/Source/Core/Cartesian4.js +8 -6
  118. package/Source/Core/Cartographic.js +257 -249
  119. package/Source/Core/ClockRange.js +6 -1
  120. package/Source/Core/ClockStep.js +6 -1
  121. package/Source/Core/Color.js +846 -835
  122. package/Source/Core/ComponentDatatype.js +4 -1
  123. package/Source/Core/CornerType.js +6 -1
  124. package/Source/Core/Credit.js +121 -124
  125. package/Source/Core/DeveloperError.js +2 -1
  126. package/Source/Core/Ellipsoid.js +637 -660
  127. package/Source/Core/ExtrapolationType.js +6 -1
  128. package/Source/Core/GeocodeType.js +6 -1
  129. package/Source/Core/GeographicProjection.js +74 -74
  130. package/Source/Core/GeographicTilingScheme.js +179 -198
  131. package/Source/Core/GeometryOffsetAttribute.js +7 -1
  132. package/Source/Core/GeometryType.js +7 -1
  133. package/Source/Core/HeightmapEncoding.js +6 -1
  134. package/Source/Core/ITwinPlatform.js +1 -0
  135. package/Source/Core/Iau2006XysData.js +24 -13
  136. package/Source/Core/IndexDatatype.js +3 -1
  137. package/Source/Core/InterpolationType.js +5 -1
  138. package/Source/Core/Intersect.js +6 -1
  139. package/Source/Core/Ion.js +1 -1
  140. package/Source/Core/IonGeocodeProviderType.js +5 -1
  141. package/Source/Core/JulianDate.js +850 -848
  142. package/Source/Core/KeyboardEventModifier.js +6 -1
  143. package/Source/Core/MapProjection.js +39 -44
  144. package/Source/Core/Matrix2.js +906 -893
  145. package/Source/Core/Matrix3.js +1643 -1575
  146. package/Source/Core/Matrix4.js +2903 -2872
  147. package/Source/Core/PixelFormat.js +3 -1
  148. package/Source/Core/PrimitiveType.js +11 -1
  149. package/Source/Core/Ray.js +62 -60
  150. package/Source/Core/Rectangle.js +913 -904
  151. package/Source/Core/ReferenceFrame.js +6 -1
  152. package/Source/Core/RequestScheduler.js +8 -3
  153. package/Source/Core/RequestState.js +6 -1
  154. package/Source/Core/RequestType.js +6 -1
  155. package/Source/Core/S2Cell.js +2 -2
  156. package/Source/Core/ScreenSpaceEventType.js +6 -1
  157. package/Source/Core/TerrainMesh.js +10 -1
  158. package/Source/Core/TerrainPicker.js +1 -0
  159. package/Source/Core/TerrainQuantization.js +6 -1
  160. package/Source/Core/TilingScheme.js +100 -98
  161. package/Source/Core/TimeConstants.js +6 -1
  162. package/Source/Core/TimeStandard.js +6 -1
  163. package/Source/Core/TrackingReferenceFrame.js +6 -1
  164. package/Source/Core/Visibility.js +6 -1
  165. package/Source/Core/VulkanConstants.js +6 -1
  166. package/Source/Core/WallGeometry.js +1 -1
  167. package/Source/Core/WallOutlineGeometry.js +1 -1
  168. package/Source/Core/WebGLConstants.js +6 -1
  169. package/Source/Core/WebMercatorProjection.js +108 -109
  170. package/Source/Core/WebMercatorTilingScheme.js +246 -242
  171. package/Source/Core/WindingOrder.js +3 -1
  172. package/Source/Core/assert.js +27 -0
  173. package/Source/Core/globalTypes.js +4 -0
  174. package/Source/DataSources/CzmlDataSource.js +9 -0
  175. package/Source/DataSources/PathGraphics.js +13 -0
  176. package/Source/DataSources/PathVisualizer.js +330 -18
  177. package/Source/DataSources/StaticGeometryColorBatch.js +7 -2
  178. package/Source/DataSources/StaticGeometryPerMaterialBatch.js +7 -2
  179. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +4 -1
  180. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +4 -1
  181. package/Source/DataSources/StripeOrientation.js +6 -1
  182. package/Source/Renderer/BufferUsage.js +20 -9
  183. package/Source/Renderer/Context.js +2 -29
  184. package/Source/Renderer/DrawCommand.js +435 -403
  185. package/Source/Renderer/MipmapHint.js +5 -1
  186. package/Source/Renderer/Pass.js +7 -1
  187. package/Source/Renderer/PickId.js +44 -0
  188. package/Source/Renderer/PixelDatatype.js +3 -1
  189. package/Source/Renderer/RenderState.js +2 -2
  190. package/Source/Renderer/RenderbufferFormat.js +5 -1
  191. package/Source/Renderer/ShaderDestination.js +4 -1
  192. package/Source/Renderer/TextureMagnificationFilter.js +3 -1
  193. package/Source/Renderer/TextureMinificationFilter.js +3 -1
  194. package/Source/Renderer/TextureWrap.js +5 -1
  195. package/Source/Renderer/VertexArray.js +80 -0
  196. package/Source/Scene/AlphaMode.js +5 -1
  197. package/Source/Scene/ArcGisBaseMapType.js +6 -1
  198. package/Source/Scene/ArcGisMapService.js +1 -1
  199. package/Source/Scene/AttributeType.js +3 -1
  200. package/Source/Scene/Axis.js +3 -1
  201. package/Source/Scene/BillboardCollection.js +65 -364
  202. package/Source/Scene/BingMapsStyle.js +6 -1
  203. package/Source/Scene/BlendEquation.js +6 -1
  204. package/Source/Scene/BlendFunction.js +6 -1
  205. package/Source/Scene/BlendOption.js +6 -1
  206. package/Source/Scene/BlendingState.js +6 -1
  207. package/Source/Scene/BufferLoader.js +0 -2
  208. package/Source/Scene/BufferPoint.js +148 -0
  209. package/Source/Scene/BufferPointCollection.js +138 -0
  210. package/Source/Scene/BufferPointMaterial.js +95 -0
  211. package/Source/Scene/BufferPolygon.js +516 -0
  212. package/Source/Scene/BufferPolygonCollection.js +370 -0
  213. package/Source/Scene/BufferPolygonMaterial.js +41 -0
  214. package/Source/Scene/BufferPolyline.js +185 -0
  215. package/Source/Scene/BufferPolylineCollection.js +138 -0
  216. package/Source/Scene/BufferPolylineMaterial.js +93 -0
  217. package/Source/Scene/BufferPrimitive.js +347 -0
  218. package/Source/Scene/BufferPrimitiveCollection.js +818 -0
  219. package/Source/Scene/BufferPrimitiveMaterial.js +140 -0
  220. package/Source/Scene/CameraEventType.js +6 -1
  221. package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
  222. package/Source/Scene/Cesium3DTileContent.js +5 -1
  223. package/Source/Scene/Cesium3DTileContentFactory.js +9 -0
  224. package/Source/Scene/Cesium3DTileContentState.js +6 -1
  225. package/Source/Scene/Cesium3DTileContentType.js +3 -1
  226. package/Source/Scene/Cesium3DTileFeature.js +289 -306
  227. package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
  228. package/Source/Scene/Cesium3DTilePass.js +5 -1
  229. package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
  230. package/Source/Scene/Cesium3DTileRefine.js +6 -1
  231. package/Source/Scene/Cesium3DTileStyle.js +22 -0
  232. package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
  233. package/Source/Scene/Cesium3DTileset.js +2 -1
  234. package/Source/Scene/ClassificationType.js +3 -1
  235. package/Source/Scene/ClippingPolygonCollection.js +270 -101
  236. package/Source/Scene/CloudType.js +3 -1
  237. package/Source/Scene/ColorBlendMode.js +4 -1
  238. package/Source/Scene/CubeMapPanorama.js +4 -4
  239. package/Source/Scene/CullFace.js +6 -1
  240. package/Source/Scene/DepthFunction.js +6 -1
  241. package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
  242. package/Source/Scene/EquirectangularPanorama.js +1 -0
  243. package/Source/Scene/ExpressionNodeType.js +6 -1
  244. package/Source/Scene/GaussianSplat3DTileContent.js +40 -46
  245. package/Source/Scene/GaussianSplatPrimitive.js +413 -70
  246. package/Source/Scene/GetFeatureInfoFormat.js +3 -3
  247. package/Source/Scene/GltfBufferViewLoader.js +0 -2
  248. package/Source/Scene/GltfDracoLoader.js +0 -2
  249. package/Source/Scene/GltfImageLoader.js +0 -3
  250. package/Source/Scene/GltfIndexBufferLoader.js +0 -4
  251. package/Source/Scene/GltfJsonLoader.js +0 -2
  252. package/Source/Scene/GltfLoader.js +215 -39
  253. package/Source/Scene/GltfLoaderUtil.js +14 -0
  254. package/Source/Scene/GltfSpzLoader.js +109 -2
  255. package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
  256. package/Source/Scene/GltfTextureLoader.js +0 -2
  257. package/Source/Scene/GltfVertexBufferLoader.js +0 -4
  258. package/Source/Scene/HeightReference.js +5 -1
  259. package/Source/Scene/HorizontalOrigin.js +6 -1
  260. package/Source/Scene/ITwinData.js +1 -0
  261. package/Source/Scene/ImageryProvider.js +1 -1
  262. package/Source/Scene/ImageryState.js +6 -1
  263. package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
  264. package/Source/Scene/InstanceAttributeSemantic.js +3 -1
  265. package/Source/Scene/IonWorldImageryStyle.js +6 -1
  266. package/Source/Scene/JobType.js +6 -1
  267. package/Source/Scene/Label.js +32 -0
  268. package/Source/Scene/LabelCollection.js +14 -13
  269. package/Source/Scene/LabelStyle.js +6 -1
  270. package/Source/Scene/MapMode2D.js +6 -1
  271. package/Source/Scene/Material.js +2 -0
  272. package/Source/Scene/Megatexture.js +1 -0
  273. package/Source/Scene/MetadataClassProperty.js +24 -10
  274. package/Source/Scene/MetadataComponentType.js +118 -24
  275. package/Source/Scene/MetadataSchemaLoader.js +0 -2
  276. package/Source/Scene/MetadataSemantic.js +6 -2
  277. package/Source/Scene/MetadataType.js +3 -1
  278. package/Source/Scene/Model/B3dmLoader.js +0 -3
  279. package/Source/Scene/Model/CustomShaderMode.js +3 -1
  280. package/Source/Scene/Model/CustomShaderPipelineStage.js +3 -1
  281. package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
  282. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +735 -264
  283. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
  284. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
  285. package/Source/Scene/Model/GeoJsonLoader.js +0 -2
  286. package/Source/Scene/Model/I3dmLoader.js +0 -3
  287. package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
  288. package/Source/Scene/Model/LightingModel.js +5 -1
  289. package/Source/Scene/Model/MaterialPipelineStage.js +331 -3
  290. package/Source/Scene/Model/MetadataPipelineStage.js +3 -3
  291. package/Source/Scene/Model/ModelDrawCommand.js +6 -0
  292. package/Source/Scene/Model/ModelReader.js +475 -4
  293. package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
  294. package/Source/Scene/Model/ModelType.js +3 -1
  295. package/Source/Scene/Model/ModelUtility.js +3 -1
  296. package/Source/Scene/Model/PntsLoader.js +4 -3
  297. package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
  298. package/Source/Scene/Model/UniformType.js +5 -1
  299. package/Source/Scene/Model/VaryingType.js +5 -1
  300. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +375 -0
  301. package/Source/Scene/Model/pickModel.js +94 -299
  302. package/Source/Scene/ModelAnimationLoop.js +6 -1
  303. package/Source/Scene/ModelAnimationState.js +6 -1
  304. package/Source/Scene/ModelComponents.js +1639 -1542
  305. package/Source/Scene/PickedMetadataInfo.js +1 -0
  306. package/Source/Scene/PrimitiveState.js +7 -1
  307. package/Source/Scene/QuadtreeOccluders.js +20 -15
  308. package/Source/Scene/QuadtreeTile.js +547 -541
  309. package/Source/Scene/QuadtreeTileLoadState.js +6 -1
  310. package/Source/Scene/QuadtreeTileProvider.js +159 -175
  311. package/Source/Scene/ResourceLoader.js +0 -1
  312. package/Source/Scene/ResourceLoaderState.js +7 -1
  313. package/Source/Scene/SceneMode.js +4 -1
  314. package/Source/Scene/ScreenSpaceCameraController.js +13 -0
  315. package/Source/Scene/ShadowMode.js +3 -1
  316. package/Source/Scene/SkyBox.js +17 -8
  317. package/Source/Scene/SplitDirection.js +6 -1
  318. package/Source/Scene/StencilFunction.js +6 -1
  319. package/Source/Scene/StencilOperation.js +6 -1
  320. package/Source/Scene/TerrainState.js +7 -1
  321. package/Source/Scene/TileBoundingRegion.js +1 -1
  322. package/Source/Scene/TileBoundingS2Cell.js +1 -1
  323. package/Source/Scene/TileBoundingSphere.js +1 -1
  324. package/Source/Scene/TileState.js +7 -1
  325. package/Source/Scene/Tonemapper.js +5 -1
  326. package/Source/Scene/TweenCollection.js +7 -0
  327. package/Source/Scene/VectorGltf3DTileContent.js +403 -0
  328. package/Source/Scene/VertexAttributeSemantic.js +17 -1
  329. package/Source/Scene/VerticalOrigin.js +6 -1
  330. package/Source/Scene/VoxelBoxShape.js +12 -6
  331. package/Source/Scene/VoxelContent.js +2 -0
  332. package/Source/Scene/VoxelCylinderShape.js +39 -38
  333. package/Source/Scene/VoxelEllipsoidShape.js +46 -96
  334. package/Source/Scene/VoxelMetadataOrder.js +6 -1
  335. package/Source/Scene/VoxelProvider.js +1 -0
  336. package/Source/Scene/VoxelShapeType.js +3 -1
  337. package/Source/Scene/WebMapServiceImageryProvider.js +2 -2
  338. package/Source/Scene/WebMapTileServiceImageryProvider.js +366 -131
  339. package/Source/Scene/parseStructuralMetadata.js +97 -37
  340. package/Source/Scene/renderBufferPointCollection.js +285 -0
  341. package/Source/Scene/renderBufferPolygonCollection.js +339 -0
  342. package/Source/Scene/renderBufferPolylineCollection.js +478 -0
  343. package/Source/Shaders/BillboardCollectionFS.glsl +2 -77
  344. package/Source/Shaders/BillboardCollectionFS.js +2 -77
  345. package/Source/Shaders/BillboardCollectionVS.glsl +2 -60
  346. package/Source/Shaders/BillboardCollectionVS.js +2 -60
  347. package/Source/Shaders/BufferPointMaterialFS.glsl +27 -0
  348. package/Source/Shaders/BufferPointMaterialFS.js +29 -0
  349. package/Source/Shaders/BufferPointMaterialVS.glsl +48 -0
  350. package/Source/Shaders/BufferPointMaterialVS.js +50 -0
  351. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  352. package/Source/Shaders/BufferPolygonMaterialFS.js +15 -0
  353. package/Source/Shaders/BufferPolygonMaterialVS.glsl +30 -0
  354. package/Source/Shaders/BufferPolygonMaterialVS.js +32 -0
  355. package/Source/Shaders/BufferPolylineMaterialFS.glsl +13 -0
  356. package/Source/Shaders/BufferPolylineMaterialFS.js +15 -0
  357. package/Source/Shaders/BufferPolylineMaterialVS.glsl +49 -0
  358. package/Source/Shaders/BufferPolylineMaterialVS.js +51 -0
  359. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  360. package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
  361. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  362. package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
  363. package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
  364. package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
  365. package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
  366. package/Source/Shaders/Model/EdgeVisibilityStageFS.glsl +34 -48
  367. package/Source/Shaders/Model/EdgeVisibilityStageFS.js +34 -49
  368. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +98 -0
  369. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +100 -0
  370. package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
  371. package/Source/Shaders/Model/MaterialStageFS.js +46 -20
  372. package/Source/Shaders/Model/ModelFS.glsl +15 -0
  373. package/Source/Shaders/Model/ModelFS.js +15 -0
  374. package/Source/Shaders/Model/ModelVS.glsl +8 -0
  375. package/Source/Shaders/Model/ModelVS.js +8 -0
  376. package/Source/Shaders/PolygonSignedDistanceFS.glsl +64 -33
  377. package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
  378. package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +9 -2
  379. package/Source/Shaders/PrimitiveGaussianSplatVS.js +9 -2
  380. package/Source/Shaders/Voxels/VoxelFS.glsl +1 -1
  381. package/Source/Shaders/Voxels/VoxelFS.js +1 -1
  382. package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
  383. package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
  384. package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
  385. package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
  386. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
  387. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
  388. package/Source/Widget/CesiumWidget.js +11 -4
  389. package/Source/Workers/decodeDraco.js +3 -0
  390. package/Source/Workers/decodeI3S.js +5 -2
  391. package/index.d.ts +1332 -402
  392. package/index.js +111 -81
  393. package/package.json +3 -3
  394. package/Build/Workers/chunk-54O3AGOA.js +0 -642
  395. package/Build/Workers/chunk-6U5QMZU3.js +0 -940
  396. package/Build/Workers/chunk-HNDE73JK.js +0 -1829
  397. package/Build/Workers/chunk-PAFMAR7A.js +0 -2357
  398. package/Build/Workers/chunk-S53HSRT6.js +0 -114
@@ -1,19 +1,13 @@
1
1
  import combine from "../Core/combine.js";
2
- import Credit from "../Core/Credit.js";
3
2
  import Frozen from "../Core/Frozen.js";
4
3
  import defined from "../Core/defined.js";
5
4
  import DeveloperError from "../Core/DeveloperError.js";
6
5
  import Event from "../Core/Event.js";
7
6
  import Resource from "../Core/Resource.js";
8
7
  import WebMercatorTilingScheme from "../Core/WebMercatorTilingScheme.js";
9
- import ImageryProvider from "./ImageryProvider.js";
10
8
  import TimeDynamicImagery from "./TimeDynamicImagery.js";
11
-
12
- const defaultParameters = Object.freeze({
13
- service: "WMTS",
14
- version: "1.0.0",
15
- request: "GetTile",
16
- });
9
+ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
10
+ import GetFeatureInfoFormat from "./GetFeatureInfoFormat.js";
17
11
 
18
12
  /**
19
13
  * @typedef {object} WebMapTileServiceImageryProvider.ConstructorOptions
@@ -25,21 +19,32 @@ const defaultParameters = Object.freeze({
25
19
  * @property {string} layer The layer name for WMTS requests.
26
20
  * @property {string} style The style name for WMTS requests.
27
21
  * @property {string} tileMatrixSetID The identifier of the TileMatrixSet to use for WMTS requests.
28
- * @property {Array} [tileMatrixLabels] A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level.
29
- * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.
30
- * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.
31
- * @property {object} [dimensions] A object containing static dimensions and their values.
22
+ * @property {boolean} [enablePickFeatures] If true, {@link WebMapTileServiceImageryProvider#pickFeatures} will invoke
23
+ * the GetFeatureInfo operation on the WMTS server and return the features included in the response. If false,
24
+ * {@link WebMapTileServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)
25
+ * without communicating with the server. Set this property to false if you know your WMTS server does not support
26
+ * GetFeatureInfo or if you don't want this provider's features to be pickable.
27
+ * Defaults to true for KVP encoding. For RESTful encoding, defaults to true only when
28
+ * {@link WebMapTileServiceImageryProvider.ConstructorOptions#getFeatureInfoUrl} is specified, and false otherwise.
29
+ * @property {object} [getFeatureInfoParameters] Additional parameters to include in GetFeatureInfo requests. Keys are lowercased internally.
30
+ * @property {Resource|string} [getFeatureInfoUrl] The GetFeatureInfo URL of the WMTS service. If not specified, the value of <code>url</code> is used.
31
+ * @property {GetFeatureInfoFormat[]} [getFeatureInfoFormats=WebMapTileServiceImageryProvider.DefaultGetFeatureInfoFormats] The formats
32
+ * in which to try WMTS GetFeatureInfo requests.
33
+ * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle covered by the layer.
34
+ * @property {TilingScheme} [tilingScheme] The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet.
35
+ * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.
32
36
  * @property {number} [tileWidth=256] The tile width in pixels.
33
37
  * @property {number} [tileHeight=256] The tile height in pixels.
34
- * @property {TilingScheme} [tilingScheme] The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet.
35
- * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle covered by the layer.
36
38
  * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.
37
39
  * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.
38
- * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.
40
+ * @property {Array} [tileMatrixLabels] A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level.
39
41
  * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.
40
42
  * @property {string|string[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.
41
43
  * If this parameter is a single string, each character in the string is a subdomain. If it is
42
44
  * an array, each element in the array is a subdomain.
45
+ * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.
46
+ * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.
47
+ * @property {object} [dimensions] A object containing static dimensions and their values.
43
48
  */
44
49
 
45
50
  /**
@@ -81,28 +86,88 @@ const defaultParameters = Object.freeze({
81
86
  * viewer.imageryLayers.addImageryProvider(shadedRelief2);
82
87
  *
83
88
  * @example
84
- * // Example 3. NASA time dynamic weather data (RESTful)
89
+ * // Example 3: NASA time dynamic snowpack data (RESTful)
90
+ * // Define time intervals for the layer based on the capabilities XML
85
91
  * const times = Cesium.TimeIntervalCollection.fromIso8601({
86
- * iso8601: '2015-07-30/2017-06-16/P1D',
87
- * dataCallback: function dataCallback(interval, index) {
88
- * return {
89
- * Time: Cesium.JulianDate.toIso8601(interval.start)
90
- * };
91
- * }
92
+ * iso8601: '2025-01-01/2025-09-01/P5D', // Use the valid interval(s) from the Dimension section
93
+ * dataCallback: function(interval, index) {
94
+ * // Return an object with the Time variable used in the URL template
95
+ * return {
96
+ * Time: Cesium.JulianDate.toIso8601(interval.start, 0)
97
+ * };
98
+ * }
92
99
  * });
100
+
101
+ * // Get the internal clock, set desired start, stop, and multiplier
102
+ * const clock = viewer.clock;
103
+ * clock.startTime = Cesium.JulianDate.fromIso8601('2025-01-01');
104
+ * clock.currentTime = Cesium.JulianDate.fromIso8601('2025-01-01');
105
+ * clock.stopTime = Cesium.JulianDate.fromIso8601('2025-09-01');
106
+ * clock.clockRange = Cesium.ClockRange.LOOP_STOP;
107
+ * clock.multiplier = 1; // 1 day per second
108
+ * clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER;
109
+ *
110
+ * viewer.timeline.zoomTo(clock.startTime, clock.stopTime);
111
+ *
93
112
  * const weather = new Cesium.WebMapTileServiceImageryProvider({
94
- * url : 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/AMSR2_Snow_Water_Equivalent/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png',
95
- * layer : 'AMSR2_Snow_Water_Equivalent',
96
- * style : 'default',
97
- * tileMatrixSetID : '2km',
98
- * maximumLevel : 5,
99
- * format : 'image/png',
113
+ * url: 'https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/AMSRU2_Snow_Water_Equivalent_5Day/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png',
114
+ * layer: 'AMSRU2_Snow_Water_Equivalent_5Day',
115
+ * style: 'default',
116
+ * tileMatrixSetID: 'GoogleMapsCompatible_Level6',
117
+ * format: 'image/png',
100
118
  * clock: clock,
101
119
  * times: times,
102
- * credit : new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS')
120
+ * credit: new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS')
103
121
  * });
104
122
  * viewer.imageryLayers.addImageryProvider(weather);
105
123
  *
124
+ * @example
125
+ * // Example 4. Digital Earth AfricA waterbodies with GetFeatureInfo support (RESTful)
126
+ * const waterbodies = new Cesium.WebMapTileServiceImageryProvider({
127
+ * url: "https://geoserver.digitalearth.africa/geoserver/gwc/service/wmts/rest/{layer}/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format={format}",
128
+ * layer: "waterbodies:DEAfrica_Waterbodies",
129
+ * style: "waterbodies:waterbodies_v0_0_4",
130
+ * tileMatrixSetID: "EPSG:3857",
131
+ * tileMatrixLabels: [
132
+ * "EPSG:3857:0",
133
+ * "EPSG:3857:1",
134
+ * "EPSG:3857:2",
135
+ * "EPSG:3857:3",
136
+ * "EPSG:3857:4",
137
+ * "EPSG:3857:5",
138
+ * "EPSG:3857:6",
139
+ * "EPSG:3857:7",
140
+ * "EPSG:3857:8",
141
+ * "EPSG:3857:9",
142
+ * "EPSG:3857:10",
143
+ * "EPSG:3857:11",
144
+ * "EPSG:3857:12",
145
+ * "EPSG:3857:13",
146
+ * "EPSG:3857:14",
147
+ * "EPSG:3857:15",
148
+ * "EPSG:3857:16",
149
+ * "EPSG:3857:17",
150
+ * "EPSG:3857:18",
151
+ * "EPSG:3857:19",
152
+ * "EPSG:3857:20",
153
+ * "EPSG:3857:21",
154
+ * "EPSG:3857:22",
155
+ * "EPSG:3857:23",
156
+ * "EPSG:3857:24",
157
+ * "EPSG:3857:25",
158
+ * "EPSG:3857:26",
159
+ * "EPSG:3857:27",
160
+ * "EPSG:3857:28",
161
+ * "EPSG:3857:29",
162
+ * "EPSG:3857:30",
163
+ * ],
164
+ * format: "image/png",
165
+ * enablePickFeatures: true,
166
+ * getFeatureInfoUrl: "https://geoserver.digitalearth.africa/geoserver/gwc/service/wmts/rest/{layer}/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{j}/{i}?format={format}",
167
+ * });
168
+ *
169
+ * viewer.imageryLayers.addImageryProvider(waterbodies);
170
+ *
106
171
  * @see ArcGisMapServerImageryProvider
107
172
  * @see BingMapsImageryProvider
108
173
  * @see GoogleEarthEnterpriseMapsProvider
@@ -146,49 +211,90 @@ function WebMapTileServiceImageryProvider(options) {
146
211
  this._defaultMinificationFilter = undefined;
147
212
  this._defaultMagnificationFilter = undefined;
148
213
 
214
+ this._getFeatureInfoUrl = options.getFeatureInfoUrl ?? options.url;
215
+
149
216
  const resource = Resource.createIfNeeded(options.url);
217
+ const pickFeatureResource = Resource.createIfNeeded(this._getFeatureInfoUrl);
150
218
 
151
219
  const style = options.style;
152
220
  const tileMatrixSetID = options.tileMatrixSetID;
153
221
  const url = resource.url;
222
+ const format = options.format ?? "image/jpeg";
154
223
 
155
224
  const bracketMatch = url.match(/{/g);
156
225
  if (
157
226
  !defined(bracketMatch) ||
158
227
  (bracketMatch.length === 1 && /{s}/.test(url))
159
228
  ) {
160
- resource.setQueryParameters(defaultParameters);
229
+ resource.setQueryParameters(
230
+ WebMapTileServiceImageryProvider.DefaultParameters,
231
+ true,
232
+ );
161
233
  this._useKvp = true;
162
234
  } else {
163
- const templateValues = {
164
- style: style,
165
- Style: style,
166
- TileMatrixSet: tileMatrixSetID,
167
- };
168
-
169
- resource.setTemplateValues(templateValues);
235
+ resource.setTemplateValues(
236
+ WebMapTileServiceImageryProvider.DefaultParameters,
237
+ true,
238
+ );
170
239
  this._useKvp = false;
171
240
  }
172
241
 
173
- this._resource = resource;
174
- this._layer = options.layer;
175
- this._style = style;
176
- this._tileMatrixSetID = tileMatrixSetID;
177
- this._tileMatrixLabels = options.tileMatrixLabels;
178
- this._format = options.format ?? "image/jpeg";
179
- this._tileDiscardPolicy = options.tileDiscardPolicy;
242
+ if (this._useKvp) {
243
+ pickFeatureResource.setQueryParameters(
244
+ WebMapTileServiceImageryProvider.GetFeatureInfoDefaultParameters,
245
+ true,
246
+ );
180
247
 
181
- this._tilingScheme = defined(options.tilingScheme)
182
- ? options.tilingScheme
183
- : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });
184
- this._tileWidth = options.tileWidth ?? 256;
185
- this._tileHeight = options.tileHeight ?? 256;
248
+ if (defined(options.getFeatureInfoParameters)) {
249
+ pickFeatureResource.setQueryParameters(
250
+ objectToLowercase(options.getFeatureInfoParameters),
251
+ );
252
+ }
186
253
 
187
- this._minimumLevel = options.minimumLevel ?? 0;
188
- this._maximumLevel = options.maximumLevel;
254
+ const pickFeatureParams = {
255
+ infoformat: "{format}",
256
+ i: "{i}",
257
+ j: "{j}",
258
+ };
259
+ pickFeatureResource.setQueryParameters(pickFeatureParams, true);
260
+ } else {
261
+ pickFeatureResource.setTemplateValues(
262
+ WebMapTileServiceImageryProvider.GetFeatureInfoDefaultParameters,
263
+ true,
264
+ );
189
265
 
190
- this._rectangle = options.rectangle ?? this._tilingScheme.rectangle;
266
+ if (defined(options.getFeatureInfoParameters)) {
267
+ pickFeatureResource.setTemplateValues(
268
+ objectToLowercase(options.getFeatureInfoParameters),
269
+ );
270
+ }
271
+ }
272
+
273
+ this._resource = resource;
274
+ this._tileMatrixLabels = options.tileMatrixLabels;
275
+ this._format = format;
191
276
  this._dimensions = options.dimensions;
277
+ this._tilematrixset = tileMatrixSetID;
278
+
279
+ const parameters = {};
280
+ parameters.tilematrix = "{TileMatrix}";
281
+ parameters.layer = options.layer;
282
+ parameters.style = style;
283
+ parameters.tilerow = "{TileRow}";
284
+ parameters.tilecol = "{TileCol}";
285
+ parameters.tilematrixset = tileMatrixSetID;
286
+
287
+ if (this._useKvp) {
288
+ resource.setQueryParameters(parameters, true);
289
+ resource.setQueryParameters({ format: format }, true);
290
+ pickFeatureResource.setQueryParameters({ format: format }, true);
291
+ pickFeatureResource.setQueryParameters(parameters, true);
292
+ } else {
293
+ parameters.Style = style;
294
+ resource.setTemplateValues(parameters);
295
+ resource.setTemplateValues({ format: format });
296
+ pickFeatureResource.setTemplateValues(parameters);
297
+ }
192
298
 
193
299
  const that = this;
194
300
  this._reload = undefined;
@@ -209,79 +315,57 @@ function WebMapTileServiceImageryProvider(options) {
209
315
 
210
316
  this._errorEvent = new Event();
211
317
 
212
- const credit = options.credit;
213
- this._credit = typeof credit === "string" ? new Credit(credit) : credit;
214
-
215
- this._subdomains = options.subdomains;
216
- if (Array.isArray(this._subdomains)) {
217
- this._subdomains = this._subdomains.slice();
218
- } else if (defined(this._subdomains) && this._subdomains.length > 0) {
219
- this._subdomains = this._subdomains.split("");
220
- } else {
221
- this._subdomains = ["a", "b", "c"];
222
- }
318
+ // Let UrlTemplateImageryProvider do the actual URL building.
319
+ this._tileProvider = new UrlTemplateImageryProvider({
320
+ url: resource,
321
+ pickFeaturesUrl: pickFeatureResource,
322
+ tilingScheme:
323
+ options.tilingScheme ??
324
+ new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid }),
325
+ rectangle: options.rectangle,
326
+ tileWidth: options.tileWidth,
327
+ tileHeight: options.tileHeight,
328
+ minimumLevel: options.minimumLevel,
329
+ maximumLevel: options.maximumLevel,
330
+ subdomains: options.subdomains,
331
+ tileDiscardPolicy: options.tileDiscardPolicy,
332
+ credit: options.credit,
333
+ getFeatureInfoFormats:
334
+ options.getFeatureInfoFormats ??
335
+ WebMapTileServiceImageryProvider.DefaultGetFeatureInfoFormats,
336
+ enablePickFeatures:
337
+ options.enablePickFeatures ??
338
+ (this._useKvp || defined(options.getFeatureInfoUrl)),
339
+ customTags: createCustomTags(this),
340
+ });
223
341
  }
224
342
 
225
343
  function requestImage(imageryProvider, col, row, level, request, interval) {
226
- const labels = imageryProvider._tileMatrixLabels;
227
- const tileMatrix = defined(labels) ? labels[level] : level.toString();
228
- const subdomains = imageryProvider._subdomains;
229
- const staticDimensions = imageryProvider._dimensions;
230
- const dynamicIntervalData = defined(interval) ? interval.data : undefined;
231
-
232
- let resource;
233
- let templateValues;
234
- if (!imageryProvider._useKvp) {
235
- templateValues = {
236
- TileMatrix: tileMatrix,
237
- TileRow: row.toString(),
238
- TileCol: col.toString(),
239
- s: subdomains[(col + row + level) % subdomains.length],
240
- };
241
-
242
- resource = imageryProvider._resource.getDerivedResource({
243
- request: request,
244
- });
245
- resource.setTemplateValues(templateValues);
344
+ const tileProvider = imageryProvider._tileProvider;
246
345
 
247
- if (defined(staticDimensions)) {
248
- resource.setTemplateValues(staticDimensions);
249
- }
346
+ applyDimensions(imageryProvider, tileProvider._resource, interval);
250
347
 
251
- if (defined(dynamicIntervalData)) {
252
- resource.setTemplateValues(dynamicIntervalData);
253
- }
254
- } else {
255
- // build KVP request
256
- let query = {};
257
- query.tilematrix = tileMatrix;
258
- query.layer = imageryProvider._layer;
259
- query.style = imageryProvider._style;
260
- query.tilerow = row;
261
- query.tilecol = col;
262
- query.tilematrixset = imageryProvider._tileMatrixSetID;
263
- query.format = imageryProvider._format;
264
-
265
- if (defined(staticDimensions)) {
266
- query = combine(query, staticDimensions);
267
- }
268
-
269
- if (defined(dynamicIntervalData)) {
270
- query = combine(query, dynamicIntervalData);
271
- }
348
+ return tileProvider.requestImage(col, row, level, request);
349
+ }
272
350
 
273
- templateValues = {
274
- s: subdomains[(col + row + level) % subdomains.length],
275
- };
351
+ function pickFeatures(
352
+ imageryProvider,
353
+ x,
354
+ y,
355
+ level,
356
+ longitude,
357
+ latitude,
358
+ interval,
359
+ ) {
360
+ const tileProvider = imageryProvider._tileProvider;
276
361
 
277
- resource = imageryProvider._resource.getDerivedResource({
278
- queryParameters: query,
279
- request: request,
280
- });
281
- resource.setTemplateValues(templateValues);
282
- }
362
+ applyDimensions(
363
+ imageryProvider,
364
+ tileProvider._pickFeaturesResource,
365
+ interval,
366
+ );
283
367
 
284
- return ImageryProvider.loadImage(imageryProvider, resource);
368
+ return tileProvider.pickFeatures(x, y, level, longitude, latitude);
285
369
  }
286
370
 
287
371
  Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
@@ -317,7 +401,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
317
401
  */
318
402
  tileWidth: {
319
403
  get: function () {
320
- return this._tileWidth;
404
+ return this._tileProvider.tileWidth;
321
405
  },
322
406
  },
323
407
 
@@ -329,7 +413,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
329
413
  */
330
414
  tileHeight: {
331
415
  get: function () {
332
- return this._tileHeight;
416
+ return this._tileProvider.tileHeight;
333
417
  },
334
418
  },
335
419
 
@@ -341,7 +425,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
341
425
  */
342
426
  maximumLevel: {
343
427
  get: function () {
344
- return this._maximumLevel;
428
+ return this._tileProvider.maximumLevel;
345
429
  },
346
430
  },
347
431
 
@@ -353,7 +437,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
353
437
  */
354
438
  minimumLevel: {
355
439
  get: function () {
356
- return this._minimumLevel;
440
+ return this._tileProvider.minimumLevel;
357
441
  },
358
442
  },
359
443
 
@@ -365,7 +449,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
365
449
  */
366
450
  tilingScheme: {
367
451
  get: function () {
368
- return this._tilingScheme;
452
+ return this._tileProvider.tilingScheme;
369
453
  },
370
454
  },
371
455
 
@@ -377,7 +461,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
377
461
  */
378
462
  rectangle: {
379
463
  get: function () {
380
- return this._rectangle;
464
+ return this._tileProvider.rectangle;
381
465
  },
382
466
  },
383
467
 
@@ -391,7 +475,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
391
475
  */
392
476
  tileDiscardPolicy: {
393
477
  get: function () {
394
- return this._tileDiscardPolicy;
478
+ return this._tileProvider.tileDiscardPolicy;
395
479
  },
396
480
  },
397
481
 
@@ -405,7 +489,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
405
489
  */
406
490
  errorEvent: {
407
491
  get: function () {
408
- return this._errorEvent;
492
+ return this._tileProvider.errorEvent;
409
493
  },
410
494
  },
411
495
 
@@ -430,7 +514,7 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
430
514
  */
431
515
  credit: {
432
516
  get: function () {
433
- return this._credit;
517
+ return this._tileProvider.credit;
434
518
  },
435
519
  },
436
520
 
@@ -449,6 +533,27 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
449
533
  return true;
450
534
  },
451
535
  },
536
+
537
+ /**
538
+ * Gets or sets a value indicating whether feature picking is enabled. If true, {@link WebMapTileServiceImageryProvider#pickFeatures} will
539
+ * invoke the <code>GetFeatureInfo</code> service on the WMTS server and attempt to interpret the features included in the response. If false,
540
+ * {@link WebMapTileServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable
541
+ * features) without communicating with the server. Set this property to false if you know your data
542
+ * source does not support picking features or if you don't want this provider's features to be pickable.
543
+ * Defaults to true for KVP encoding. For RESTful encoding, defaults to true only when
544
+ * {@link WebMapTileServiceImageryProvider.ConstructorOptions#getFeatureInfoUrl} is specified, and false otherwise.
545
+ * @memberof WebMapTileServiceImageryProvider.prototype
546
+ * @type {boolean}
547
+ */
548
+ enablePickFeatures: {
549
+ get: function () {
550
+ return this._tileProvider.enablePickFeatures;
551
+ },
552
+ set: function (enablePickFeatures) {
553
+ this._tileProvider.enablePickFeatures = enablePickFeatures;
554
+ },
555
+ },
556
+
452
557
  /**
453
558
  * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.
454
559
  * @memberof WebMapTileServiceImageryProvider.prototype
@@ -495,6 +600,18 @@ Object.defineProperties(WebMapTileServiceImageryProvider.prototype, {
495
600
  }
496
601
  },
497
602
  },
603
+
604
+ /**
605
+ * Gets the getFeatureInfo URL of the WMTS server.
606
+ * @memberof WebMapTileServiceImageryProvider.prototype
607
+ * @type {Resource|string}
608
+ * @readonly
609
+ */
610
+ getFeatureInfoUrl: {
611
+ get: function () {
612
+ return this._getFeatureInfoUrl;
613
+ },
614
+ },
498
615
  });
499
616
 
500
617
  /**
@@ -510,7 +627,7 @@ WebMapTileServiceImageryProvider.prototype.getTileCredits = function (
510
627
  y,
511
628
  level,
512
629
  ) {
513
- return undefined;
630
+ return this._tileProvider.getTileCredits(x, y, level);
514
631
  };
515
632
 
516
633
  /**
@@ -553,15 +670,17 @@ WebMapTileServiceImageryProvider.prototype.requestImage = function (
553
670
  };
554
671
 
555
672
  /**
556
- * Picking features is not currently supported by this imagery provider, so this function simply returns
557
- * undefined.
673
+ * Asynchronously determines what features, if any, are located at a given longitude and latitude within
674
+ * a tile.
558
675
  *
559
676
  * @param {number} x The tile X coordinate.
560
677
  * @param {number} y The tile Y coordinate.
561
678
  * @param {number} level The tile level.
562
679
  * @param {number} longitude The longitude at which to pick features.
563
680
  * @param {number} latitude The latitude at which to pick features.
564
- * @return {undefined} Undefined since picking is not supported.
681
+ * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous
682
+ * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}
683
+ * instances. The array may be empty if no features are found at the given location.
565
684
  */
566
685
  WebMapTileServiceImageryProvider.prototype.pickFeatures = function (
567
686
  x,
@@ -570,6 +689,122 @@ WebMapTileServiceImageryProvider.prototype.pickFeatures = function (
570
689
  longitude,
571
690
  latitude,
572
691
  ) {
573
- return undefined;
692
+ const timeDynamicImagery = this._timeDynamicImagery;
693
+ const currentInterval = defined(timeDynamicImagery)
694
+ ? timeDynamicImagery.currentInterval
695
+ : undefined;
696
+
697
+ return pickFeatures(this, x, y, level, longitude, latitude, currentInterval);
574
698
  };
699
+
700
+ /**
701
+ * The default parameters to include in the WMTS URL to obtain images. The values are as follows:
702
+ * service=WMTS
703
+ * version=1.0.0
704
+ * request=GetTile
705
+ *
706
+ * @constant
707
+ * @type {object}
708
+ */
709
+ WebMapTileServiceImageryProvider.DefaultParameters = Object.freeze({
710
+ service: "WMTS",
711
+ version: "1.0.0",
712
+ request: "GetTile",
713
+ });
714
+
715
+ /**
716
+ * The default parameters to include in the WMTS URL to get feature information. The values are as follows:
717
+ * service=WMTS
718
+ * version=1.0.0
719
+ * request=GetFeatureInfo
720
+ *
721
+ * @constant
722
+ * @type {object}
723
+ */
724
+ WebMapTileServiceImageryProvider.GetFeatureInfoDefaultParameters =
725
+ Object.freeze({
726
+ service: "WMTS",
727
+ version: "1.0.0",
728
+ request: "GetFeatureInfo",
729
+ });
730
+
731
+ WebMapTileServiceImageryProvider.DefaultGetFeatureInfoFormats = Object.freeze([
732
+ Object.freeze(new GetFeatureInfoFormat("json", "application/json")),
733
+ Object.freeze(new GetFeatureInfoFormat("xml", "text/xml")),
734
+ Object.freeze(new GetFeatureInfoFormat("text", "text/html")),
735
+ ]);
736
+
737
+ function applyDimensions(imageryProvider, resource, interval) {
738
+ const staticDimensions = imageryProvider._dimensions;
739
+ const dynamicIntervalData = defined(interval) ? interval.data : undefined;
740
+
741
+ if (!imageryProvider._useKvp) {
742
+ if (defined(staticDimensions)) {
743
+ resource.setTemplateValues(staticDimensions);
744
+ }
745
+
746
+ if (defined(dynamicIntervalData)) {
747
+ resource.setTemplateValues(dynamicIntervalData);
748
+ }
749
+ } else {
750
+ // build KVP request
751
+ let query = {};
752
+
753
+ if (defined(staticDimensions)) {
754
+ query = combine(query, staticDimensions);
755
+ }
756
+
757
+ if (defined(dynamicIntervalData)) {
758
+ query = combine(query, dynamicIntervalData);
759
+ }
760
+
761
+ resource.setQueryParameters(query);
762
+ }
763
+ }
764
+
765
+ function createCustomTags(imageryProvider) {
766
+ function getTileMatrix(level) {
767
+ const labels = imageryProvider._tileMatrixLabels;
768
+ return defined(labels) ? labels[level] : level.toString();
769
+ }
770
+
771
+ // We provide both uppercase and lowercase to make it more convenient for users when creating URL templates.
772
+ return {
773
+ TileMatrix: function (provider, x, y, level) {
774
+ return getTileMatrix(level);
775
+ },
776
+ tilematrix: function (provider, x, y, level) {
777
+ return getTileMatrix(level);
778
+ },
779
+ TileRow: function (provider, x, y) {
780
+ return y.toString();
781
+ },
782
+ tilerow: function (provider, x, y) {
783
+ return y.toString();
784
+ },
785
+ TileCol: function (provider, x, y) {
786
+ return x.toString();
787
+ },
788
+ tilecol: function (provider, x, y) {
789
+ return x.toString();
790
+ },
791
+ TileMatrixSet: function (provider) {
792
+ return imageryProvider._tilematrixset;
793
+ },
794
+ tilematrixset: function (provider) {
795
+ return imageryProvider._tilematrixset;
796
+ },
797
+ };
798
+ }
799
+
800
+ function objectToLowercase(obj) {
801
+ const result = {};
802
+ for (const key in obj) {
803
+ if (obj.hasOwnProperty(key)) {
804
+ result[key.toLowerCase()] = obj[key];
805
+ }
806
+ }
807
+ return result;
808
+ }
809
+
575
810
  export default WebMapTileServiceImageryProvider;