@itwin/core-frontend 3.2.0-dev.3 → 3.2.0-dev.34

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 (266) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/lib/cjs/BriefcaseConnection.d.ts +35 -1
  3. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseConnection.js +52 -1
  5. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  6. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  7. package/lib/cjs/DisplayStyleState.js +6 -4
  8. package/lib/cjs/DisplayStyleState.js.map +1 -1
  9. package/lib/cjs/IModelApp.d.ts +2 -0
  10. package/lib/cjs/IModelApp.d.ts.map +1 -1
  11. package/lib/cjs/IModelApp.js +6 -3
  12. package/lib/cjs/IModelApp.js.map +1 -1
  13. package/lib/cjs/IModelConnection.d.ts +5 -2
  14. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  15. package/lib/cjs/IModelConnection.js +11 -3
  16. package/lib/cjs/IModelConnection.js.map +1 -1
  17. package/lib/cjs/ImageUtil.d.ts +4 -2
  18. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  19. package/lib/cjs/ImageUtil.js +8 -4
  20. package/lib/cjs/ImageUtil.js.map +1 -1
  21. package/lib/cjs/ViewManager.d.ts.map +1 -1
  22. package/lib/cjs/ViewManager.js +1 -0
  23. package/lib/cjs/ViewManager.js.map +1 -1
  24. package/lib/cjs/Viewport.d.ts.map +1 -1
  25. package/lib/cjs/Viewport.js +5 -1
  26. package/lib/cjs/Viewport.js.map +1 -1
  27. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  28. package/lib/cjs/quantity-formatting/QuantityFormatter.js +2 -1
  29. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  30. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
  31. package/lib/cjs/render/primitives/VertexTable.js +30 -2
  32. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  33. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  34. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +7 -3
  35. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  36. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  37. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  38. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  39. package/lib/cjs/render/webgl/RealityMesh.d.ts +1 -0
  40. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  41. package/lib/cjs/render/webgl/RealityMesh.js +1 -0
  42. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  43. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
  44. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  45. package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
  46. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  47. package/lib/cjs/render/webgl/Target.d.ts +3 -1
  48. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/Target.js +9 -0
  50. package/lib/cjs/render/webgl/Target.js.map +1 -1
  51. package/lib/cjs/render/webgl/Technique.d.ts +4 -2
  52. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/Technique.js +148 -120
  54. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  55. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
  56. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
  58. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  59. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  60. package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
  61. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  62. package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
  63. package/lib/cjs/render/webgl/glsl/Color.js +8 -7
  64. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  65. package/lib/cjs/render/webgl/glsl/Decode.d.ts +2 -1
  66. package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
  67. package/lib/cjs/render/webgl/glsl/Decode.js +16 -2
  68. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  69. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
  70. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  71. package/lib/cjs/render/webgl/glsl/Edge.js +6 -19
  72. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  73. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  74. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +0 -2
  75. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  76. package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
  77. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  78. package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
  79. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  80. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
  81. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  82. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -21
  83. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  84. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/glsl/RealityMesh.js +1 -3
  86. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  87. package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
  88. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/glsl/Surface.js +50 -34
  90. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  91. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -3
  92. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  93. package/lib/cjs/render/webgl/glsl/Vertex.js +143 -57
  94. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  95. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  96. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  97. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  98. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  99. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -1
  100. package/lib/cjs/tile/OPCFormatInterpreter.js +1 -2
  101. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  102. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
  103. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  104. package/lib/cjs/tile/RealityTileLoader.js +29 -6
  105. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  106. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  107. package/lib/cjs/tile/TileAdmin.js +0 -5
  108. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  109. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  110. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  111. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  112. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  113. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  114. package/lib/cjs/tile/map/ArcGisUtilities.js +13 -0
  115. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  116. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  117. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  118. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  119. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  120. package/lib/cjs/tile/map/MapTileTree.js +2 -2
  121. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  122. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  123. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  124. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  125. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  126. package/lib/cjs/tools/PrimitiveTool.d.ts +3 -0
  127. package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
  128. package/lib/cjs/tools/PrimitiveTool.js +6 -0
  129. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  130. package/lib/cjs/tools/ToolAdmin.d.ts +1 -21
  131. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  132. package/lib/cjs/tools/ToolAdmin.js +0 -17
  133. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  134. package/lib/esm/BriefcaseConnection.d.ts +35 -1
  135. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  136. package/lib/esm/BriefcaseConnection.js +50 -0
  137. package/lib/esm/BriefcaseConnection.js.map +1 -1
  138. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  139. package/lib/esm/DisplayStyleState.js +6 -4
  140. package/lib/esm/DisplayStyleState.js.map +1 -1
  141. package/lib/esm/IModelApp.d.ts +2 -0
  142. package/lib/esm/IModelApp.d.ts.map +1 -1
  143. package/lib/esm/IModelApp.js +5 -2
  144. package/lib/esm/IModelApp.js.map +1 -1
  145. package/lib/esm/IModelConnection.d.ts +5 -2
  146. package/lib/esm/IModelConnection.d.ts.map +1 -1
  147. package/lib/esm/IModelConnection.js +12 -4
  148. package/lib/esm/IModelConnection.js.map +1 -1
  149. package/lib/esm/ImageUtil.d.ts +4 -2
  150. package/lib/esm/ImageUtil.d.ts.map +1 -1
  151. package/lib/esm/ImageUtil.js +8 -4
  152. package/lib/esm/ImageUtil.js.map +1 -1
  153. package/lib/esm/ViewManager.d.ts.map +1 -1
  154. package/lib/esm/ViewManager.js +1 -0
  155. package/lib/esm/ViewManager.js.map +1 -1
  156. package/lib/esm/Viewport.d.ts.map +1 -1
  157. package/lib/esm/Viewport.js +5 -1
  158. package/lib/esm/Viewport.js.map +1 -1
  159. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  160. package/lib/esm/quantity-formatting/QuantityFormatter.js +3 -2
  161. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  162. package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
  163. package/lib/esm/render/primitives/VertexTable.js +30 -2
  164. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  165. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  166. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +7 -3
  167. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  168. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  169. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  170. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  171. package/lib/esm/render/webgl/RealityMesh.d.ts +1 -0
  172. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  173. package/lib/esm/render/webgl/RealityMesh.js +1 -0
  174. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  175. package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
  176. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  177. package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
  178. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  179. package/lib/esm/render/webgl/Target.d.ts +3 -1
  180. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  181. package/lib/esm/render/webgl/Target.js +9 -0
  182. package/lib/esm/render/webgl/Target.js.map +1 -1
  183. package/lib/esm/render/webgl/Technique.d.ts +4 -2
  184. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  185. package/lib/esm/render/webgl/Technique.js +148 -120
  186. package/lib/esm/render/webgl/Technique.js.map +1 -1
  187. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
  188. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  189. package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
  190. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  191. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  192. package/lib/esm/render/webgl/glsl/Animation.js +2 -0
  193. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  194. package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
  195. package/lib/esm/render/webgl/glsl/Color.js +8 -7
  196. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  197. package/lib/esm/render/webgl/glsl/Decode.d.ts +2 -1
  198. package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
  199. package/lib/esm/render/webgl/glsl/Decode.js +15 -1
  200. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  201. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
  202. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  203. package/lib/esm/render/webgl/glsl/Edge.js +7 -20
  204. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  205. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  206. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -3
  207. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  208. package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
  209. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  210. package/lib/esm/render/webgl/glsl/PointString.js +6 -6
  211. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  212. package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
  213. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  214. package/lib/esm/render/webgl/glsl/Polyline.js +7 -22
  215. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  216. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  217. package/lib/esm/render/webgl/glsl/RealityMesh.js +1 -3
  218. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  219. package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
  220. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  221. package/lib/esm/render/webgl/glsl/Surface.js +51 -35
  222. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  223. package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -3
  224. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  225. package/lib/esm/render/webgl/glsl/Vertex.js +142 -56
  226. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  227. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  228. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  229. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  230. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  231. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -1
  232. package/lib/esm/tile/OPCFormatInterpreter.js +2 -3
  233. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  234. package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
  235. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  236. package/lib/esm/tile/RealityTileLoader.js +30 -7
  237. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  238. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  239. package/lib/esm/tile/TileAdmin.js +0 -5
  240. package/lib/esm/tile/TileAdmin.js.map +1 -1
  241. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  242. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  243. package/lib/esm/tile/TileRequestChannels.js +1 -6
  244. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  245. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  246. package/lib/esm/tile/map/ArcGisUtilities.js +13 -0
  247. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  248. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  249. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  250. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  251. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  252. package/lib/esm/tile/map/MapTileTree.js +2 -2
  253. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  254. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  255. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  256. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  257. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  258. package/lib/esm/tools/PrimitiveTool.d.ts +3 -0
  259. package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
  260. package/lib/esm/tools/PrimitiveTool.js +6 -0
  261. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  262. package/lib/esm/tools/ToolAdmin.d.ts +1 -21
  263. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  264. package/lib/esm/tools/ToolAdmin.js +0 -17
  265. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  266. package/package.json +20 -21
