@itwin/core-frontend 3.6.0-dev.8 → 4.0.0-dev.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 (516) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuDraw.js +1 -1
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.d.ts +23 -3
  6. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseConnection.js +11 -3
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/CheckpointConnection.js +1 -1
  10. package/lib/cjs/CheckpointConnection.js.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts +2 -2
  12. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  13. package/lib/cjs/DisplayStyleState.js +12 -4
  14. package/lib/cjs/DisplayStyleState.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +3 -3
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +2 -2
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +4 -6
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +6 -7
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +1 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +1 -1
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/NativeApp.d.ts +8 -1
  28. package/lib/cjs/NativeApp.d.ts.map +1 -1
  29. package/lib/cjs/NativeApp.js +10 -6
  30. package/lib/cjs/NativeApp.js.map +1 -1
  31. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  32. package/lib/cjs/NoRenderApp.js +3 -0
  33. package/lib/cjs/NoRenderApp.js.map +1 -1
  34. package/lib/cjs/SpatialViewState.d.ts +4 -1
  35. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  36. package/lib/cjs/SpatialViewState.js +19 -5
  37. package/lib/cjs/SpatialViewState.js.map +1 -1
  38. package/lib/cjs/Tiles.d.ts +4 -0
  39. package/lib/cjs/Tiles.d.ts.map +1 -1
  40. package/lib/cjs/Tiles.js +11 -0
  41. package/lib/cjs/Tiles.js.map +1 -1
  42. package/lib/cjs/ViewContext.js +1 -1
  43. package/lib/cjs/ViewContext.js.map +1 -1
  44. package/lib/cjs/ViewManager.d.ts.map +1 -1
  45. package/lib/cjs/ViewManager.js +2 -3
  46. package/lib/cjs/ViewManager.js.map +1 -1
  47. package/lib/cjs/ViewState.d.ts +4 -5
  48. package/lib/cjs/ViewState.d.ts.map +1 -1
  49. package/lib/cjs/ViewState.js +0 -1
  50. package/lib/cjs/ViewState.js.map +1 -1
  51. package/lib/cjs/Viewport.d.ts +53 -4
  52. package/lib/cjs/Viewport.d.ts.map +1 -1
  53. package/lib/cjs/Viewport.js +82 -34
  54. package/lib/cjs/Viewport.js.map +1 -1
  55. package/lib/cjs/extension/ExtensionImpl.js +2 -2
  56. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  57. package/lib/cjs/extension/ExtensionRuntime.js +3 -0
  58. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  59. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  60. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  61. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  62. package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
  63. package/lib/cjs/render/GraphicBuilder.js +1 -1
  64. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  65. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  66. package/lib/cjs/render/MockRender.js +3 -0
  67. package/lib/cjs/render/MockRender.js.map +1 -1
  68. package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
  69. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  70. package/lib/cjs/render/RealityMeshParams.js +9 -5
  71. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  72. package/lib/cjs/render/RenderMaterial.d.ts +1 -1
  73. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  74. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  75. package/lib/cjs/render/RenderSystem.d.ts +4 -4
  76. package/lib/cjs/render/RenderSystem.js +4 -4
  77. package/lib/cjs/render/RenderSystem.js.map +1 -1
  78. package/lib/cjs/render/RenderTarget.d.ts +1 -1
  79. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderTarget.js +1 -1
  81. package/lib/cjs/render/RenderTarget.js.map +1 -1
  82. package/lib/cjs/render/VisibleFeature.d.ts +5 -5
  83. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  84. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  85. package/lib/cjs/render/primitives/DisplayParams.js +2 -1
  86. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  87. package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -3
  88. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  89. package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
  90. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  91. package/lib/cjs/render/webgl/BranchState.js +5 -0
  92. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  93. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  94. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  95. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  96. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  97. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  98. package/lib/cjs/render/webgl/DrawCommand.js +6 -4
  99. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  100. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  101. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  102. package/lib/cjs/render/webgl/EDL.js +264 -0
  103. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  104. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  105. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  106. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  107. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  108. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  109. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  110. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  111. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  112. package/lib/cjs/render/webgl/Layer.js +2 -2
  113. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  114. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  115. package/lib/cjs/render/webgl/PlanarClassifier.js +9 -8
  116. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  117. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  118. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  119. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  120. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/PointCloud.js +2 -0
  122. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  123. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  124. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  126. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  127. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  128. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  129. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  130. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  131. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
  132. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/RenderCommands.js +46 -38
  134. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  135. package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
  136. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/RenderFlags.js +8 -6
  138. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  139. package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -1
  140. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  141. package/lib/cjs/render/webgl/SceneCompositor.js +195 -76
  142. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  143. package/lib/cjs/render/webgl/SolarShadowMap.js +3 -3
  144. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  145. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  146. package/lib/cjs/render/webgl/Target.js +7 -7
  147. package/lib/cjs/render/webgl/Target.js.map +1 -1
  148. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  149. package/lib/cjs/render/webgl/Technique.js +18 -3
  150. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  151. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  152. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  153. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  154. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  155. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  156. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/UniformHandle.js +1 -2
  158. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  159. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  160. package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
  161. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  162. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  163. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  164. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  165. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Surface.js +1 -1
  167. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  168. package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
  169. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  170. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  171. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  172. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  173. package/lib/cjs/tile/GltfReader.js +4 -2
  174. package/lib/cjs/tile/GltfReader.js.map +1 -1
  175. package/lib/cjs/tile/IModelTile.js +1 -1
  176. package/lib/cjs/tile/IModelTile.js.map +1 -1
  177. package/lib/cjs/tile/ImdlReader.d.ts +6 -0
  178. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  179. package/lib/cjs/tile/ImdlReader.js +20 -7
  180. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  181. package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
  182. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  183. package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
  184. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  185. package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
  186. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  187. package/lib/cjs/tile/RealityModelTileTree.js +61 -53
  188. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  189. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  190. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  191. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  192. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  193. package/lib/cjs/tile/RealityTileTree.js +9 -4
  194. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  195. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  196. package/lib/cjs/tile/TileAdmin.js +15 -7
  197. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  198. package/lib/cjs/tile/TileDrawArgs.js +1 -1
  199. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  200. package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
  201. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  202. package/lib/cjs/tile/TileTreeReference.js +3 -0
  203. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  204. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
  205. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  206. package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
  207. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  208. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  209. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  210. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  211. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  212. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  213. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  214. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  215. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  216. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  217. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  218. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  219. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  220. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  221. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  222. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  223. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  224. package/lib/cjs/tile/map/ImageryTileTree.d.ts +26 -1
  225. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  226. package/lib/cjs/tile/map/ImageryTileTree.js +54 -4
  227. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  228. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
  230. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  231. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
  232. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
  234. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  235. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
  236. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  237. package/lib/cjs/tile/map/MapLayerSources.js +2 -0
  238. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  239. package/lib/cjs/tile/map/MapTile.d.ts +5 -0
  240. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  241. package/lib/cjs/tile/map/MapTile.js +33 -14
  242. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  243. package/lib/cjs/tile/map/MapTileTree.d.ts +42 -3
  244. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  245. package/lib/cjs/tile/map/MapTileTree.js +126 -9
  246. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  247. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  248. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  249. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
  250. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  251. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  252. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  253. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  254. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  255. package/lib/cjs/tools/ClipViewTool.js +2 -2
  256. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  257. package/lib/cjs/tools/MeasureTool.js +2 -2
  258. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  259. package/lib/esm/AccuDraw.js +1 -1
  260. package/lib/esm/AccuDraw.js.map +1 -1
  261. package/lib/esm/BriefcaseConnection.d.ts +23 -3
  262. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  263. package/lib/esm/BriefcaseConnection.js +11 -3
  264. package/lib/esm/BriefcaseConnection.js.map +1 -1
  265. package/lib/esm/CheckpointConnection.js +1 -1
  266. package/lib/esm/CheckpointConnection.js.map +1 -1
  267. package/lib/esm/DisplayStyleState.d.ts +2 -2
  268. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  269. package/lib/esm/DisplayStyleState.js +12 -4
  270. package/lib/esm/DisplayStyleState.js.map +1 -1
  271. package/lib/esm/IModelApp.d.ts +3 -3
  272. package/lib/esm/IModelApp.d.ts.map +1 -1
  273. package/lib/esm/IModelApp.js +2 -2
  274. package/lib/esm/IModelApp.js.map +1 -1
  275. package/lib/esm/IModelConnection.d.ts +4 -6
  276. package/lib/esm/IModelConnection.d.ts.map +1 -1
  277. package/lib/esm/IModelConnection.js +6 -7
  278. package/lib/esm/IModelConnection.js.map +1 -1
  279. package/lib/esm/IpcApp.d.ts +1 -1
  280. package/lib/esm/IpcApp.d.ts.map +1 -1
  281. package/lib/esm/IpcApp.js +1 -1
  282. package/lib/esm/IpcApp.js.map +1 -1
  283. package/lib/esm/NativeApp.d.ts +8 -1
  284. package/lib/esm/NativeApp.d.ts.map +1 -1
  285. package/lib/esm/NativeApp.js +10 -6
  286. package/lib/esm/NativeApp.js.map +1 -1
  287. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  288. package/lib/esm/NoRenderApp.js +3 -0
  289. package/lib/esm/NoRenderApp.js.map +1 -1
  290. package/lib/esm/SpatialViewState.d.ts +4 -1
  291. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  292. package/lib/esm/SpatialViewState.js +19 -5
  293. package/lib/esm/SpatialViewState.js.map +1 -1
  294. package/lib/esm/Tiles.d.ts +4 -0
  295. package/lib/esm/Tiles.d.ts.map +1 -1
  296. package/lib/esm/Tiles.js +11 -0
  297. package/lib/esm/Tiles.js.map +1 -1
  298. package/lib/esm/ViewContext.js +1 -1
  299. package/lib/esm/ViewContext.js.map +1 -1
  300. package/lib/esm/ViewManager.d.ts.map +1 -1
  301. package/lib/esm/ViewManager.js +2 -3
  302. package/lib/esm/ViewManager.js.map +1 -1
  303. package/lib/esm/ViewState.d.ts +4 -5
  304. package/lib/esm/ViewState.d.ts.map +1 -1
  305. package/lib/esm/ViewState.js +0 -1
  306. package/lib/esm/ViewState.js.map +1 -1
  307. package/lib/esm/Viewport.d.ts +53 -4
  308. package/lib/esm/Viewport.d.ts.map +1 -1
  309. package/lib/esm/Viewport.js +83 -35
  310. package/lib/esm/Viewport.js.map +1 -1
  311. package/lib/esm/extension/ExtensionImpl.js +2 -2
  312. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  313. package/lib/esm/extension/ExtensionRuntime.js +5 -2
  314. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  315. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  316. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  317. package/lib/esm/render/GraphicBranch.js.map +1 -1
  318. package/lib/esm/render/GraphicBuilder.d.ts +1 -1
  319. package/lib/esm/render/GraphicBuilder.js +1 -1
  320. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  321. package/lib/esm/render/MockRender.d.ts.map +1 -1
  322. package/lib/esm/render/MockRender.js +3 -0
  323. package/lib/esm/render/MockRender.js.map +1 -1
  324. package/lib/esm/render/RealityMeshParams.d.ts +3 -4
  325. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  326. package/lib/esm/render/RealityMeshParams.js +10 -6
  327. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  328. package/lib/esm/render/RenderMaterial.d.ts +1 -1
  329. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  330. package/lib/esm/render/RenderMaterial.js.map +1 -1
  331. package/lib/esm/render/RenderSystem.d.ts +4 -4
  332. package/lib/esm/render/RenderSystem.js +4 -4
  333. package/lib/esm/render/RenderSystem.js.map +1 -1
  334. package/lib/esm/render/RenderTarget.d.ts +1 -1
  335. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  336. package/lib/esm/render/RenderTarget.js +1 -1
  337. package/lib/esm/render/RenderTarget.js.map +1 -1
  338. package/lib/esm/render/VisibleFeature.d.ts +5 -5
  339. package/lib/esm/render/VisibleFeature.js.map +1 -1
  340. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  341. package/lib/esm/render/primitives/DisplayParams.js +2 -1
  342. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  343. package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -3
  344. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  345. package/lib/esm/render/webgl/BranchState.d.ts +3 -0
  346. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  347. package/lib/esm/render/webgl/BranchState.js +5 -0
  348. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  349. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  350. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  352. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  353. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  354. package/lib/esm/render/webgl/DrawCommand.js +6 -4
  355. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  356. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  357. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  358. package/lib/esm/render/webgl/EDL.js +260 -0
  359. package/lib/esm/render/webgl/EDL.js.map +1 -0
  360. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  361. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  362. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  364. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  365. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  366. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  368. package/lib/esm/render/webgl/Layer.js +2 -2
  369. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  370. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/PlanarClassifier.js +9 -8
  372. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  373. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  374. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  375. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  376. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/PointCloud.js +2 -0
  378. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  379. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  380. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  382. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  383. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  384. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  385. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  386. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  387. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
  388. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  389. package/lib/esm/render/webgl/RenderCommands.js +46 -38
  390. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  391. package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
  392. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  393. package/lib/esm/render/webgl/RenderFlags.js +8 -6
  394. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  395. package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -1
  396. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  397. package/lib/esm/render/webgl/SceneCompositor.js +194 -77
  398. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  399. package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
  400. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  401. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  402. package/lib/esm/render/webgl/Target.js +7 -7
  403. package/lib/esm/render/webgl/Target.js.map +1 -1
  404. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/Technique.js +18 -3
  406. package/lib/esm/render/webgl/Technique.js.map +1 -1
  407. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  408. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  409. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  410. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  411. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  412. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  413. package/lib/esm/render/webgl/UniformHandle.js +1 -2
  414. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  415. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  416. package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
  417. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  418. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  419. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  420. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  421. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  422. package/lib/esm/render/webgl/glsl/Surface.js +1 -1
  423. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  424. package/lib/esm/tile/BatchedTileIdMap.js +1 -1
  425. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  426. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  427. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  428. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  429. package/lib/esm/tile/GltfReader.js +4 -2
  430. package/lib/esm/tile/GltfReader.js.map +1 -1
  431. package/lib/esm/tile/IModelTile.js +1 -1
  432. package/lib/esm/tile/IModelTile.js.map +1 -1
  433. package/lib/esm/tile/ImdlReader.d.ts +6 -0
  434. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  435. package/lib/esm/tile/ImdlReader.js +20 -7
  436. package/lib/esm/tile/ImdlReader.js.map +1 -1
  437. package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
  438. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  439. package/lib/esm/tile/OrbitGtTileTree.js +30 -12
  440. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  441. package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
  442. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  443. package/lib/esm/tile/RealityModelTileTree.js +62 -54
  444. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  445. package/lib/esm/tile/RealityTileLoader.js +2 -2
  446. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  447. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  448. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  449. package/lib/esm/tile/RealityTileTree.js +9 -4
  450. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  451. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  452. package/lib/esm/tile/TileAdmin.js +15 -7
  453. package/lib/esm/tile/TileAdmin.js.map +1 -1
  454. package/lib/esm/tile/TileDrawArgs.js +1 -1
  455. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  456. package/lib/esm/tile/TileTreeReference.d.ts +3 -0
  457. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  458. package/lib/esm/tile/TileTreeReference.js +3 -0
  459. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  460. package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
  461. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  462. package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
  463. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  464. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  465. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  466. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  467. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  468. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  469. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  470. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  471. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  472. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  473. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  474. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  475. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  476. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  477. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  478. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  479. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  480. package/lib/esm/tile/map/ImageryTileTree.d.ts +26 -1
  481. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  482. package/lib/esm/tile/map/ImageryTileTree.js +53 -4
  483. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  484. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  485. package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
  486. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  487. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
  488. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  489. package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
  490. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  491. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
  492. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  493. package/lib/esm/tile/map/MapLayerSources.js +2 -0
  494. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  495. package/lib/esm/tile/map/MapTile.d.ts +5 -0
  496. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  497. package/lib/esm/tile/map/MapTile.js +33 -14
  498. package/lib/esm/tile/map/MapTile.js.map +1 -1
  499. package/lib/esm/tile/map/MapTileTree.d.ts +42 -3
  500. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  501. package/lib/esm/tile/map/MapTileTree.js +126 -9
  502. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  503. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  504. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  505. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
  506. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  507. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  508. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  509. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  510. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  511. package/lib/esm/tools/ClipViewTool.js +2 -2
  512. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  513. package/lib/esm/tools/MeasureTool.js +2 -2
  514. package/lib/esm/tools/MeasureTool.js.map +1 -1
  515. package/lib/public/locales/en/iModelJs.json +2 -2
  516. package/package.json +20 -21
@@ -1 +1 @@
1
- {"version":3,"file":"CesiumTerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/CesiumTerrainProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { assert, BeDuration, BeTimePoint, ByteStream, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { nextPoint3d64FromByteStream, OctEncodedNormal, QPoint2d } from \"@itwin/core-common\";\r\nimport { MessageSeverity } from \"@itwin/appui-abstract\";\r\nimport { request, RequestOptions } from \"../../request/Request\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RealityMeshParams, RealityMeshParamsBuilder } from \"../../render/RealityMeshParams\";\r\nimport {\r\n GeographicTilingScheme, MapTile, MapTilingScheme, QuadId, ReadMeshArgs, RequestMeshDataArgs, TerrainMeshProvider,\r\n TerrainMeshProviderOptions, Tile, TileAvailability,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nenum QuantizedMeshExtensionIds {\r\n OctEncodedNormals = 1,\r\n WaterMask = 2,\r\n Metadata = 4,\r\n}\r\n\r\n/** Return the URL for a Cesium ION asset from its asset ID and request Key.\r\n * @public\r\n */\r\nexport function getCesiumAssetUrl(osmAssetId: number, requestKey: string): string {\r\n return `$CesiumIonAsset=${osmAssetId}:${requestKey}`;\r\n}\r\n/** @internal */\r\nexport function getCesiumOSMBuildingsUrl(): string | undefined {\r\n const key = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === key)\r\n return undefined;\r\n\r\n const osmBuildingAssetId = 96188;\r\n return getCesiumAssetUrl(osmBuildingAssetId, key);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumAccessTokenAndEndpointUrl(assetId = 1, requestKey?: string): Promise<{ token?: string, url?: string }> {\r\n\r\n if (undefined === requestKey) {\r\n requestKey = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === requestKey)\r\n return {};\r\n }\r\n\r\n const requestTemplate = `https://api.cesium.com/v1/assets/${assetId}/endpoint?access_token={CesiumRequestToken}`;\r\n const apiUrl: string = requestTemplate.replace(\"{CesiumRequestToken}\", requestKey);\r\n const apiRequestOptions: RequestOptions = { method: \"GET\", responseType: \"json\" };\r\n\r\n try {\r\n const apiResponse = await request(apiUrl, apiRequestOptions);\r\n if (undefined === apiResponse || undefined === apiResponse.body || undefined === apiResponse.body.url) {\r\n assert(false);\r\n return {};\r\n }\r\n return { token: apiResponse.body.accessToken, url: apiResponse.body.url };\r\n } catch (error) {\r\n assert(false);\r\n return {};\r\n }\r\n}\r\n\r\nlet notifiedTerrainError = false;\r\n\r\n// Notify - once per session - of failure to obtain Cesium terrain provider.\r\nfunction notifyTerrainError(detailedDescription?: string): void {\r\n if (notifiedTerrainError)\r\n return;\r\n\r\n notifiedTerrainError = true;\r\n IModelApp.notifications.displayMessage(MessageSeverity.Information, IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.CannotObtainTerrain`), detailedDescription);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumTerrainProvider(opts: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined> {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || !accessTokenAndEndpointUrl.url) {\r\n notifyTerrainError(IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.MissingCesiumToken`));\r\n return undefined;\r\n }\r\n\r\n let layers;\r\n try {\r\n const layerRequestOptions: RequestOptions = { method: \"GET\", responseType: \"json\", headers: { authorization: `Bearer ${accessTokenAndEndpointUrl.token}` } };\r\n const layerUrl = `${accessTokenAndEndpointUrl.url}layer.json`;\r\n const layerResponse = await request(layerUrl, layerRequestOptions);\r\n if (undefined === layerResponse) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n layers = layerResponse.body;\r\n } catch (error) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n if (undefined === layers.tiles || undefined === layers.version) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n const tilingScheme = new GeographicTilingScheme();\r\n let tileAvailability;\r\n if (undefined !== layers.available) {\r\n const availableTiles = layers.available;\r\n tileAvailability = new TileAvailability(tilingScheme, availableTiles.length);\r\n for (let level = 0; level < layers.available.length; level++) {\r\n const rangesAtLevel = availableTiles[level];\r\n for (const range of rangesAtLevel) {\r\n tileAvailability.addAvailableTileRange(level, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n\r\n let tileUrlTemplate = accessTokenAndEndpointUrl.url + layers.tiles[0].replace(\"{version}\", layers.version);\r\n if (opts.wantNormals)\r\n tileUrlTemplate = tileUrlTemplate.replace(\"?\", \"?extensions=octvertexnormals-watermask-metadata&\");\r\n\r\n const maxDepth = JsonUtils.asInt(layers.maxzoom, 19);\r\n\r\n // TBD -- When we have an API extract the heights for the project from the terrain tiles - for use temporary Bing elevation.\r\n return new CesiumTerrainProvider(opts, accessTokenAndEndpointUrl.token, tileUrlTemplate, maxDepth, tilingScheme, tileAvailability, layers.metadataAvailability);\r\n}\r\n\r\nfunction zigZagDecode(value: number) {\r\n return (value >> 1) ^ (-(value & 1));\r\n}\r\n\r\n/**\r\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\r\n *\r\n * @see {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh|quantized-mesh-1.0 terrain format}\r\n */\r\nfunction zigZagDeltaDecode(uBuffer: Uint16Array, vBuffer: Uint16Array, heightBuffer: Uint16Array) {\r\n const count = uBuffer.length;\r\n let u = 0;\r\n let v = 0;\r\n let height = 0;\r\n\r\n for (let i = 0; i < count; ++i) {\r\n u += zigZagDecode(uBuffer[i]);\r\n v += zigZagDecode(vBuffer[i]);\r\n\r\n uBuffer[i] = u;\r\n vBuffer[i] = v;\r\n\r\n height += zigZagDecode(heightBuffer[i]);\r\n heightBuffer[i] = height;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass CesiumTerrainProvider extends TerrainMeshProvider {\r\n private _accessToken: string;\r\n private readonly _tileUrlTemplate: string;\r\n private readonly _maxDepth: number;\r\n private readonly _wantSkirts: boolean;\r\n private readonly _tilingScheme: MapTilingScheme;\r\n private readonly _tileAvailability?: TileAvailability;\r\n private readonly _metaDataAvailableLevel?: number;\r\n private readonly _exaggeration: number;\r\n\r\n private static _scratchQPoint2d = QPoint2d.fromScalars(0, 0);\r\n private static _scratchPoint2d = Point2d.createZero();\r\n private static _scratchPoint = Point3d.createZero();\r\n private static _scratchNormal = Vector3d.createZero();\r\n private static _scratchHeightRange = Range1d.createNull();\r\n private static _tokenTimeoutInterval = BeDuration.fromSeconds(60 * 30); // Request a new access token every 30 minutes...\r\n private _tokenTimeOut: BeTimePoint;\r\n\r\n public override forceTileLoad(tile: Tile): boolean {\r\n // Force loading of the metadata availability tiles as these are required for determining the availability of descendants.\r\n const mapTile = tile as MapTile;\r\n return undefined !== this._metaDataAvailableLevel && mapTile.quadId.level === this._metaDataAvailableLevel && !mapTile.everLoaded;\r\n }\r\n\r\n constructor(opts: TerrainMeshProviderOptions, accessToken: string, tileUrlTemplate: string, maxDepth: number, tilingScheme: MapTilingScheme,\r\n tileAvailability: TileAvailability | undefined, metaDataAvailableLevel: number | undefined) {\r\n super();\r\n this._wantSkirts = opts.wantSkirts;\r\n this._exaggeration = opts.exaggeration;\r\n\r\n this._accessToken = accessToken;\r\n this._tileUrlTemplate = tileUrlTemplate;\r\n this._maxDepth = maxDepth;\r\n this._tilingScheme = tilingScheme;\r\n this._tileAvailability = tileAvailability;\r\n this._metaDataAvailableLevel = metaDataAvailableLevel;\r\n\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (cards.dataset.cesiumIonLogoCard)\r\n return;\r\n\r\n cards.dataset.cesiumIonLogoCard = \"true\";\r\n const card = IModelApp.makeLogoCard({ iconSrc: `${IModelApp.publicPath}images/cesium-ion.svg`, heading: \"Cesium Ion\", notice: IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.CesiumWorldTerrainAttribution\") });\r\n cards.appendChild(card);\r\n }\r\n\r\n public get maxDepth(): number { return this._maxDepth; }\r\n public get tilingScheme(): MapTilingScheme { return this._tilingScheme; }\r\n\r\n public override isTileAvailable(quadId: QuadId) {\r\n if (quadId.level > this.maxDepth)\r\n return false;\r\n\r\n return this._tileAvailability ? this._tileAvailability.isTileAvailable(quadId.level, quadId.column, quadId.row) : true;\r\n }\r\n\r\n public override async requestMeshData(args: RequestMeshDataArgs): Promise<Uint8Array | undefined> {\r\n const tile = args.tile;\r\n const quadId = tile.quadId;\r\n const tileUrl = this.constructUrl(quadId.row, quadId.column, quadId.level);\r\n const requestOptions: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"arraybuffer\",\r\n headers: { authorization: `Bearer ${this._accessToken}` },\r\n accept: \"application/vnd.quantized-mesh;\" /* extensions=octvertexnormals, */ + \"application/octet-stream;q=0.9,*/*;q=0.01\",\r\n };\r\n\r\n try {\r\n const response = await request(tileUrl, requestOptions);\r\n return response.status === 200 ? new Uint8Array(response.body) : undefined;\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined> {\r\n // ###TODO why does he update the access token when reading the mesh instead of when requesting it?\r\n // This function only returns undefined if it fails to acquire token - but it doesn't need the token...\r\n if (BeTimePoint.now().milliseconds > this._tokenTimeOut.milliseconds) {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || args.isCanceled())\r\n return undefined;\r\n\r\n this._accessToken = accessTokenAndEndpointUrl.token;\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n const { data, tile } = args;\r\n assert(data instanceof Uint8Array);\r\n assert(tile instanceof MapTile);\r\n\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const center = nextPoint3d64FromByteStream(streamBuffer);\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n const skirtHeight = this.getLevelMaximumGeometricError(quadId.level + 1) * 10.0; // Add 1 to level to restore height calculation to before the quadId level was from root. (4326 unification)\r\n const minHeight = this._exaggeration * streamBuffer.nextFloat32;\r\n const maxHeight = this._exaggeration * streamBuffer.nextFloat32;\r\n const boundCenter = nextPoint3d64FromByteStream(streamBuffer);\r\n const boundRadius = streamBuffer.nextFloat64;\r\n const horizonOcclusion = nextPoint3d64FromByteStream(streamBuffer);\r\n const terrainTile = tile;\r\n\r\n terrainTile.adjustHeights(minHeight, maxHeight);\r\n\r\n if (undefined === center || undefined === boundCenter || undefined === boundRadius || undefined === horizonOcclusion) { }\r\n const pointCount = streamBuffer.nextUint32;\r\n const encodedVertexBuffer = new Uint16Array(blob.buffer, streamBuffer.curPos, pointCount * 3);\r\n streamBuffer.advance(pointCount * 6);\r\n\r\n const uBuffer = encodedVertexBuffer.subarray(0, pointCount);\r\n const vBuffer = encodedVertexBuffer.subarray(pointCount, 2 * pointCount);\r\n const heightBuffer = encodedVertexBuffer.subarray(pointCount * 2, 3 * pointCount);\r\n\r\n zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n // ###TODO: This alleges to handle 32-bit indices, but RealityMeshParams uses a Uint16Array to store indices...\r\n const typedArray = pointCount > 0xffff ? Uint32Array : Uint16Array;\r\n const bytesPerIndex = typedArray.BYTES_PER_ELEMENT;\r\n const triangleElements = 3;\r\n\r\n // skip over any additional padding that was added for 2/4 byte alignment\r\n if (streamBuffer.curPos % bytesPerIndex !== 0)\r\n streamBuffer.advance(bytesPerIndex - (streamBuffer.curPos % bytesPerIndex));\r\n\r\n const triangleCount = streamBuffer.nextUint32;\r\n const indexCount = triangleCount * triangleElements;\r\n\r\n const getIndexArray = (numIndices: number) => {\r\n const indexArray = new typedArray(streamBuffer.arrayBuffer, streamBuffer.curPos, numIndices);\r\n streamBuffer.advance(numIndices * bytesPerIndex);\r\n return indexArray;\r\n };\r\n\r\n const indices = getIndexArray(indexCount);\r\n\r\n // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\r\n // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\r\n // Copyright 2012 Google Inc., Apache 2.0 license.\r\n let highest = 0;\r\n const length = indices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const code = indices[i];\r\n indices[i] = highest - code;\r\n if (code === 0) {\r\n ++highest;\r\n }\r\n }\r\n\r\n CesiumTerrainProvider._scratchHeightRange.low = minHeight - skirtHeight;\r\n CesiumTerrainProvider._scratchHeightRange.high = maxHeight;\r\n const projection = terrainTile.getProjection(CesiumTerrainProvider._scratchHeightRange);\r\n const uvScale = 1.0 / 32767.0;\r\n const heightScale = uvScale * (maxHeight - minHeight);\r\n\r\n const westCount = streamBuffer.nextUint32,\r\n westIndices = getIndexArray(westCount),\r\n southCount = streamBuffer.nextUint32,\r\n southIndices = getIndexArray(southCount),\r\n eastCount = streamBuffer.nextUint32,\r\n eastIndices = getIndexArray(eastCount),\r\n northCount = streamBuffer.nextUint32,\r\n northIndices = getIndexArray(northCount);\r\n\r\n // Extensions...\r\n let encodedNormalsBuffer;\r\n while (streamBuffer.curPos < streamBuffer.length) {\r\n const extensionId = streamBuffer.nextUint8;\r\n const extensionLength = streamBuffer.nextUint32;\r\n switch (extensionId) {\r\n case QuantizedMeshExtensionIds.OctEncodedNormals:\r\n assert(pointCount * 2 === extensionLength);\r\n encodedNormalsBuffer = new Uint8Array(streamBuffer.arrayBuffer, streamBuffer.curPos, extensionLength);\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n\r\n case QuantizedMeshExtensionIds.Metadata:\r\n const stringLength = streamBuffer.nextUint32;\r\n if (stringLength > 0) {\r\n const strData = streamBuffer.nextBytes(stringLength);\r\n const str = utf8ToString(strData);\r\n if (undefined !== str) {\r\n const metaData = JSON.parse(str);\r\n if (undefined !== metaData.available && undefined !== this._tileAvailability) {\r\n const availableTiles = metaData.available;\r\n for (let offset = 0; offset < availableTiles.length; ++offset) {\r\n const availableLevel = tile.depth + offset; // Our depth is includes root (1 + cesium Depth)\r\n const rangesAtLevel = availableTiles[offset];\r\n\r\n for (const range of rangesAtLevel)\r\n this._tileAvailability.addAvailableTileRange(availableLevel, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n default:\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n }\r\n }\r\n\r\n let initialIndexCapacity = indexCount;\r\n let initialVertexCapacity = pointCount;\r\n if (this._wantSkirts) {\r\n initialIndexCapacity += 6 * (Math.max(0, northCount - 1) + Math.max(0, southCount - 1) + Math.max(0, eastCount - 1) + Math.max(0, westCount - 1));\r\n initialVertexCapacity += (northCount + southCount + eastCount + westCount);\r\n }\r\n\r\n const wantNormals = undefined !== encodedNormalsBuffer;\r\n const builder = new RealityMeshParamsBuilder({\r\n positionRange: projection.localRange,\r\n initialIndexCapacity,\r\n initialVertexCapacity,\r\n wantNormals,\r\n });\r\n\r\n for (let i = 0; i < indexCount; i += 3)\r\n builder.addTriangle(indices[i], indices[i + 1], indices[i + 2]);\r\n\r\n const position = new Point3d();\r\n const uv = new QPoint2d();\r\n const normal = new Vector3d();\r\n const worldToEcef = tile.iModel.getEcefTransform().matrix;\r\n for (let i = 0; i < pointCount; i++) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n projection.getPoint(uvScale * u, uvScale * v, minHeight + heightBuffer[i] * heightScale, position);\r\n uv.setFromScalars(u * 2, v * 2);\r\n let oen;\r\n if (encodedNormalsBuffer) {\r\n const normalIndex = i * 2;\r\n OctEncodedNormal.decodeValue(encodedNormalsBuffer[normalIndex + 1] << 8 | encodedNormalsBuffer[normalIndex], normal);\r\n worldToEcef.multiplyTransposeVector(normal, normal);\r\n oen = OctEncodedNormal.encode(normal);\r\n }\r\n\r\n builder.addVertex(position, uv, oen);\r\n }\r\n\r\n if (!this._wantSkirts)\r\n return builder.finish();\r\n\r\n westIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n eastIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n northIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n southIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n\r\n const generateSkirts = (indexes: Uint16Array | Uint32Array) => {\r\n const quv = new QPoint2d();\r\n const param = new Point2d();\r\n for (let i = 0; i < indexes.length; i++) {\r\n const index = indexes[i];\r\n const uvIndex = index * 2;\r\n const height = minHeight + heightBuffer[index] * heightScale;\r\n\r\n quv.setFromScalars(builder.uvs.buffer.at(uvIndex), builder.uvs.buffer.at(uvIndex + 1));\r\n builder.uvs.params.unquantize(quv.x, quv.y, param);\r\n\r\n const oen = wantNormals && builder.normals ? builder.normals.at(index) : undefined;\r\n builder.addVertex(projection.getPoint(param.x, param.y, height - skirtHeight), quv, oen);\r\n\r\n if (i !== 0) {\r\n const nextPointIndex = builder.positions.length;\r\n builder.addTriangle(index, indexes[i - 1], nextPointIndex - 2);\r\n builder.addTriangle(index, nextPointIndex - 2, nextPointIndex - 1);\r\n }\r\n }\r\n };\r\n\r\n generateSkirts(westIndices);\r\n generateSkirts(eastIndices);\r\n generateSkirts(southIndices);\r\n generateSkirts(northIndices);\r\n\r\n return builder.finish();\r\n }\r\n\r\n public constructUrl(row: number, column: number, zoomLevel: number): string {\r\n return this._tileUrlTemplate.replace(\"{z}\", zoomLevel.toString()).replace(\"{x}\", column.toString()).replace(\"{y}\", row.toString());\r\n }\r\n\r\n /**\r\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\r\n * ensure that adjacent heightmap vertices are separated by no more than\r\n * screen pixels and will probably go very slowly.\r\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\r\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\r\n * @type {Number}\r\n */\r\n public readonly heightmapTerrainQuality = 0.25;\r\n\r\n /**\r\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\r\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\r\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\r\n * @returns {Number} An estimated geometric error.\r\n */\r\n public getEstimatedLevelZeroGeometricErrorForAHeightmap(ellipsoidMaximumRadius = 6378137, tileImageWidth = 65, numberOfTilesAtLevelZero = 2) {\r\n return ellipsoidMaximumRadius * 2 * Math.PI * this.heightmapTerrainQuality / (tileImageWidth * numberOfTilesAtLevelZero);\r\n }\r\n\r\n public getLevelMaximumGeometricError(level: number) {\r\n return this.getEstimatedLevelZeroGeometricErrorForAHeightmap() / (1 << level);\r\n }\r\n\r\n public getHeightRange(parentRange: Range1d, quadId: QuadId): Range1d {\r\n const heightRange = quadId.level <= 6 ? ApproximateTerrainHeights.instance.getTileHeightRange(quadId) : undefined;\r\n\r\n return undefined === heightRange ? parentRange : heightRange;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CesiumTerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/CesiumTerrainProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { assert, BeDuration, BeTimePoint, ByteStream, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { nextPoint3d64FromByteStream, OctEncodedNormal, QPoint2d } from \"@itwin/core-common\";\r\nimport { MessageSeverity } from \"@itwin/appui-abstract\";\r\nimport { request, RequestOptions } from \"../../request/Request\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RealityMeshParams, RealityMeshParamsBuilder } from \"../../render/RealityMeshParams\";\r\nimport {\r\n GeographicTilingScheme, MapTile, MapTilingScheme, QuadId, ReadMeshArgs, RequestMeshDataArgs, TerrainMeshProvider,\r\n TerrainMeshProviderOptions, Tile, TileAvailability,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nenum QuantizedMeshExtensionIds {\r\n OctEncodedNormals = 1,\r\n WaterMask = 2,\r\n Metadata = 4,\r\n}\r\n\r\n/** Return the URL for a Cesium ION asset from its asset ID and request Key.\r\n * @public\r\n */\r\nexport function getCesiumAssetUrl(osmAssetId: number, requestKey: string): string {\r\n return `$CesiumIonAsset=${osmAssetId}:${requestKey}`;\r\n}\r\n/** @internal */\r\nexport function getCesiumOSMBuildingsUrl(): string | undefined {\r\n const key = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === key)\r\n return undefined;\r\n\r\n const osmBuildingAssetId = 96188;\r\n return getCesiumAssetUrl(osmBuildingAssetId, key);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumAccessTokenAndEndpointUrl(assetId = 1, requestKey?: string): Promise<{ token?: string, url?: string }> {\r\n\r\n if (undefined === requestKey) {\r\n requestKey = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === requestKey)\r\n return {};\r\n }\r\n\r\n const requestTemplate = `https://api.cesium.com/v1/assets/${assetId}/endpoint?access_token={CesiumRequestToken}`;\r\n const apiUrl: string = requestTemplate.replace(\"{CesiumRequestToken}\", requestKey);\r\n const apiRequestOptions: RequestOptions = { method: \"GET\", responseType: \"json\" };\r\n\r\n try {\r\n const apiResponse = await request(apiUrl, apiRequestOptions);\r\n if (undefined === apiResponse || undefined === apiResponse.body || undefined === apiResponse.body.url) {\r\n assert(false);\r\n return {};\r\n }\r\n return { token: apiResponse.body.accessToken, url: apiResponse.body.url };\r\n } catch (error) {\r\n assert(false);\r\n return {};\r\n }\r\n}\r\n\r\nlet notifiedTerrainError = false;\r\n\r\n// Notify - once per session - of failure to obtain Cesium terrain provider.\r\nfunction notifyTerrainError(detailedDescription?: string): void {\r\n if (notifiedTerrainError)\r\n return;\r\n\r\n notifiedTerrainError = true;\r\n IModelApp.notifications.displayMessage(MessageSeverity.Information, IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.CannotObtainTerrain`), detailedDescription);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumTerrainProvider(opts: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined> {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || !accessTokenAndEndpointUrl.url) {\r\n notifyTerrainError(IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.MissingCesiumToken`));\r\n return undefined;\r\n }\r\n\r\n let layers;\r\n try {\r\n const layerRequestOptions: RequestOptions = { method: \"GET\", responseType: \"json\", headers: { authorization: `Bearer ${accessTokenAndEndpointUrl.token}` } };\r\n const layerUrl = `${accessTokenAndEndpointUrl.url}layer.json`;\r\n const layerResponse = await request(layerUrl, layerRequestOptions);\r\n if (undefined === layerResponse) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n layers = layerResponse.body;\r\n } catch (error) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n if (undefined === layers.tiles || undefined === layers.version) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n const tilingScheme = new GeographicTilingScheme();\r\n let tileAvailability;\r\n if (undefined !== layers.available) {\r\n const availableTiles = layers.available;\r\n tileAvailability = new TileAvailability(tilingScheme, availableTiles.length);\r\n for (let level = 0; level < layers.available.length; level++) {\r\n const rangesAtLevel = availableTiles[level];\r\n for (const range of rangesAtLevel) {\r\n tileAvailability.addAvailableTileRange(level, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n\r\n let tileUrlTemplate = accessTokenAndEndpointUrl.url + layers.tiles[0].replace(\"{version}\", layers.version);\r\n if (opts.wantNormals)\r\n tileUrlTemplate = tileUrlTemplate.replace(\"?\", \"?extensions=octvertexnormals-watermask-metadata&\");\r\n\r\n const maxDepth = JsonUtils.asInt(layers.maxzoom, 19);\r\n\r\n // TBD -- When we have an API extract the heights for the project from the terrain tiles - for use temporary Bing elevation.\r\n return new CesiumTerrainProvider(opts, accessTokenAndEndpointUrl.token, tileUrlTemplate, maxDepth, tilingScheme, tileAvailability, layers.metadataAvailability);\r\n}\r\n\r\nfunction zigZagDecode(value: number) {\r\n return (value >> 1) ^ (-(value & 1));\r\n}\r\n\r\n/**\r\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\r\n *\r\n * @see {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh|quantized-mesh-1.0 terrain format}\r\n */\r\nfunction zigZagDeltaDecode(uBuffer: Uint16Array, vBuffer: Uint16Array, heightBuffer: Uint16Array) {\r\n const count = uBuffer.length;\r\n let u = 0;\r\n let v = 0;\r\n let height = 0;\r\n\r\n for (let i = 0; i < count; ++i) {\r\n u += zigZagDecode(uBuffer[i]);\r\n v += zigZagDecode(vBuffer[i]);\r\n\r\n uBuffer[i] = u;\r\n vBuffer[i] = v;\r\n\r\n height += zigZagDecode(heightBuffer[i]);\r\n heightBuffer[i] = height;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass CesiumTerrainProvider extends TerrainMeshProvider {\r\n private _accessToken: string;\r\n private readonly _tileUrlTemplate: string;\r\n private readonly _maxDepth: number;\r\n private readonly _wantSkirts: boolean;\r\n private readonly _tilingScheme: MapTilingScheme;\r\n private readonly _tileAvailability?: TileAvailability;\r\n private readonly _metaDataAvailableLevel?: number;\r\n private readonly _exaggeration: number;\r\n\r\n private static _scratchQPoint2d = QPoint2d.fromScalars(0, 0);\r\n private static _scratchPoint2d = Point2d.createZero();\r\n private static _scratchPoint = Point3d.createZero();\r\n private static _scratchNormal = Vector3d.createZero();\r\n private static _scratchHeightRange = Range1d.createNull();\r\n private static _tokenTimeoutInterval = BeDuration.fromSeconds(60 * 30); // Request a new access token every 30 minutes...\r\n private _tokenTimeOut: BeTimePoint;\r\n\r\n public override forceTileLoad(tile: Tile): boolean {\r\n // Force loading of the metadata availability tiles as these are required for determining the availability of descendants.\r\n const mapTile = tile as MapTile;\r\n return undefined !== this._metaDataAvailableLevel && mapTile.quadId.level === this._metaDataAvailableLevel && !mapTile.everLoaded;\r\n }\r\n\r\n constructor(opts: TerrainMeshProviderOptions, accessToken: string, tileUrlTemplate: string, maxDepth: number, tilingScheme: MapTilingScheme,\r\n tileAvailability: TileAvailability | undefined, metaDataAvailableLevel: number | undefined) {\r\n super();\r\n this._wantSkirts = opts.wantSkirts;\r\n this._exaggeration = opts.exaggeration;\r\n\r\n this._accessToken = accessToken;\r\n this._tileUrlTemplate = tileUrlTemplate;\r\n this._maxDepth = maxDepth;\r\n this._tilingScheme = tilingScheme;\r\n this._tileAvailability = tileAvailability;\r\n this._metaDataAvailableLevel = metaDataAvailableLevel;\r\n\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (cards.dataset.cesiumIonLogoCard)\r\n return;\r\n\r\n cards.dataset.cesiumIonLogoCard = \"true\";\r\n const card = IModelApp.makeLogoCard({ iconSrc: `${IModelApp.publicPath}images/cesium-ion.svg`, heading: \"Cesium Ion\", notice: IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.CesiumWorldTerrainAttribution\") });\r\n cards.appendChild(card);\r\n }\r\n\r\n public get maxDepth(): number { return this._maxDepth; }\r\n public get tilingScheme(): MapTilingScheme { return this._tilingScheme; }\r\n\r\n public override isTileAvailable(quadId: QuadId) {\r\n if (quadId.level > this.maxDepth)\r\n return false;\r\n\r\n return this._tileAvailability ? this._tileAvailability.isTileAvailable(quadId.level, quadId.column, quadId.row) : true;\r\n }\r\n\r\n public override async requestMeshData(args: RequestMeshDataArgs): Promise<Uint8Array | undefined> {\r\n const tile = args.tile;\r\n const quadId = tile.quadId;\r\n const tileUrl = this.constructUrl(quadId.row, quadId.column, quadId.level);\r\n const requestOptions: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"arraybuffer\",\r\n headers: { authorization: `Bearer ${this._accessToken}` },\r\n accept: \"application/vnd.quantized-mesh;\" /* extensions=octvertexnormals, */ + \"application/octet-stream;q=0.9,*/*;q=0.01\",\r\n };\r\n\r\n try {\r\n const response = await request(tileUrl, requestOptions);\r\n return response.status === 200 ? new Uint8Array(response.body) : undefined;\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined> {\r\n // ###TODO why does he update the access token when reading the mesh instead of when requesting it?\r\n // This function only returns undefined if it fails to acquire token - but it doesn't need the token...\r\n if (BeTimePoint.now().milliseconds > this._tokenTimeOut.milliseconds) {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || args.isCanceled())\r\n return undefined;\r\n\r\n this._accessToken = accessTokenAndEndpointUrl.token;\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n const { data, tile } = args;\r\n assert(data instanceof Uint8Array);\r\n assert(tile instanceof MapTile);\r\n\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const center = nextPoint3d64FromByteStream(streamBuffer);\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n const skirtHeight = this.getLevelMaximumGeometricError(quadId.level + 1) * 10.0; // Add 1 to level to restore height calculation to before the quadId level was from root. (4326 unification)\r\n const minHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const maxHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const boundCenter = nextPoint3d64FromByteStream(streamBuffer);\r\n const boundRadius = streamBuffer.readFloat64();\r\n const horizonOcclusion = nextPoint3d64FromByteStream(streamBuffer);\r\n const terrainTile = tile;\r\n\r\n terrainTile.adjustHeights(minHeight, maxHeight);\r\n\r\n if (undefined === center || undefined === boundCenter || undefined === boundRadius || undefined === horizonOcclusion) { }\r\n const pointCount = streamBuffer.readUint32();\r\n const encodedVertexBuffer = new Uint16Array(blob.buffer, streamBuffer.curPos, pointCount * 3);\r\n streamBuffer.advance(pointCount * 6);\r\n\r\n const uBuffer = encodedVertexBuffer.subarray(0, pointCount);\r\n const vBuffer = encodedVertexBuffer.subarray(pointCount, 2 * pointCount);\r\n const heightBuffer = encodedVertexBuffer.subarray(pointCount * 2, 3 * pointCount);\r\n\r\n zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n // ###TODO: This alleges to handle 32-bit indices, but RealityMeshParams uses a Uint16Array to store indices...\r\n const typedArray = pointCount > 0xffff ? Uint32Array : Uint16Array;\r\n const bytesPerIndex = typedArray.BYTES_PER_ELEMENT;\r\n const triangleElements = 3;\r\n\r\n // skip over any additional padding that was added for 2/4 byte alignment\r\n if (streamBuffer.curPos % bytesPerIndex !== 0)\r\n streamBuffer.advance(bytesPerIndex - (streamBuffer.curPos % bytesPerIndex));\r\n\r\n const triangleCount = streamBuffer.readUint32();\r\n const indexCount = triangleCount * triangleElements;\r\n\r\n const getIndexArray = (numIndices: number) => {\r\n const indexArray = new typedArray(streamBuffer.arrayBuffer, streamBuffer.curPos, numIndices);\r\n streamBuffer.advance(numIndices * bytesPerIndex);\r\n return indexArray;\r\n };\r\n\r\n const indices = getIndexArray(indexCount);\r\n\r\n // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\r\n // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\r\n // Copyright 2012 Google Inc., Apache 2.0 license.\r\n let highest = 0;\r\n const length = indices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const code = indices[i];\r\n indices[i] = highest - code;\r\n if (code === 0) {\r\n ++highest;\r\n }\r\n }\r\n\r\n CesiumTerrainProvider._scratchHeightRange.low = minHeight - skirtHeight;\r\n CesiumTerrainProvider._scratchHeightRange.high = maxHeight;\r\n const projection = terrainTile.getProjection(CesiumTerrainProvider._scratchHeightRange);\r\n const uvScale = 1.0 / 32767.0;\r\n const heightScale = uvScale * (maxHeight - minHeight);\r\n\r\n const westCount = streamBuffer.readUint32(),\r\n westIndices = getIndexArray(westCount),\r\n southCount = streamBuffer.readUint32(),\r\n southIndices = getIndexArray(southCount),\r\n eastCount = streamBuffer.readUint32(),\r\n eastIndices = getIndexArray(eastCount),\r\n northCount = streamBuffer.readUint32(),\r\n northIndices = getIndexArray(northCount);\r\n\r\n // Extensions...\r\n let encodedNormalsBuffer;\r\n while (streamBuffer.curPos < streamBuffer.length) {\r\n const extensionId = streamBuffer.readUint8();\r\n const extensionLength = streamBuffer.readUint32();\r\n switch (extensionId) {\r\n case QuantizedMeshExtensionIds.OctEncodedNormals:\r\n assert(pointCount * 2 === extensionLength);\r\n encodedNormalsBuffer = new Uint8Array(streamBuffer.arrayBuffer, streamBuffer.curPos, extensionLength);\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n\r\n case QuantizedMeshExtensionIds.Metadata:\r\n const stringLength = streamBuffer.readUint32();\r\n if (stringLength > 0) {\r\n const strData = streamBuffer.nextBytes(stringLength);\r\n const str = utf8ToString(strData);\r\n if (undefined !== str) {\r\n const metaData = JSON.parse(str);\r\n if (undefined !== metaData.available && undefined !== this._tileAvailability) {\r\n const availableTiles = metaData.available;\r\n for (let offset = 0; offset < availableTiles.length; ++offset) {\r\n const availableLevel = tile.depth + offset; // Our depth is includes root (1 + cesium Depth)\r\n const rangesAtLevel = availableTiles[offset];\r\n\r\n for (const range of rangesAtLevel)\r\n this._tileAvailability.addAvailableTileRange(availableLevel, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n default:\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n }\r\n }\r\n\r\n let initialIndexCapacity = indexCount;\r\n let initialVertexCapacity = pointCount;\r\n if (this._wantSkirts) {\r\n initialIndexCapacity += 6 * (Math.max(0, northCount - 1) + Math.max(0, southCount - 1) + Math.max(0, eastCount - 1) + Math.max(0, westCount - 1));\r\n initialVertexCapacity += (northCount + southCount + eastCount + westCount);\r\n }\r\n\r\n const wantNormals = undefined !== encodedNormalsBuffer;\r\n const builder = new RealityMeshParamsBuilder({\r\n positionRange: projection.localRange,\r\n initialIndexCapacity,\r\n initialVertexCapacity,\r\n wantNormals,\r\n });\r\n\r\n for (let i = 0; i < indexCount; i += 3)\r\n builder.addTriangle(indices[i], indices[i + 1], indices[i + 2]);\r\n\r\n const position = new Point3d();\r\n const uv = new QPoint2d();\r\n const normal = new Vector3d();\r\n const worldToEcef = tile.iModel.getEcefTransform().matrix;\r\n for (let i = 0; i < pointCount; i++) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n projection.getPoint(uvScale * u, uvScale * v, minHeight + heightBuffer[i] * heightScale, position);\r\n uv.setFromScalars(u * 2, v * 2);\r\n let oen;\r\n if (encodedNormalsBuffer) {\r\n const normalIndex = i * 2;\r\n OctEncodedNormal.decodeValue(encodedNormalsBuffer[normalIndex + 1] << 8 | encodedNormalsBuffer[normalIndex], normal);\r\n worldToEcef.multiplyTransposeVector(normal, normal);\r\n oen = OctEncodedNormal.encode(normal);\r\n }\r\n\r\n builder.addVertex(position, uv, oen);\r\n }\r\n\r\n if (!this._wantSkirts)\r\n return builder.finish();\r\n\r\n westIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n eastIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n northIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n southIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n\r\n const generateSkirts = (indexes: Uint16Array | Uint32Array) => {\r\n const quv = new QPoint2d();\r\n const param = new Point2d();\r\n for (let i = 0; i < indexes.length; i++) {\r\n const index = indexes[i];\r\n const uvIndex = index * 2;\r\n const height = minHeight + heightBuffer[index] * heightScale;\r\n\r\n quv.setFromScalars(builder.uvs.buffer.at(uvIndex), builder.uvs.buffer.at(uvIndex + 1));\r\n builder.uvs.params.unquantize(quv.x, quv.y, param);\r\n\r\n const oen = wantNormals && builder.normals ? builder.normals.at(index) : undefined;\r\n builder.addVertex(projection.getPoint(param.x, param.y, height - skirtHeight), quv, oen);\r\n\r\n if (i !== 0) {\r\n const nextPointIndex = builder.positions.length;\r\n builder.addTriangle(index, indexes[i - 1], nextPointIndex - 2);\r\n builder.addTriangle(index, nextPointIndex - 2, nextPointIndex - 1);\r\n }\r\n }\r\n };\r\n\r\n generateSkirts(westIndices);\r\n generateSkirts(eastIndices);\r\n generateSkirts(southIndices);\r\n generateSkirts(northIndices);\r\n\r\n return builder.finish();\r\n }\r\n\r\n public constructUrl(row: number, column: number, zoomLevel: number): string {\r\n return this._tileUrlTemplate.replace(\"{z}\", zoomLevel.toString()).replace(\"{x}\", column.toString()).replace(\"{y}\", row.toString());\r\n }\r\n\r\n /**\r\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\r\n * ensure that adjacent heightmap vertices are separated by no more than\r\n * screen pixels and will probably go very slowly.\r\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\r\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\r\n * @type {Number}\r\n */\r\n public readonly heightmapTerrainQuality = 0.25;\r\n\r\n /**\r\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\r\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\r\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\r\n * @returns {Number} An estimated geometric error.\r\n */\r\n public getEstimatedLevelZeroGeometricErrorForAHeightmap(ellipsoidMaximumRadius = 6378137, tileImageWidth = 65, numberOfTilesAtLevelZero = 2) {\r\n return ellipsoidMaximumRadius * 2 * Math.PI * this.heightmapTerrainQuality / (tileImageWidth * numberOfTilesAtLevelZero);\r\n }\r\n\r\n public getLevelMaximumGeometricError(level: number) {\r\n return this.getEstimatedLevelZeroGeometricErrorForAHeightmap() / (1 << level);\r\n }\r\n\r\n public getHeightRange(parentRange: Range1d, quadId: QuadId): Range1d {\r\n const heightRange = quadId.level <= 6 ? ApproximateTerrainHeights.instance.getTileHeightRange(quadId) : undefined;\r\n\r\n return undefined === heightRange ? parentRange : heightRange;\r\n }\r\n}\r\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Tiles
3
3
  */
4
4
  import { ImageMapLayerSettings } from "@itwin/core-common";
5
- import { MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider } from "../../internal";
5
+ import { ArcGISServiceMetadata, MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider, MapLayerImageryProviderStatus } from "../../internal";
6
6
  /** Base class for ArcGIS map-layer imagery providers.
7
7
  *
8
8
  * The initial purpose of this class is to offer shared methods
@@ -13,8 +13,20 @@ import { MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider } fr
13
13
  export declare abstract class ArcGISImageryProvider extends MapLayerImageryProvider {
14
14
  protected _accessClient: MapLayerAccessClient | undefined;
15
15
  protected _lastAccessToken: MapLayerAccessToken | undefined;
16
- private static _serviceCache;
16
+ /** Flag indicating if access token should be added to request.
17
+ * @note We assume a service to require access token for the entire viewing session.
18
+ */
19
+ protected _accessTokenRequired: boolean;
17
20
  constructor(settings: ImageMapLayerSettings, usesCachedTiles: boolean);
21
+ /** Updates the accessClient token state whenever the status of the provider change.
22
+ * @internal
23
+ * */
24
+ protected onStatusUpdated(status: MapLayerImageryProviderStatus): void;
25
+ /**
26
+ * Fetch an ArcGIS service metadata, and returns its JSON representation.
27
+ * This wrapper maintains token state and should be used instead of the the ArcGisUtilities version.
28
+ */
29
+ protected getServiceJson(): Promise<ArcGISServiceMetadata | undefined>;
18
30
  /**
19
31
  * Make a request to an ArcGIS service using the provided URL and init parameters.
20
32
  * @param url URL to query
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAoC,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAiC,MAAM,gBAAgB,CAAC;AAIrK;;;;;;GAMG;AACH,8BAAsB,qBAAsB,SAAQ,uBAAuB;IAEzE,SAAS,CAAC,aAAa,EAAE,oBAAoB,GAAC,SAAS,CAAC;IACxD,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,GAAC,SAAS,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAA0B;gBAE1C,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,OAAO;IAKrE;;;;;OAKG;cACa,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW;CAkEtD"}
1
+ {"version":3,"file":"ArcGISImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAmB,qBAAqB,EAAmB,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAI5L;;;;;;GAMG;AACH,8BAAsB,qBAAsB,SAAQ,uBAAuB;IAEzE,SAAS,CAAC,aAAa,EAAE,oBAAoB,GAAC,SAAS,CAAC;IACxD,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,GAAC,SAAS,CAAC;IAE1D;;MAEE;IACF,SAAS,CAAC,oBAAoB,UAAS;gBAE3B,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,OAAO;IAKrE;;SAEK;cACc,eAAe,CAAC,MAAM,EAAE,6BAA6B;IAaxE;;;MAGE;cACc,cAAc;IAuB9B;;;;;OAKG;cACa,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW;CAkEtD"}
@@ -22,8 +22,53 @@ class ArcGISImageryProvider extends internal_1.MapLayerImageryProvider {
22
22
  constructor(settings, usesCachedTiles) {
23
23
  var _a;
24
24
  super(settings, usesCachedTiles);
25
+ /** Flag indicating if access token should be added to request.
26
+ * @note We assume a service to require access token for the entire viewing session.
27
+ */
28
+ this._accessTokenRequired = false;
25
29
  this._accessClient = (_a = IModelApp_1.IModelApp.mapLayerFormatRegistry) === null || _a === void 0 ? void 0 : _a.getAccessClient(settings.formatId);
26
30
  }