@@ -23,10 +23,6 @@ export declare class TileRequestChannels {
23
23
  * @internal
24
24
  */
25
25
  constructor(rpcConcurrency: number | undefined, cacheMetadata: boolean);
26
- /** Lazily called by [[TileAdmin]] once it can determine whether a cloud storage cache is configured.
27
- * @internal
28
- */
29
- enableCloudStorageCache(): void;
30
26
  /** The number of registered channels. */
31
27
  get size(): number;
32
28
  /** Look up a registered channel by its name. */
@@ -1 +1 @@
1
- {"version":3,"file":"TileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/TileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,UAAU,EAAE,yBAAyB,EAAe,kBAAkB,EAAE,4BAA4B,EACrG,MAAM,YAAY,CAAC;AA8BpB;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,gBAAgB;IAChB,SAAgB,cAAc,EAAE,yBAAyB,CAAC;IAC1D;;OAEG;IACH,SAAgB,kBAAkB,EAAE,kBAAkB,CAAC;IACvD,6FAA6F;IAC7F,SAAgB,eAAe,KAAK;IACpC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE;;OAEG;gBACgB,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO;IAqB7E;;OAEG;IACI,uBAAuB,IAAI,IAAI;IAItC,yCAAyC;IACzC,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,gDAAgD;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIxD,yFAAyF;IAClF,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAKhD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAO7C;;;OAGG;WACW,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM;IAOvD;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAQnD,yCAAyC;IAClC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIxD;;OAEG;IACH,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,gBAAgB;IACT,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAIjE;;OAEG;IACI,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMnD,mDAAmD;IACnD,IAAW,UAAU,IAAI,4BAA4B,CAMpD;IAED,wCAAwC;IACjC,eAAe,IAAI,IAAI;IAK9B;;OAEG;IACI,WAAW,IAAI,IAAI;IAK1B;;OAEG;IACI,OAAO,IAAI,IAAI;IAKtB;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKrD;;OAEG;IACI,UAAU,IAAI,IAAI;CAM1B"}
1
+ {"version":3,"file":"TileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/TileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,UAAU,EAAE,yBAAyB,EAAe,kBAAkB,EAAE,4BAA4B,EACrG,MAAM,YAAY,CAAC;AA8BpB;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,gBAAgB;IAChB,SAAgB,cAAc,EAAE,yBAAyB,CAAC;IAC1D;;OAEG;IACH,SAAgB,kBAAkB,EAAE,kBAAkB,CAAC;IACvD,6FAA6F;IAC7F,SAAgB,eAAe,KAAK;IACpC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE;;OAEG;gBACgB,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO;IAsB7E,yCAAyC;IACzC,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,gDAAgD;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIxD,yFAAyF;IAClF,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAKhD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAO7C;;;OAGG;WACW,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM;IAOvD;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAQnD,yCAAyC;IAClC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIxD;;OAEG;IACH,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,gBAAgB;IACT,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAIjE;;OAEG;IACI,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMnD,mDAAmD;IACnD,IAAW,UAAU,IAAI,4BAA4B,CAMpD;IAED,wCAAwC;IACjC,eAAe,IAAI,IAAI;IAK9B;;OAEG;IACI,WAAW,IAAI,IAAI;IAK1B;;OAEG;IACI,OAAO,IAAI,IAAI;IAKtB;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKrD;;OAEG;IACI,UAAU,IAAI,IAAI;CAM1B"}
@@ -56,16 +56,11 @@ export class TileRequestChannels {
56
56
  concurrency: this.rpcConcurrency,
57
57
  usesHttp: undefined === rpcConcurrency,
58
58
  cacheMetadata,
59
+ cacheConcurrency: this.httpConcurrency,
59
60
  });
60
61
  for (const channel of this.iModelChannels)
61
62
  this.add(channel);
62
63
  }
63
- /** Lazily called by [[TileAdmin]] once it can determine whether a cloud storage cache is configured.
64
- * @internal
65
- */
66
- enableCloudStorageCache() {
67
- this.add(this.iModelChannels.enableCloudStorageCache(this.httpConcurrency));
68
- }
69
64
  /** The number of registered channels. */