31
+ /** Updates the accessClient token state whenever the status of the provider change.
32
+ * @internal
33
+ * */
34
+ onStatusUpdated(status) {
35
+ var _a;
36
+ if (status === internal_1.MapLayerImageryProviderStatus.RequireAuth) {
37
+ // Invalidate the token, so a new one get generated
38
+ if (((_a = this._accessClient) === null || _a === void 0 ? void 0 : _a.invalidateToken) !== undefined && this._lastAccessToken !== undefined) {
39
+ this._accessClient.invalidateToken(this._lastAccessToken);
40
+ }
41
+ // Make sure we don't re-use this token again (i.e force login process)
42
+ this._lastAccessToken = undefined;
43
+ }
44
+ }
45
+ /**
46
+ * Fetch an ArcGIS service metadata, and returns its JSON representation.
47
+ * This wrapper maintains token state and should be used instead of the the ArcGisUtilities version.
48
+ */
49
+ async getServiceJson() {
50
+ let metadata;
51
+ try {
52
+ metadata = await internal_1.ArcGisUtilities.getServiceJson(this._settings.url, this._settings.formatId, this._settings.userName, this._settings.password);
53
+ }
54
+ catch (_e) {
55
+ }
56
+ if (metadata && metadata.accessTokenRequired) {
57
+ const accessClient = IModelApp_1.IModelApp.mapLayerFormatRegistry.getAccessClient(this._settings.formatId);
58
+ if (accessClient) {
59
+ try {
60
+ // Keep track of last used access token, so we can invalidate it later when an errors occurs
61
+ const accessToken = await accessClient.getAccessToken({ mapLayerUrl: new URL(this._settings.url) });
62
+ this._lastAccessToken = accessToken;
63
+ }
64
+ catch {
65
+ }
66
+ }
67
+ // By turning this ON, tiles requests will include security token
68
+ this._accessTokenRequired = metadata.accessTokenRequired;
69
+ }
70
+ return metadata;
71
+ }
27
72
  /**
28
73
  * Make a request to an ArcGIS service using the provided URL and init parameters.
29
74
  * @param url URL to query
@@ -32,28 +77,35 @@ class ArcGISImageryProvider extends internal_1.MapLayerImageryProvider {
32
77
  */
33
78
  async fetch(url, options) {
34
79
  var _a, _b;
80
+ let errorCode;
35
81
  const urlObj = new URL(url);
36
- try {
37
- if (this._accessClient) {
38
- this._lastAccessToken = await internal_1.ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {
39
- mapLayerUrl: new URL(this._settings.url),
40
- userName: this._settings.userName,
41
- password: this._settings.password
42
- });
43
- }
44
- }
45
- catch {
82
+ if (this._accessTokenRequired && this._accessClient) {
83
+ this._lastAccessToken = await internal_1.ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {
84
+ mapLayerUrl: new URL(this._settings.url),
85
+ userName: this._settings.userName,
86
+ password: this._settings.password
87
+ });
46
88
  }
47
89
  let response = await fetch(urlObj.toString(), options);
48
- let errorCode = await internal_1.ArcGisUtilities.checkForResponseErrorCode(response.clone());
90
+ if ((this._lastAccessToken && response.status === 400)
91
+ || ((_a = response.headers.get("content-type")) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes("htm"))) {
92
+ // For some reasons when we make a request with the fetch() api and there is a token error
93
+ // we receive a status 400 instead of proper json response. (i.e doing the same request in the browser gives a different response)
94
+ // For some other request, we also seen error message in html.
95
+ // When it occurs, we fall back to root service request so we get a proper JSON response with error code.
96
+ const tmpUrl = new URL(this._settings.url);
97
+ if (this._lastAccessToken && this._accessTokenRequired)
98
+ tmpUrl.searchParams.append("token", this._lastAccessToken.token);
99
+ tmpUrl.searchParams.append("f", "json");
100
+ response = await fetch(tmpUrl.toString(), options);
101
+ }
102
+ errorCode = await internal_1.ArcGisUtilities.checkForResponseErrorCode(response.clone());
49
103
  if (errorCode !== undefined &&
50
104
  (errorCode === internal_1.ArcGisErrorCode.TokenRequired || errorCode === internal_1.ArcGisErrorCode.InvalidToken)) {
51
- let hasTokenError = true;
52
- // **** Legacy token ONLY ***
53
- // Token might have expired, make a second attempt by forcing new token.
54
105
  if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken) {
55
- // Invalidate previously used token to force token re-generation
56
- if (((_a = this._accessClient) === null || _a === void 0 ? void 0 : _a.invalidateToken) !== undefined && this._lastAccessToken !== undefined)
106
+ // **** Legacy token ONLY ***
107
+ // Token might have expired, make a second attempt by forcing new token.
108
+ if (((_b = this._accessClient) === null || _b === void 0 ? void 0 : _b.invalidateToken) !== undefined && this._lastAccessToken !== undefined)
57
109
  this._accessClient.invalidateToken(this._lastAccessToken);
58
110
  const urlObj2 = new URL(url);
59
111
  if (this._accessClient) {
@@ -66,32 +118,20 @@ class ArcGISImageryProvider extends internal_1.MapLayerImageryProvider {
66
118
  // Make a second attempt with refreshed token
67
119
  response = await fetch(urlObj2.toString(), options);
68
120
  errorCode = await internal_1.ArcGisUtilities.checkForResponseErrorCode(response.clone());
69
- if (errorCode !== undefined &&
70
- (errorCode === internal_1.ArcGisErrorCode.TokenRequired || errorCode === internal_1.ArcGisErrorCode.InvalidToken)) {
71
- // OK at this point, if response still contain a token error, we assume end-user will
72
- // have to provide credentials again. Change the layer status so we
73
- // don't make additional invalid requests..
74
- if (((_b = this._accessClient) === null || _b === void 0 ? void 0 : _b.invalidateToken) !== undefined && this._lastAccessToken !== undefined) {
75
- this._accessClient.invalidateToken(this._lastAccessToken);
76
- this._lastAccessToken = undefined;
77
- }
78
- }
79
- else {
80
- hasTokenError = false;
81
- }
82
121
  }
83
- if (hasTokenError
84
- && this.status === internal_1.MapLayerImageryProviderStatus.Valid) {
85
- // Only report if status is currently valid (avoid reporting twice the same error)
86
- this.status = internal_1.MapLayerImageryProviderStatus.RequireAuth;
87
- this.onStatusChanged.raiseEvent(this);
88
- const msg = IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:MapLayers.Messages.FetchTooltipTokenError", { layerName: this._settings.name });
89
- IModelApp_1.IModelApp.notifications.outputMessage(new NotificationManager_1.NotifyMessageDetails(NotificationManager_1.OutputMessagePriority.Warning, msg));
122
+ if (errorCode === internal_1.ArcGisErrorCode.TokenRequired || errorCode === internal_1.ArcGisErrorCode.InvalidToken) {
123
+ // Looks like the initially generated token has expired.
124
+ if (this.status === internal_1.MapLayerImageryProviderStatus.Valid) {
125
+ // Only report new status change to avoid spamming the UI
126
+ this.setStatus(internal_1.MapLayerImageryProviderStatus.RequireAuth);
127
+ this.onStatusChanged.raiseEvent(this);
128
+ const msg = IModelApp_1.IModelApp.localization.getLocalizedString("iModelJs:MapLayers.Messages.FetchTooltipTokenError", { layerName: this._settings.name });
129
+ IModelApp_1.IModelApp.notifications.outputMessage(new NotificationManager_1.NotifyMessageDetails(NotificationManager_1.OutputMessagePriority.Warning, msg));
130
+ }
90
131
  }
91
132
  }
92
133
  return response;
93
134
  }
94
135
  }