70
65
  get size() {
71
66
  return this._channels.size;
@@ -1 +1 @@
1
- {"version":3,"file":"TileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/TileRequestChannels.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 { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport {\r\n IModelTile, IModelTileRequestChannels, TileRequest, TileRequestChannel, TileRequestChannelStatistics,\r\n} from \"./internal\";\r\n\r\n/** For an [[IpcApp]], allows backend element graphics requests in progress to be canceled. */\r\nclass ElementGraphicsChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, string[]>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const imodel = request.tile.tree.iModel;\r\n let ids = this._canceled.get(imodel);\r\n if (!ids)\r\n this._canceled.set(imodel, ids = []);\r\n\r\n ids.push(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, requestIds] of this._canceled) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", imodel.key, requestIds);\r\n this._statistics.totalAbortedRequests += requestIds.length;\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\n/** A set of named [[TileRequestChannel]]s via which content for [[Tile]]s can be requested.\r\n * @see [[TileAdmin.channels]] for the channels configured for use with the iTwin.js display system.\r\n * @see [[TileRequestChannels.getForHttp]] for the most typical way of obtaining or registering a channel.\r\n * @public\r\n */\r\nexport class TileRequestChannels {\r\n /** @internal */\r\n public readonly iModelChannels: IModelTileRequestChannels;\r\n /** The channel over which [[TileAdmin.requestElementGraphics]] executes. If you implement a [[TiledGraphicsProvider]] or [[TileTree]] that obtains its\r\n * content from `requestElementGraphics`, use this channel.\r\n */\r\n public readonly elementGraphicsRpc: TileRequestChannel;\r\n /** The maximum number of active requests for a channel that uses HTTP to request content. */\r\n public readonly httpConcurrency = 6;\r\n private _rpcConcurrency: number;\r\n private readonly _channels = new Map<string, TileRequestChannel>();\r\n\r\n /** `rpcConcurrency` is defined if [[IpcApp.isValid]]; otherwise RPC requests are made over HTTP and use the same limits.\r\n * @internal\r\n */\r\n public constructor(rpcConcurrency: number | undefined, cacheMetadata: boolean) {\r\n this._rpcConcurrency = rpcConcurrency ?? this.httpConcurrency;\r\n\r\n const elementGraphicsChannelName = \"itwinjs-elem-rpc\";\r\n if (undefined !== rpcConcurrency)\r\n this.elementGraphicsRpc = new ElementGraphicsChannel(elementGraphicsChannelName, rpcConcurrency);\r\n else\r\n this.elementGraphicsRpc = new TileRequestChannel(elementGraphicsChannelName, this.rpcConcurrency);\r\n\r\n this.add(this.elementGraphicsRpc);\r\n\r\n this.iModelChannels = new IModelTileRequestChannels({\r\n concurrency: this.rpcConcurrency,\r\n usesHttp: undefined === rpcConcurrency,\r\n cacheMetadata,\r\n });\r\n\r\n for (const channel of this.iModelChannels)\r\n this.add(channel);\r\n }\r\n\r\n /** Lazily called by [[TileAdmin]] once it can determine whether a cloud storage cache is configured.\r\n * @internal\r\n */\r\n public enableCloudStorageCache(): void {\r\n this.add(this.iModelChannels.enableCloudStorageCache(this.httpConcurrency));\r\n }\r\n\r\n /** The number of registered channels. */\r\n public get size(): number {\r\n return this._channels.size;\r\n }\r\n\r\n /** Look up a registered channel by its name. */\r\n public get(name: string): TileRequestChannel | undefined {\r\n return this._channels.get(name);\r\n }\r\n\r\n /** Return whether the specified channel has been registered. Primarily for debugging. */\r\n public has(channel: TileRequestChannel): boolean {\r\n const existing = this.get(channel.name);\r\n return existing !== undefined && existing === channel;\r\n }\r\n\r\n /** Add a new channel.\r\n * @throws Error if a channel by the same name has already been registered.\r\n */\r\n public add(channel: TileRequestChannel): void {\r\n if (this.get(channel.name))\r\n throw new Error(`Tile request channel ${channel.name} is already registered.`);\r\n\r\n this._channels.set(channel.name, channel);\r\n }\r\n\r\n /** Extract the host name from a URL for use as the name of the corresponding [[TileRequestChannel]].\r\n * @throws TypeError if `url` is a string and does not represent a valid URL.\r\n * @see [[getForHttp]] to obtain or register a channel for the host name.\r\n */\r\n public static getNameFromUrl(url: URL | string): string {\r\n if (typeof url === \"string\")\r\n url = new URL(url);\r\n\r\n return url.hostname;\r\n }\r\n\r\n /** Obtain a channel that requests content over HTTP using HTTP 1.1 limits on simultaneous connections.\r\n * If a channel with the specified name does not already exist, it will be created and registered.\r\n * @see [[getNameFromUrl]] to obtain a channel name corresponding to a hostname.\r\n */\r\n public getForHttp(name: string): TileRequestChannel {\r\n let channel = this.get(name);\r\n if (!channel)\r\n this.add(channel = new TileRequestChannel(name, this.httpConcurrency));\r\n\r\n return channel;\r\n }\r\n\r\n /** Iterator over all of the channels. */\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n return this._channels.values()[Symbol.iterator]();\r\n }\r\n\r\n /** The maximum number of active requests for a channel that uses an RpcInterface to satisfy its requests.\r\n * For web-based applications, this is the same as [[httpConcurrency]], but for [[IpcApp]]s it is determined by the number of workers threads allocated by the backend.\r\n */\r\n public get rpcConcurrency(): number {\r\n return this._rpcConcurrency;\r\n }\r\n\r\n /** @internal */\r\n public getIModelTileChannel(tile: IModelTile): TileRequestChannel {\r\n return this.iModelChannels.getChannelForTile(tile);\r\n }\r\n\r\n /** Chiefly for debugging.\r\n * @internal\r\n */\r\n public setRpcConcurrency(concurrency: number): void {\r\n this._rpcConcurrency = concurrency;\r\n this.iModelChannels.setRpcConcurrency(concurrency);\r\n this.elementGraphicsRpc.concurrency = concurrency;\r\n }\r\n\r\n /** Statistics intended primarily for debugging. */\r\n public get statistics(): TileRequestChannelStatistics {\r\n const stats = new TileRequestChannelStatistics();\r\n for (const channel of this)\r\n channel.statistics.addTo(stats);\r\n\r\n return stats;\r\n }\r\n\r\n /** Reset all [[statistics]] to zero. */\r\n public resetStatistics(): void {\r\n for (const channel of this)\r\n channel.resetStatistics();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.processQueue]] when it is about to start enqueuing new requests.\r\n * @internal\r\n */\r\n public swapPending(): void {\r\n for (const channel of this)\r\n channel.swapPending();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.processQueue]] when it is about to start enqueuing new requests.\r\n * @internal\r\n */\r\n public process(): void {\r\n for (const channel of this)\r\n channel.process();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.onIModelClosed]].\r\n * @internal\r\n */\r\n public onIModelClosed(iModel: IModelConnection): void {\r\n for (const channel of this)\r\n channel.onIModelClosed(iModel);\r\n }\r\n\r\n /** Invoked by [[TileAdmin.onShutDown]].\r\n * @internal\r\n */\r\n public onShutDown(): void {\r\n for (const channel of this)\r\n channel.cancelAndClearAll();\r\n\r\n this._channels.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/TileRequestChannels.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 { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport {\r\n IModelTile, IModelTileRequestChannels, TileRequest, TileRequestChannel, TileRequestChannelStatistics,\r\n} from \"./internal\";\r\n\r\n/** For an [[IpcApp]], allows backend element graphics requests in progress to be canceled. */\r\nclass ElementGraphicsChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, string[]>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const imodel = request.tile.tree.iModel;\r\n let ids = this._canceled.get(imodel);\r\n if (!ids)\r\n this._canceled.set(imodel, ids = []);\r\n\r\n ids.push(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, requestIds] of this._canceled) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", imodel.key, requestIds);\r\n this._statistics.totalAbortedRequests += requestIds.length;\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\n/** A set of named [[TileRequestChannel]]s via which content for [[Tile]]s can be requested.\r\n * @see [[TileAdmin.channels]] for the channels configured for use with the iTwin.js display system.\r\n * @see [[TileRequestChannels.getForHttp]] for the most typical way of obtaining or registering a channel.\r\n * @public\r\n */\r\nexport class TileRequestChannels {\r\n /** @internal */\r\n public readonly iModelChannels: IModelTileRequestChannels;\r\n /** The channel over which [[TileAdmin.requestElementGraphics]] executes. If you implement a [[TiledGraphicsProvider]] or [[TileTree]] that obtains its\r\n * content from `requestElementGraphics`, use this channel.\r\n */\r\n public readonly elementGraphicsRpc: TileRequestChannel;\r\n /** The maximum number of active requests for a channel that uses HTTP to request content. */\r\n public readonly httpConcurrency = 6;\r\n private _rpcConcurrency: number;\r\n private readonly _channels = new Map<string, TileRequestChannel>();\r\n\r\n /** `rpcConcurrency` is defined if [[IpcApp.isValid]]; otherwise RPC requests are made over HTTP and use the same limits.\r\n * @internal\r\n */\r\n public constructor(rpcConcurrency: number | undefined, cacheMetadata: boolean) {\r\n this._rpcConcurrency = rpcConcurrency ?? this.httpConcurrency;\r\n\r\n const elementGraphicsChannelName = \"itwinjs-elem-rpc\";\r\n if (undefined !== rpcConcurrency)\r\n this.elementGraphicsRpc = new ElementGraphicsChannel(elementGraphicsChannelName, rpcConcurrency);\r\n else\r\n this.elementGraphicsRpc = new TileRequestChannel(elementGraphicsChannelName, this.rpcConcurrency);\r\n\r\n this.add(this.elementGraphicsRpc);\r\n\r\n this.iModelChannels = new IModelTileRequestChannels({\r\n concurrency: this.rpcConcurrency,\r\n usesHttp: undefined === rpcConcurrency,\r\n cacheMetadata,\r\n cacheConcurrency: this.httpConcurrency,\r\n });\r\n\r\n for (const channel of this.iModelChannels)\r\n this.add(channel);\r\n }\r\n\r\n /** The number of registered channels. */\r\n public get size(): number {\r\n return this._channels.size;\r\n }\r\n\r\n /** Look up a registered channel by its name. */\r\n public get(name: string): TileRequestChannel | undefined {\r\n return this._channels.get(name);\r\n }\r\n\r\n /** Return whether the specified channel has been registered. Primarily for debugging. */\r\n public has(channel: TileRequestChannel): boolean {\r\n const existing = this.get(channel.name);\r\n return existing !== undefined && existing === channel;\r\n }\r\n\r\n /** Add a new channel.\r\n * @throws Error if a channel by the same name has already been registered.\r\n */\r\n public add(channel: TileRequestChannel): void {\r\n if (this.get(channel.name))\r\n throw new Error(`Tile request channel ${channel.name} is already registered.`);\r\n\r\n this._channels.set(channel.name, channel);\r\n }\r\n\r\n /** Extract the host name from a URL for use as the name of the corresponding [[TileRequestChannel]].\r\n * @throws TypeError if `url` is a string and does not represent a valid URL.\r\n * @see [[getForHttp]] to obtain or register a channel for the host name.\r\n */\r\n public static getNameFromUrl(url: URL | string): string {\r\n if (typeof url === \"string\")\r\n url = new URL(url);\r\n\r\n return url.hostname;\r\n }\r\n\r\n /** Obtain a channel that requests content over HTTP using HTTP 1.1 limits on simultaneous connections.\r\n * If a channel with the specified name does not already exist, it will be created and registered.\r\n * @see [[getNameFromUrl]] to obtain a channel name corresponding to a hostname.\r\n */\r\n public getForHttp(name: string): TileRequestChannel {\r\n let channel = this.get(name);\r\n if (!channel)\r\n this.add(channel = new TileRequestChannel(name, this.httpConcurrency));\r\n\r\n return channel;\r\n }\r\n\r\n /** Iterator over all of the channels. */\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n return this._channels.values()[Symbol.iterator]();\r\n }\r\n\r\n /** The maximum number of active requests for a channel that uses an RpcInterface to satisfy its requests.\r\n * For web-based applications, this is the same as [[httpConcurrency]], but for [[IpcApp]]s it is determined by the number of workers threads allocated by the backend.\r\n */\r\n public get rpcConcurrency(): number {\r\n return this._rpcConcurrency;\r\n }\r\n\r\n /** @internal */\r\n public getIModelTileChannel(tile: IModelTile): TileRequestChannel {\r\n return this.iModelChannels.getChannelForTile(tile);\r\n }\r\n\r\n /** Chiefly for debugging.\r\n * @internal\r\n */\r\n public setRpcConcurrency(concurrency: number): void {\r\n this._rpcConcurrency = concurrency;\r\n this.iModelChannels.setRpcConcurrency(concurrency);\r\n this.elementGraphicsRpc.concurrency = concurrency;\r\n }\r\n\r\n /** Statistics intended primarily for debugging. */\r\n public get statistics(): TileRequestChannelStatistics {\r\n const stats = new TileRequestChannelStatistics();\r\n for (const channel of this)\r\n channel.statistics.addTo(stats);\r\n\r\n return stats;\r\n }\r\n\r\n /** Reset all [[statistics]] to zero. */\r\n public resetStatistics(): void {\r\n for (const channel of this)\r\n channel.resetStatistics();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.processQueue]] when it is about to start enqueuing new requests.\r\n * @internal\r\n */\r\n public swapPending(): void {\r\n for (const channel of this)\r\n channel.swapPending();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.processQueue]] when it is about to start enqueuing new requests.\r\n * @internal\r\n */\r\n public process(): void {\r\n for (const channel of this)\r\n channel.process();\r\n }\r\n\r\n /** Invoked by [[TileAdmin.onIModelClosed]].\r\n * @internal\r\n */\r\n public onIModelClosed(iModel: IModelConnection): void {\r\n for (const channel of this)\r\n channel.onIModelClosed(iModel);\r\n }\r\n\r\n /** Invoked by [[TileAdmin.onShutDown]].\r\n * @internal\r\n */\r\n public onShutDown(): void {\r\n for (const channel of this)\r\n channel.cancelAndClearAll();\r\n\r\n this._channels.clear();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisUtilities.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,uBAAuB,EAAkB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EACsC,iBAAiB,EAAoB,cAAc,EAAwB,wBAAwB,EAC/I,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,gBAAgB;AAChB,oBAAY,eAAe;IACzB,kBAAkB,MAAM;IACxB,YAAY,MAAM;IAClB,aAAa,MAAM;IACnB,YAAY,OAAO;IACnB,cAAc,OAAO;CACtB;AAED,gBAAgB;AAChB,qBAAa,eAAe;WAEZ,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAaxD,OAAO,CAAC,MAAM,CAAC,aAAa;WAMR,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;WAQlD,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;WA0BlD,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;WA0BpF,mBAAmB,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAqD,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;WAkBnI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiChJ,OAAO,CAAC,MAAM,CAAC,aAAa,CAA0B;WAClC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAoC3H,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;WACpC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC;CAoBvG"}
1
+ {"version":3,"file":"ArcGisUtilities.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,uBAAuB,EAAkB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EACsC,iBAAiB,EAAoB,cAAc,EAAwB,wBAAwB,EAC/I,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,gBAAgB;AAChB,oBAAY,eAAe;IACzB,kBAAkB,MAAM;IACxB,YAAY,MAAM;IAClB,aAAa,MAAM;IACnB,YAAY,OAAO;IACnB,cAAc,OAAO;CACtB;AAED,gBAAgB;AAChB,qBAAa,eAAe;WAEZ,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAaxD,OAAO,CAAC,MAAM,CAAC,aAAa;WAMR,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;WAQlD,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;WA0BlD,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;WA0BpF,mBAAmB,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAqD,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;WAkBnI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA8ChJ,OAAO,CAAC,MAAM,CAAC,aAAa,CAA0B;WAClC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAoC3H,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;WACpC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC;CAoBvG"}
@@ -128,6 +128,19 @@ export class ArcGisUtilities {
128
128
  else if (json.error.code === ArcGisErrorCode.InvalidCredentials)
129
129
  return { status: MapLayerSourceStatus.InvalidCredentials, authInfo: { authMethod: MapLayerAuthType.EsriToken } };
130
130
  }
131
+ // Check this service support map queries
132
+ let hasMapCapability = false;
133
+ try {
134
+ if (json.capabilities
135
+ && typeof json.capabilities === "string"
136
+ && json.capabilities.toLowerCase().includes("map")) {
137
+ hasMapCapability = true;
138
+ }
139
+ }
140
+ catch { }
141
+ if (!hasMapCapability) {
142
+ return { status: MapLayerSourceStatus.InvalidFormat };
143
+ }
131
144
  let subLayers;
132
145
  if (json.layers) {
133
146
  subLayers = new Array();
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.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\nimport { Angle } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { getJson, request, RequestBasicCredentials, RequestOptions, Response } from \"../../request/Request\";\r\nimport {\r\n ArcGisTokenClientType, ArcGisTokenManager, MapCartoRectangle, MapLayerAuthType, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation,\r\n} from \"../internal\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n/** @internal */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUtilities {\r\n\r\n public static hasTokenError(response: Response): boolean {\r\n if (response.header && (response.header[\"content-type\"] as string)?.toLowerCase().includes(\"json\")) {\r\n try {\r\n // Tile response returns byte array, so we need to check the response data type and convert accordingly.\r\n const json = ((response.body instanceof ArrayBuffer) ? JSON.parse(Buffer.from(response.body).toString()) : response.body);\r\n return (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken);\r\n } catch (_err) {\r\n return false; // that probably means we failed to convert byte array to JSON\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.create();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n public static async getEndpoint(url: string): Promise<any | undefined> {\r\n const capabilities = await request(`${url}?f=pjson`, {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n });\r\n return capabilities.body;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const services = await getJson(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\");\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const json = await getJson(`${url}?f=json`);\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const json = await getJson(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`);\r\n if (!json) break;\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n public static async validateSource(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n\r\n let authMethod: MapLayerAuthType = MapLayerAuthType.None;\r\n\r\n const json = await this.getServiceJson(url, credentials, ignoreCache);\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n authMethod = MapLayerAuthType.EsriToken;\r\n return { status: MapLayerSourceStatus.RequireAuth, authInfo: { authMethod, tokenEndpoint: undefined } };\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials, authInfo: { authMethod: MapLayerAuthType.EsriToken } };\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n private static _serviceCache = new Map<string, any>();\r\n public static async getServiceJson(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<any> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n try {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n };\r\n let tokenParam = \"\";\r\n if (credentials) {\r\n const token = await ArcGisTokenManager.getToken(url, credentials.user, credentials.password, { client: ArcGisTokenClientType.referer });\r\n if (token?.token) {\r\n tokenParam = `&token=${token.token}`;\r\n } else if (token?.error)\r\n return token; // An error occurred, return immediately\r\n }\r\n const finalUrl = `${url}?f=json${tokenParam}`;\r\n const data = await request(finalUrl, options);\r\n const json = data.body ?? undefined;\r\n\r\n // Cache the response only if it doesn't contain a token error.\r\n if (!ArcGisUtilities.hasTokenError(data)) {\r\n ArcGisUtilities._serviceCache.set(url, json);\r\n }\r\n\r\n return json;\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n private static _footprintCache = new Map<string, any>();\r\n public static async getFootprintJson(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const cached = ArcGisUtilities._footprintCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n\r\n try {\r\n let tokenParam = \"\";\r\n if (credentials) {\r\n const token = await ArcGisTokenManager.getToken(url, credentials.user, credentials.password, { client: ArcGisTokenClientType.referer });\r\n if (token?.token)\r\n tokenParam = `&token=${token.token}`;\r\n }\r\n const json = await getJson(`${url}?f=json&option=footprints&outSR=4326${tokenParam}`);\r\n ArcGisUtilities._footprintCache.set(url, json);\r\n return json;\r\n } catch (_error) {\r\n ArcGisUtilities._footprintCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.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\nimport { Angle } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { getJson, request, RequestBasicCredentials, RequestOptions, Response } from \"../../request/Request\";\r\nimport {\r\n ArcGisTokenClientType, ArcGisTokenManager, MapCartoRectangle, MapLayerAuthType, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation,\r\n} from \"../internal\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n/** @internal */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUtilities {\r\n\r\n public static hasTokenError(response: Response): boolean {\r\n if (response.header && (response.header[\"content-type\"] as string)?.toLowerCase().includes(\"json\")) {\r\n try {\r\n // Tile response returns byte array, so we need to check the response data type and convert accordingly.\r\n const json = ((response.body instanceof ArrayBuffer) ? JSON.parse(Buffer.from(response.body).toString()) : response.body);\r\n return (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken);\r\n } catch (_err) {\r\n return false; // that probably means we failed to convert byte array to JSON\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.create();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n public static async getEndpoint(url: string): Promise<any | undefined> {\r\n const capabilities = await request(`${url}?f=pjson`, {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n });\r\n return capabilities.body;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const services = await getJson(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\");\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const json = await getJson(`${url}?f=json`);\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const json = await getJson(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`);\r\n if (!json) break;\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n public static async validateSource(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n\r\n let authMethod: MapLayerAuthType = MapLayerAuthType.None;\r\n\r\n const json = await this.getServiceJson(url, credentials, ignoreCache);\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n authMethod = MapLayerAuthType.EsriToken;\r\n return { status: MapLayerSourceStatus.RequireAuth, authInfo: { authMethod, tokenEndpoint: undefined } };\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials, authInfo: { authMethod: MapLayerAuthType.EsriToken } };\r\n }\r\n\r\n // Check this service support map queries\r\n let hasMapCapability = false;\r\n try {\r\n if (json.capabilities\r\n && typeof json.capabilities === \"string\"\r\n && json.capabilities.toLowerCase().includes(\"map\")) {\r\n hasMapCapability = true;\r\n }\r\n } catch { }\r\n if (!hasMapCapability) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n private static _serviceCache = new Map<string, any>();\r\n public static async getServiceJson(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<any> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n try {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"json\",\r\n };\r\n let tokenParam = \"\";\r\n if (credentials) {\r\n const token = await ArcGisTokenManager.getToken(url, credentials.user, credentials.password, { client: ArcGisTokenClientType.referer });\r\n if (token?.token) {\r\n tokenParam = `&token=${token.token}`;\r\n } else if (token?.error)\r\n return token; // An error occurred, return immediately\r\n }\r\n const finalUrl = `${url}?f=json${tokenParam}`;\r\n const data = await request(finalUrl, options);\r\n const json = data.body ?? undefined;\r\n\r\n // Cache the response only if it doesn't contain a token error.\r\n if (!ArcGisUtilities.hasTokenError(data)) {\r\n ArcGisUtilities._serviceCache.set(url, json);\r\n }\r\n\r\n return json;\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n private static _footprintCache = new Map<string, any>();\r\n public static async getFootprintJson(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const cached = ArcGisUtilities._footprintCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n\r\n try {\r\n let tokenParam = \"\";\r\n if (credentials) {\r\n const token = await ArcGisTokenManager.getToken(url, credentials.user, credentials.password, { client: ArcGisTokenClientType.referer });\r\n if (token?.token)\r\n tokenParam = `&token=${token.token}`;\r\n }\r\n const json = await getJson(`${url}?f=json&option=footprints&outSR=4326${tokenParam}`);\r\n ArcGisUtilities._footprintCache.set(url, json);\r\n return json;\r\n } catch (_error) {\r\n ArcGisUtilities._footprintCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n}\r\n"]}
@@ -11,7 +11,6 @@ export declare class WmsMapLayerImageryProvider extends MapLayerImageryProvider
11
11
  private _allLayersRange?;
12
12
  private _subLayerRanges;
13
13
  private _baseUrl;
14
- private _isVersion1_1;
15
14
  private _crsSupport;
16
15
  constructor(settings: ImageMapLayerSettings);
17
16
  initialize(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"WmsMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EACL,kBAAkB,EAAqB,uBAAuB,EAAiC,MAAM,EAEtG,MAAM,gBAAgB,CAAC;AAOxB,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,gBAAgB;AAChB,qBAAa,0BAA2B,SAAQ,uBAAuB;IACrE,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAA0B;gBAEjC,QAAQ,EAAE,qBAAqB;IAKrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjD,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,+BAA+B;IAQhC,aAAa,IAAI,aAAa;IAyBxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBpE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBlI"}
1
+ {"version":3,"file":"WmsMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EACL,kBAAkB,EAAqB,uBAAuB,EAAiC,MAAM,EAEtG,MAAM,gBAAgB,CAAC;AAOxB,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,gBAAgB;AAChB,qBAAa,0BAA2B,SAAQ,uBAAuB;IACrE,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,WAAW,CAA0B;gBAEjC,QAAQ,EAAE,qBAAqB;IAKrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CjD,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,+BAA+B;IAQhC,aAAa,IAAI,aAAa;IAyBxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BpE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBlI"}
@@ -17,8 +17,6 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
17
17
  constructor(settings) {
18
18
  super(settings, false);
19
19
  this._subLayerRanges = new Map();
20
- // eslint-disable-next-line @typescript-eslint/naming-convention
21
- this._isVersion1_1 = false;
22
20
  this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);
23
21
  }
24
22
  async initialize() {
@@ -26,7 +24,6 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
26
24
  this._capabilities = await WmsCapabilities.create(this._baseUrl);
27
25
  if (undefined !== this._capabilities) {
28
26
  this._allLayersRange = this._capabilities.cartoRange;
29
- this._isVersion1_1 = this._capabilities.version !== undefined && 0 === this._capabilities.version.indexOf("1.1");
30
27
  if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {
31
28
  const mapCartoRanges = ((subLayer) => {
32
29
  if (Array.isArray(subLayer.children))
@@ -122,7 +119,7 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
122
119
  }
123
120
  // construct the Url from the desired Tile
124
121
  async constructUrl(row, column, zoomLevel) {
125
- var _a, _b;
122
+ var _a, _b, _c, _d, _e;
126
123
  let bboxString = "";
127
124
  let crsString = "";
128
125
  // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.
@@ -133,16 +130,20 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
133
130
  else if ((_b = this._crsSupport) === null || _b === void 0 ? void 0 : _b.support4326) {
134
131
  // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.
135
132
  // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.
136
- bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, true); // lat/long ordering
137
- crsString = "EPSG%3A4326";
133
+ // WMS 1.1.0 always requires the axis ordering to be longitude/latitude. *sigh*
134
+ if (this._capabilities !== undefined) {
135
+ bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, (_c = this._capabilities) === null || _c === void 0 ? void 0 : _c.isVersion13); // lat/long ordering
136
+ crsString = "EPSG%3A4326";
137
+ }
138
138
  }
139
139
  const layerString = this.getVisibleLayerString();
140
140
  if (bboxString.length === 0 || crsString.length === 0 || layerString.length === 0)
141
141
  return "";
142
- return `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=${crsString}&STYLES=&BBOX=${bboxString}`;
142
+ const crsParamName = ((_d = this._capabilities) === null || _d === void 0 ? void 0 : _d.isVersion13) ? "CRS" : "SRS";
143
+ return `${this._baseUrl}?SERVICE=WMS&VERSION=${(_e = this._capabilities) === null || _e === void 0 ? void 0 : _e.version}&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=${crsString}&STYLES=&BBOX=${bboxString}`;
143
144
  }
144
145
  async getToolTip(strings, quadId, carto, tree) {
145
- var _a;
146
+ var _a, _b, _c, _d;
146
147
  await super.getToolTip(strings, quadId, carto, tree);
147
148
  const infoFormats = (_a = this._capabilities) === null || _a === void 0 ? void 0 : _a.featureInfoFormats;
148
149
  if (!doToolTips || undefined === infoFormats)
@@ -158,8 +159,9 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
158
159
  const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d));
159
160
  const x = Math.floor(.5 + fraction.x * this.tileSize);
160
161
  const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);
161
- const coordinateString = (false && this._isVersion1_1) ? `&x=${x}&y=${y}` : `&i=${x}&j=${y}`;
162
- const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;
162
+ const coordinateString = ((_b = this._capabilities) === null || _b === void 0 ? void 0 : _b.isVersion13) ? `&i=${x}&j=${y}` : `&x=${x}&y=${y}`;
163
+ const crsParamName = ((_c = this._capabilities) === null || _c === void 0 ? void 0 : _c.isVersion13) ? "CRS" : "SRS";
164
+ const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=${(_d = this._capabilities) === null || _d === void 0 ? void 0 : _d.version}&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;
163
165
  return this.toolTipFromUrl(strings, getFeatureUrl);
164
166
  }