95
136
  exports.ArcGISImageryProvider = ArcGISImageryProvider;
96
- ArcGISImageryProvider._serviceCache = new Map();
97
137
  //# sourceMappingURL=ArcGISImageryProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { ArcGisErrorCode, ArcGisUtilities, MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider, MapLayerImageryProviderStatus } from \"../../internal\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\nimport { NotifyMessageDetails, OutputMessagePriority } from \"../../../NotificationManager\";\r\n\r\n/** Base class for ArcGIS map-layer imagery providers.\r\n *\r\n * The initial purpose of this class is to offer shared methods\r\n * to query ArcGIS services and apply the appropriate security token.\r\n * @see [[ArcGISMapLayerImageryProvider]]\r\n * @internal\r\n */\r\nexport abstract class ArcGISImageryProvider extends MapLayerImageryProvider {\r\n\r\n protected _accessClient: MapLayerAccessClient|undefined;\r\n protected _lastAccessToken: MapLayerAccessToken|undefined;\r\n private static _serviceCache = new Map<string, any>();\r\n\r\n constructor(settings: ImageMapLayerSettings, usesCachedTiles: boolean) {\r\n super(settings, usesCachedTiles);\r\n this._accessClient = IModelApp.mapLayerFormatRegistry?.getAccessClient(settings.formatId);\r\n }\r\n\r\n /**\r\n * Make a request to an ArcGIS service using the provided URL and init parameters.\r\n * @param url URL to query\r\n * @param options Custom settings to apply to the request.\r\n * Refer to fetch API for more details (https://developer.mozilla.org/en-US/docs/Web/API/fetch)\r\n */\r\n protected async fetch(url: URL, options?: RequestInit) {\r\n\r\n const urlObj = new URL(url);\r\n try {\r\n if (this._accessClient) {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password });\r\n }\r\n\r\n } catch {\r\n }\r\n\r\n let response = await fetch(urlObj.toString(), options);\r\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n\r\n if (errorCode !== undefined &&\r\n (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) ) {\r\n let hasTokenError = true;\r\n\r\n // **** Legacy token ONLY ***\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken ) {\r\n\r\n // Invalidate previously used token to force token re-generation\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n const urlObj2 = new URL(url);\r\n if (this._accessClient) {\r\n try {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n\r\n // Make a second attempt with refreshed token\r\n response = await fetch(urlObj2.toString(), options);\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n if (errorCode !== undefined &&\r\n (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) ) {\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined) {\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n this._lastAccessToken = undefined;\r\n }\r\n } else {\r\n hasTokenError = false;\r\n }\r\n }\r\n\r\n if (hasTokenError\r\n && this.status === MapLayerImageryProviderStatus.Valid ) {\r\n // Only report if status is currently valid (avoid reporting twice the same error)\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.FetchTooltipTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n\r\n }\r\n return response;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGISImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { ArcGisErrorCode, ArcGISServiceMetadata, ArcGisUtilities, MapLayerAccessClient, MapLayerAccessToken, MapLayerImageryProvider, MapLayerImageryProviderStatus } from \"../../internal\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\nimport { NotifyMessageDetails, OutputMessagePriority } from \"../../../NotificationManager\";\r\n\r\n/** Base class for ArcGIS map-layer imagery providers.\r\n *\r\n * The initial purpose of this class is to offer shared methods\r\n * to query ArcGIS services and apply the appropriate security token.\r\n * @see [[ArcGISMapLayerImageryProvider]]\r\n * @internal\r\n */\r\nexport abstract class ArcGISImageryProvider extends MapLayerImageryProvider {\r\n\r\n protected _accessClient: MapLayerAccessClient|undefined;\r\n protected _lastAccessToken: MapLayerAccessToken|undefined;\r\n\r\n /** Flag indicating if access token should be added to request.\r\n * @note We assume a service to require access token for the entire viewing session.\r\n */\r\n protected _accessTokenRequired = false;\r\n\r\n constructor(settings: ImageMapLayerSettings, usesCachedTiles: boolean) {\r\n super(settings, usesCachedTiles);\r\n this._accessClient = IModelApp.mapLayerFormatRegistry?.getAccessClient(settings.formatId);\r\n }\r\n\r\n /** Updates the accessClient token state whenever the status of the provider change.\r\n * @internal\r\n * */\r\n protected override onStatusUpdated(status: MapLayerImageryProviderStatus) {\r\n if (status === MapLayerImageryProviderStatus.RequireAuth) {\r\n\r\n // Invalidate the token, so a new one get generated\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined) {\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n }\r\n\r\n // Make sure we don't re-use this token again (i.e force login process)\r\n this._lastAccessToken = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Fetch an ArcGIS service metadata, and returns its JSON representation.\r\n * This wrapper maintains token state and should be used instead of the the ArcGisUtilities version.\r\n */\r\n protected async getServiceJson() {\r\n let metadata: ArcGISServiceMetadata|undefined;\r\n try {\r\n metadata = await ArcGisUtilities.getServiceJson(this._settings.url, this._settings.formatId, this._settings.userName, this._settings.password);\r\n\r\n } catch (_e) {\r\n }\r\n if (metadata && metadata.accessTokenRequired) {\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(this._settings.formatId);\r\n if (accessClient) {\r\n try {\r\n // Keep track of last used access token, so we can invalidate it later when an errors occurs\r\n const accessToken = await accessClient.getAccessToken({mapLayerUrl: new URL(this._settings.url)});\r\n this._lastAccessToken = accessToken;\r\n } catch {\r\n }\r\n }\r\n // By turning this ON, tiles requests will include security token\r\n this._accessTokenRequired = metadata.accessTokenRequired;\r\n }\r\n return metadata;\r\n }\r\n\r\n /**\r\n * Make a request to an ArcGIS service using the provided URL and init parameters.\r\n * @param url URL to query\r\n * @param options Custom settings to apply to the request.\r\n * Refer to fetch API for more details (https://developer.mozilla.org/en-US/docs/Web/API/fetch)\r\n */\r\n protected async fetch(url: URL, options?: RequestInit) {\r\n\r\n let errorCode: number | undefined;\r\n const urlObj = new URL(url);\r\n\r\n if (this._accessTokenRequired && this._accessClient) {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password });\r\n }\r\n\r\n let response = await fetch(urlObj.toString(), options);\r\n\r\n if ((this._lastAccessToken && response.status === 400)\r\n || response.headers.get(\"content-type\")?.toLowerCase().includes(\"htm\")) {\r\n // For some reasons when we make a request with the fetch() api and there is a token error\r\n // we receive a status 400 instead of proper json response. (i.e doing the same request in the browser gives a different response)\r\n // For some other request, we also seen error message in html.\r\n // When it occurs, we fall back to root service request so we get a proper JSON response with error code.\r\n const tmpUrl = new URL(this._settings.url);\r\n if (this._lastAccessToken && this._accessTokenRequired)\r\n tmpUrl.searchParams.append(\"token\", this._lastAccessToken.token);\r\n tmpUrl.searchParams.append(\"f\",\"json\");\r\n response = await fetch(tmpUrl.toString(), options);\r\n }\r\n\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n\r\n if (errorCode !== undefined &&\r\n (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) ) {\r\n\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken ) {\r\n // **** Legacy token ONLY ***\r\n\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n const urlObj2 = new URL(url);\r\n if (this._accessClient) {\r\n try {\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n\r\n // Make a second attempt with refreshed token\r\n response = await fetch(urlObj2.toString(), options);\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response.clone());\r\n }\r\n\r\n if (errorCode === ArcGisErrorCode.TokenRequired || errorCode === ArcGisErrorCode.InvalidToken) {\r\n // Looks like the initially generated token has expired.\r\n\r\n if (this.status === MapLayerImageryProviderStatus.Valid ) {\r\n // Only report new status change to avoid spamming the UI\r\n this.setStatus(MapLayerImageryProviderStatus.RequireAuth);\r\n this.onStatusChanged.raiseEvent(this);\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.FetchTooltipTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n }\r\n }\r\n return response;\r\n }\r\n}\r\n"]}
@@ -10,6 +10,8 @@ export declare class ArcGISMapLayerImageryProvider extends ArcGISImageryProvider
10
10
  private _copyrightText;
11
11
  private _querySupported;
12
12
  private _tileMapSupported;
13
+ private _mapSupported;
14
+ private _tilesOnly;
13
15
  private _tileMap;
14
16
  serviceJson: any;
15
17
  constructor(settings: ImageMapLayerSettings);
@@ -23,7 +25,6 @@ export declare class ArcGISMapLayerImageryProvider extends ArcGISImageryProvider
23
25
  private fetchTile;
24
26
  loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined>;
25
27
  protected _generateChildIds(tile: ImageryMapTile, resolveChildren: (childIds: QuadId[]) => void): void;
26
- private isEpsg3857Compatible;
27
28
  initialize(): Promise<void>;
28
29
  addLogoCards(cards: HTMLTableElement): void;
29
30
  private getIdentifyData;
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EACY,qBAAqB,EACtC,cAAc,EAAE,kBAAkB,EAA2C,mBAAmB,EACzC,MAAM,EAC9D,MAAM,gBAAgB,CAAC;AAKxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,qBAAqB;IACtE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAEnC,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAOD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAmB7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAmCxG,OAAO,CAAC,oBAAoB;IAQN,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyEjC,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;YAS7C,eAAe;IAYP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAWpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU3F"}
1
+ {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EACY,qBAAqB,EAEtC,cAAc,EAAE,kBAAkB,EAA2C,mBAAmB,EACzC,MAAM,EAC9D,MAAM,gBAAgB,CAAC;AAQxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,qBAAqB;IACtE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAA0B;IAEnC,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAOD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAoB7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAmClF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4FjC,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;YAS7C,eAAe;IAYP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAWpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU3F"}
@@ -14,6 +14,8 @@ const internal_1 = require("../../internal");
14
14
  const appui_abstract_1 = require("@itwin/appui-abstract");
15
15
  const core_geometry_1 = require("@itwin/core-geometry");
16
16
  const lodash_1 = require("lodash");
17
+ const core_bentley_1 = require("@itwin/core-bentley");
18
+ const loggerCategory = "MapLayerImageryProvider.ArcGISMapLayerImageryProvider";
17
19
  /** @internal */
18
20
  class ArcGISMapLayerImageryProvider extends internal_1.ArcGISImageryProvider {
19
21
  constructor(settings) {
@@ -23,6 +25,8 @@ class ArcGISMapLayerImageryProvider extends internal_1.ArcGISImageryProvider {
23
25
  this._copyrightText = "Copyright";
24
26
  this._querySupported = false;
25
27
  this._tileMapSupported = false;
28
+ this._mapSupported = false;
29
+ this._tilesOnly = false;
26
30
  this._accessClient = IModelApp_1.IModelApp.mapLayerFormatRegistry.getAccessClient(settings.formatId);
27
31
  }
28
32
  get _filterByCartoRange() { return false; } // Can't trust footprint ranges (USGS Hydro)
@@ -51,6 +55,7 @@ class ArcGISMapLayerImageryProvider extends internal_1.ArcGISImageryProvider {
51
55
  return await this.getImageFromTileResponse(tileResponse, zoomLevel);
52
56
  }
53
57
  catch (error) {
58
+ core_bentley_1.Logger.logError(loggerCategory, `Error occurred when loading tile(${row},${column},${zoomLevel}) : ${error}`);
54
59
  return undefined;
55
60
  }
56
61
  }
@@ -87,73 +92,81 @@ class ArcGISMapLayerImageryProvider extends internal_1.ArcGISImageryProvider {
87
92
  resolveChildren(childIds); // Resolve all children
88
93
  }
89
94
  }
90
- isEpsg3857Compatible(tileInfo) {
91
- var _a;
92
- if (((_a = tileInfo.spatialReference) === null || _a === void 0 ? void 0 : _a.latestWkid) !== 3857 || !Array.isArray(tileInfo.lods))
93
- return false;
94
- const zeroLod = tileInfo.lods[0];
95
- return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;
96
- }
97
95
  async initialize() {
98
96
  var _a, _b, _c, _d, _e;
99
- const json = await internal_1.ArcGisUtilities.getServiceJson(this._settings.url, this._settings.formatId, this._settings.userName, this._settings.password);
100
- if (json === undefined)
97
+ const metadata = await this.getServiceJson();
98
+ if ((metadata === null || metadata === void 0 ? void 0 : metadata.content) === undefined)
101
99
  throw new core_common_1.ServerError(core_common_1.IModelStatus.ValidationFailed, "");
100
+ const json = metadata.content;
102
101
  if (((_a = json === null || json === void 0 ? void 0 : json.error) === null || _a === void 0 ? void 0 : _a.code) === internal_1.ArcGisErrorCode.TokenRequired || ((_b = json === null || json === void 0 ? void 0 : json.error) === null || _b === void 0 ? void 0 : _b.code) === internal_1.ArcGisErrorCode.InvalidToken) {
103
102
  // Check again layer status, it might have change during await.
104
103
  if (this.status === internal_1.MapLayerImageryProviderStatus.Valid) {
105
- this.status = internal_1.MapLayerImageryProviderStatus.RequireAuth;
106
- this.onStatusChanged.raiseEvent(this);
104
+ this.setStatus(internal_1.MapLayerImageryProviderStatus.RequireAuth);
105
+ return; // By returning (i.e not throwing), we ensure the tileTree get created and current provider is preserved to report status.
107
106
  }
108
107
  }
109
- if (json !== undefined) {
110
- this.serviceJson = json;
111
- if (json.capabilities) {
112
- this._querySupported = json.capabilities.indexOf("Query") >= 0;
113
- this._tileMapSupported = json.capabilities.indexOf("Tilemap") >= 0;
114
- }
115
- if (json.copyrightText)
116
- this._copyrightText = json.copyrightText;
117
- if (false !== (this._usesCachedTiles = json.tileInfo !== undefined && this.isEpsg3857Compatible(json.tileInfo))) {
118
- if (json.maxScale !== undefined && json.maxScale !== 0 && Array.isArray(json.tileInfo.lods)) {
119
- for (; this._maxDepthFromLod < json.tileInfo.lods.length && json.tileInfo.lods[this._maxDepthFromLod].scale > json.maxScale; this._maxDepthFromLod++)
120
- ;
108
+ this.serviceJson = json;
109
+ if (json.capabilities) {
110
+ const capabilities = json.capabilities.split(",");
111
+ this._querySupported = capabilities.includes("Query");
112
+ this._tileMapSupported = capabilities.includes("Tilemap");
113
+ this._mapSupported = capabilities.includes("Map");
114
+ this._tilesOnly = capabilities.includes("TilesOnly");
115
+ }
116
+ if (json.copyrightText)
117
+ this._copyrightText = json.copyrightText;
118
+ this._usesCachedTiles = !!json.tileInfo;
119
+ if (this._usesCachedTiles) {
120
+ // Only EPSG:3857 is supported with pre-rendered tiles. Fall back to 'Export' queries if possible otherwise throw.
121
+ if (!internal_1.ArcGisUtilities.isEpsg3857Compatible(json.tileInfo)) {
122
+ if (this._mapSupported && !this._tilesOnly) {
123
+ this._usesCachedTiles = false;
124
+ }
125
+ else {
126
+ throw new core_common_1.ServerError(core_common_1.IModelStatus.ValidationFailed, "Invalid coordinate system");
121
127
  }
122
128
  }
129
+ }
130
+ if (this._usesCachedTiles) {
131
+ // Read max LOD
132
+ if (json.maxScale !== undefined && json.maxScale !== 0 && Array.isArray(json.tileInfo.lods)) {
133
+ for (; this._maxDepthFromLod < json.tileInfo.lods.length && json.tileInfo.lods[this._maxDepthFromLod].scale > json.maxScale; this._maxDepthFromLod++)
134
+ ;
135
+ }
123
136
  // Create tile map object only if we are going to request tiles from this server and it support tilemap requests.
124
- if (this._usesCachedTiles && this._tileMapSupported) {
137
+ if (this._tileMapSupported) {
125
138
  this._tileMap = new internal_1.ArcGISTileMap(this._settings.url, this._settings, (_d = (_c = json.tileInfo) === null || _c === void 0 ? void 0 : _c.lods) === null || _d === void 0 ? void 0 : _d.length, this._accessClient);
126
139
  }
127
- // Read range using fullextent from service metadata
128
- if (json.fullExtent) {
129
- if (json.fullExtent.spatialReference.latestWkid === 3857 || json.fullExtent.spatialReference.wkid === 102100) {
130
- const range3857 = core_geometry_1.Range2d.createFrom({
131
- low: { x: json.fullExtent.xmin, y: json.fullExtent.ymin },
132
- high: { x: json.fullExtent.xmax, y: json.fullExtent.ymax }
133
- });
134
- const west = this.getEPSG4326Lon(range3857.xLow);
135
- const south = this.getEPSG4326Lat(range3857.yLow);
136
- const east = this.getEPSG4326Lon(range3857.xHigh);
137
- const north = this.getEPSG4326Lat(range3857.yHigh);
138
- this.cartoRange = internal_1.MapCartoRectangle.fromDegrees(west, south, east, north);
139
- }
140
+ }
141
+ // Read range using fullextent from service metadata
142
+ if (json.fullExtent) {
143
+ if (json.fullExtent.spatialReference.latestWkid === 3857 || json.fullExtent.spatialReference.wkid === 102100) {
144
+ const range3857 = core_geometry_1.Range2d.createFrom({
145
+ low: { x: json.fullExtent.xmin, y: json.fullExtent.ymin },
146
+ high: { x: json.fullExtent.xmax, y: json.fullExtent.ymax }
147
+ });
148
+ const west = this.getEPSG4326Lon(range3857.xLow);
149
+ const south = this.getEPSG4326Lat(range3857.yLow);
150
+ const east = this.getEPSG4326Lon(range3857.xHigh);
151
+ const north = this.getEPSG4326Lat(range3857.yHigh);
152
+ this.cartoRange = internal_1.MapCartoRectangle.fromDegrees(west, south, east, north);
140
153
  }
141
- // Read minLOD if available
142
- if (json.minLOD !== undefined) {
143
- const minLod = parseInt(json.minLOD, 10);
144
- if (!Number.isNaN(minLod)) {
145
- this._minDepthFromLod = minLod;
146
- }
154
+ }
155
+ // Read minLOD if available
156
+ if (json.minLOD !== undefined) {
157
+ const minLod = parseInt(json.minLOD, 10);
158
+ if (!Number.isNaN(minLod)) {
159
+ this._minDepthFromLod = minLod;
147
160
  }
148
- else if (json.minScale) {
149
- // Read min LOD using minScale
150
- const minScale = json.minScale;
151
- if (((_e = json.tileInfo) === null || _e === void 0 ? void 0 : _e.lods) !== undefined && (0, lodash_1.isArray)(json.tileInfo.lods)) {
152
- for (const lod of json.tileInfo.lods) {
153
- if (lod.scale < minScale) {
154
- this._minDepthFromLod = lod.level;
155
- break;
156
- }
161
+ }
162
+ else if (json.minScale) {
163
+ // Read min LOD using minScale
164
+ const minScale = json.minScale;
165
+ if (((_e = json.tileInfo) === null || _e === void 0 ? void 0 : _e.lods) !== undefined && (0, lodash_1.isArray)(json.tileInfo.lods)) {
166
+ for (const lod of json.tileInfo.lods) {
167
+ if (lod.scale < minScale) {
168
+ this._minDepthFromLod = lod.level;
169
+ break;
157
170
  }
158
171
  }
159
172
  }