165
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WmsMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.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\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Cartographic, ImageMapLayerSettings, MapSubLayerSettings, ServerError } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ImageryMapTileTree, MapCartoRectangle, MapLayerImageryProvider, MapLayerImageryProviderStatus, QuadId, WmsCapabilities,\r\n WmsCapability, WmsUtilities,\r\n} from \"../../internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet doToolTips = true;\r\n\r\nconst scratchPoint2d = Point2d.createZero();\r\n\r\n/** @internal */\r\nexport interface WmsCrsSupport {\r\n support3857: boolean;\r\n support4326: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WmsMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _capabilities?: WmsCapabilities;\r\n private _allLayersRange?: MapCartoRectangle;\r\n private _subLayerRanges = new Map<string, MapCartoRectangle>();\r\n private _baseUrl: string;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private _isVersion1_1 = false;\r\n private _crsSupport: WmsCrsSupport|undefined;\r\n\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n try {\r\n this._capabilities = await WmsCapabilities.create(this._baseUrl);\r\n if (undefined !== this._capabilities) {\r\n this._allLayersRange = this._capabilities.cartoRange;\r\n this._isVersion1_1 = this._capabilities.version !== undefined && 0 === this._capabilities.version.indexOf(\"1.1\");\r\n if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {\r\n const mapCartoRanges = ((subLayer: WmsCapability.SubLayer) => {\r\n if (Array.isArray(subLayer.children))\r\n subLayer.children.forEach((child) => mapCartoRanges(child));\r\n else if (subLayer.cartoRange)\r\n this._subLayerRanges.set(subLayer.name, subLayer.cartoRange);\r\n });\r\n this._capabilities.layer.subLayers.forEach((subLayer) => mapCartoRanges(subLayer));\r\n this._settings.subLayers.forEach((subLayer) => {\r\n if (subLayer.isNamed && this._settings.isSubLayerVisible(subLayer)) {\r\n const subLayerRange = this._subLayerRanges.get(subLayer.name);\r\n if (subLayerRange)\r\n if (this.cartoRange)\r\n this.cartoRange.extendRange(subLayerRange);\r\n else\r\n this.cartoRange = subLayerRange.clone();\r\n }\r\n });\r\n }\r\n\r\n if (!this.cartoRange)\r\n this.cartoRange = this._allLayersRange;\r\n\r\n this._crsSupport = this.getCrsSupport();\r\n }\r\n } catch (error: any) {\r\n // Don't throw error if unauthorized status:\r\n // We want the tile tree to be created, so that end-user can get feedback on which layer is missing credentials.\r\n // When credentials will be provided, a new provider will be created, and initialization should be fine.\r\n if (error?.status === 401) {\r\n this.setStatus(MapLayerImageryProviderStatus.RequireAuth);\r\n } else {\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n }\r\n }\r\n }\r\n\r\n private getVisibleLayerString() {\r\n const layerNames = this.getVisibleLayers().map((layer)=>layer.name);\r\n return layerNames.join(\"%2C\");\r\n }\r\n\r\n private getVisibleLayers(): MapSubLayerSettings[] {\r\n return this._settings.subLayers.filter((subLayer) => this._settings.isSubLayerVisible(subLayer) && subLayer.isNamed);\r\n }\r\n\r\n private getVisibleLayersSrs() {\r\n const visibleLayers = this.getVisibleLayers();\r\n const visibleLayerNames = visibleLayers.map((layer) => layer.name);\r\n return this._capabilities?.getSubLayersCrs(visibleLayerNames);\r\n }\r\n\r\n private getQueryableLayers(): string[] {\r\n const layerNames = new Array<string>();\r\n const getQueryableSubLayers = ((subLayer: WmsCapability.SubLayer) => {\r\n if (!subLayer)\r\n return;\r\n\r\n if (subLayer.queryable)\r\n layerNames.push(subLayer.name);\r\n\r\n subLayer.children?.forEach((childSubLayer) => { getQueryableSubLayers(childSubLayer); });\r\n });\r\n this._capabilities?.layer?.subLayers?.forEach((subLayer) => { getQueryableSubLayers(subLayer); });\r\n return layerNames;\r\n }\r\n\r\n private getVisibleQueryableLayersString(): string {\r\n const layers = new Array<string>();\r\n const queryable = this.getQueryableLayers();\r\n const visibleLayerNames = this.getVisibleLayers().map((layer) => layer.name);\r\n queryable.forEach((layer: string) => { if (visibleLayerNames.includes(layer)) layers.push(layer); });\r\n return layers.join(\"%2C\");\r\n }\r\n\r\n public getCrsSupport(): WmsCrsSupport {\r\n const layersCrs = this.getVisibleLayersSrs();\r\n\r\n let support3857: boolean|undefined;\r\n let support4326: boolean|undefined;\r\n if (layersCrs) {\r\n for (const [_layerName, crs] of layersCrs) {\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"3857\");}) === undefined ) {\r\n support3857 = false;\r\n } else if (support3857 === undefined) {\r\n support3857 = true;\r\n }\r\n\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"4326\");}) === undefined ) {\r\n support4326 = false;\r\n } else if (support4326 === undefined) {\r\n support4326 = true;\r\n }\r\n }\r\n }\r\n\r\n return {support3857: support3857 ?? false, support4326: support4326 ?? false};\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n\r\n let bboxString =\"\";\r\n let crsString =\"\";\r\n\r\n // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.\r\n if (this._crsSupport?.support3857) {\r\n bboxString = this.getEPSG3857ExtentString(row, column, zoomLevel);\r\n crsString= \"EPSG%3A3857\";\r\n } else if (this._crsSupport?.support4326) {\r\n // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.\r\n // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.\r\n bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, true); // lat/long ordering\r\n crsString= \"EPSG%3A4326\";\r\n }\r\n\r\n const layerString = this.getVisibleLayerString();\r\n\r\n if (bboxString.length === 0 || crsString.length === 0 ||layerString.length === 0)\r\n return \"\";\r\n\r\n return `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=${crsString}&STYLES=&BBOX=${bboxString}`;\r\n }\r\n\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n const infoFormats = this._capabilities?.featureInfoFormats;\r\n if (!doToolTips || undefined === infoFormats)\r\n return;\r\n let formatString = infoFormats.find((format) => format === \"text/html\");\r\n if (!formatString) formatString = infoFormats[0];\r\n\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const layerString = this.getVisibleQueryableLayersString();\r\n if (layerString.length === 0)\r\n return;\r\n const rectangle = tree.getTileRectangle(quadId);\r\n const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d))!;\r\n const x = Math.floor(.5 + fraction.x * this.tileSize);\r\n const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);\r\n const coordinateString = (false && this._isVersion1_1) ? `&x=${x}&y=${y}` : `&i=${x}&j=${y}`;\r\n const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;\r\n return this.toolTipFromUrl(strings, getFeatureUrl);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WmsMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.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\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Cartographic, ImageMapLayerSettings, MapSubLayerSettings, ServerError } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ImageryMapTileTree, MapCartoRectangle, MapLayerImageryProvider, MapLayerImageryProviderStatus, QuadId, WmsCapabilities,\r\n WmsCapability, WmsUtilities,\r\n} from \"../../internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet doToolTips = true;\r\n\r\nconst scratchPoint2d = Point2d.createZero();\r\n\r\n/** @internal */\r\nexport interface WmsCrsSupport {\r\n support3857: boolean;\r\n support4326: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WmsMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _capabilities?: WmsCapabilities;\r\n private _allLayersRange?: MapCartoRectangle;\r\n private _subLayerRanges = new Map<string, MapCartoRectangle>();\r\n private _baseUrl: string;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private _crsSupport: WmsCrsSupport|undefined;\r\n\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n try {\r\n this._capabilities = await WmsCapabilities.create(this._baseUrl);\r\n if (undefined !== this._capabilities) {\r\n this._allLayersRange = this._capabilities.cartoRange;\r\n if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {\r\n const mapCartoRanges = ((subLayer: WmsCapability.SubLayer) => {\r\n if (Array.isArray(subLayer.children))\r\n subLayer.children.forEach((child) => mapCartoRanges(child));\r\n else if (subLayer.cartoRange)\r\n this._subLayerRanges.set(subLayer.name, subLayer.cartoRange);\r\n });\r\n this._capabilities.layer.subLayers.forEach((subLayer) => mapCartoRanges(subLayer));\r\n this._settings.subLayers.forEach((subLayer) => {\r\n if (subLayer.isNamed && this._settings.isSubLayerVisible(subLayer)) {\r\n const subLayerRange = this._subLayerRanges.get(subLayer.name);\r\n if (subLayerRange)\r\n if (this.cartoRange)\r\n this.cartoRange.extendRange(subLayerRange);\r\n else\r\n this.cartoRange = subLayerRange.clone();\r\n }\r\n });\r\n }\r\n\r\n if (!this.cartoRange)\r\n this.cartoRange = this._allLayersRange;\r\n\r\n this._crsSupport = this.getCrsSupport();\r\n }\r\n } catch (error: any) {\r\n // Don't throw error if unauthorized status:\r\n // We want the tile tree to be created, so that end-user can get feedback on which layer is missing credentials.\r\n // When credentials will be provided, a new provider will be created, and initialization should be fine.\r\n if (error?.status === 401) {\r\n this.setStatus(MapLayerImageryProviderStatus.RequireAuth);\r\n } else {\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n }\r\n }\r\n }\r\n\r\n private getVisibleLayerString() {\r\n const layerNames = this.getVisibleLayers().map((layer)=>layer.name);\r\n return layerNames.join(\"%2C\");\r\n }\r\n\r\n private getVisibleLayers(): MapSubLayerSettings[] {\r\n return this._settings.subLayers.filter((subLayer) => this._settings.isSubLayerVisible(subLayer) && subLayer.isNamed);\r\n }\r\n\r\n private getVisibleLayersSrs() {\r\n const visibleLayers = this.getVisibleLayers();\r\n const visibleLayerNames = visibleLayers.map((layer) => layer.name);\r\n return this._capabilities?.getSubLayersCrs(visibleLayerNames);\r\n }\r\n\r\n private getQueryableLayers(): string[] {\r\n const layerNames = new Array<string>();\r\n const getQueryableSubLayers = ((subLayer: WmsCapability.SubLayer) => {\r\n if (!subLayer)\r\n return;\r\n\r\n if (subLayer.queryable)\r\n layerNames.push(subLayer.name);\r\n\r\n subLayer.children?.forEach((childSubLayer) => { getQueryableSubLayers(childSubLayer); });\r\n });\r\n this._capabilities?.layer?.subLayers?.forEach((subLayer) => { getQueryableSubLayers(subLayer); });\r\n return layerNames;\r\n }\r\n\r\n private getVisibleQueryableLayersString(): string {\r\n const layers = new Array<string>();\r\n const queryable = this.getQueryableLayers();\r\n const visibleLayerNames = this.getVisibleLayers().map((layer) => layer.name);\r\n queryable.forEach((layer: string) => { if (visibleLayerNames.includes(layer)) layers.push(layer); });\r\n return layers.join(\"%2C\");\r\n }\r\n\r\n public getCrsSupport(): WmsCrsSupport {\r\n const layersCrs = this.getVisibleLayersSrs();\r\n\r\n let support3857: boolean|undefined;\r\n let support4326: boolean|undefined;\r\n if (layersCrs) {\r\n for (const [_layerName, crs] of layersCrs) {\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"3857\");}) === undefined ) {\r\n support3857 = false;\r\n } else if (support3857 === undefined) {\r\n support3857 = true;\r\n }\r\n\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"4326\");}) === undefined ) {\r\n support4326 = false;\r\n } else if (support4326 === undefined) {\r\n support4326 = true;\r\n }\r\n }\r\n }\r\n\r\n return {support3857: support3857 ?? false, support4326: support4326 ?? false};\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n\r\n let bboxString =\"\";\r\n let crsString =\"\";\r\n\r\n // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.\r\n if (this._crsSupport?.support3857) {\r\n bboxString = this.getEPSG3857ExtentString(row, column, zoomLevel);\r\n crsString= \"EPSG%3A3857\";\r\n } else if (this._crsSupport?.support4326) {\r\n // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.\r\n // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.\r\n // WMS 1.1.0 always requires the axis ordering to be longitude/latitude. *sigh*\r\n if (this._capabilities !== undefined) {\r\n bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, this._capabilities?.isVersion13); // lat/long ordering\r\n crsString= \"EPSG%3A4326\";\r\n }\r\n\r\n }\r\n\r\n const layerString = this.getVisibleLayerString();\r\n\r\n if (bboxString.length === 0 || crsString.length === 0 ||layerString.length === 0)\r\n return \"\";\r\n\r\n const crsParamName = this._capabilities?.isVersion13 ? \"CRS\" : \"SRS\";\r\n return `${this._baseUrl}?SERVICE=WMS&VERSION=${this._capabilities?.version}&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=${crsString}&STYLES=&BBOX=${bboxString}`;\r\n }\r\n\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n const infoFormats = this._capabilities?.featureInfoFormats;\r\n if (!doToolTips || undefined === infoFormats)\r\n return;\r\n let formatString = infoFormats.find((format) => format === \"text/html\");\r\n if (!formatString) formatString = infoFormats[0];\r\n\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const layerString = this.getVisibleQueryableLayersString();\r\n if (layerString.length === 0)\r\n return;\r\n const rectangle = tree.getTileRectangle(quadId);\r\n const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d))!;\r\n const x = Math.floor(.5 + fraction.x * this.tileSize);\r\n const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);\r\n const coordinateString = this._capabilities?.isVersion13 ? `&i=${x}&j=${y}` : `&x=${x}&y=${y}`;\r\n const crsParamName = this._capabilities?.isVersion13 ? \"CRS\" : \"SRS\";\r\n const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=${this._capabilities?.version}&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;\r\n return this.toolTipFromUrl(strings, getFeatureUrl);\r\n }\r\n}\r\n"]}
@@ -321,7 +321,7 @@ class MapTreeSupplier {
321
321
  cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);
322
322
  if (0 === cmp) {
323
323
  cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);
324
- if (0 === cmp && !lhs.isOverlay) {
324
+ if (0 === cmp) {
325
325
  cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);
326
326
  if (0 === cmp) {
327
327
  cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);
@@ -533,7 +533,7 @@ export class MapTileTreeReference extends TileTreeReference {
533
533
  }
534
534
  const id = {
535
535
  tileUserId: this._tileUserId,
536
- applyTerrain: this.settings.applyTerrain && !this.isOverlay && !this._isDrape,
536
+ applyTerrain: this.settings.applyTerrain && !this._isDrape,
537
537
  terrainProviderName: this.settings.terrainSettings.providerName,
538
538
  terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,
539
539
  terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,