@itwin/core-frontend 4.0.0-dev.4 → 4.0.0-dev.40

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 (606) hide show
  1. package/CHANGELOG.md +67 -37
  2. package/lib/cjs/AccuDraw.js +1 -1
  3. package/lib/cjs/AccuDraw.js.map +1 -1
  4. package/lib/cjs/AccuSnap.js +3 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.js +9 -11
  7. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  8. package/lib/cjs/DisplayStyleState.js +8 -12
  9. package/lib/cjs/DisplayStyleState.js.map +1 -1
  10. package/lib/cjs/DrawingViewState.js +4 -6
  11. package/lib/cjs/DrawingViewState.js.map +1 -1
  12. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  13. package/lib/cjs/ElementLocateManager.js +2 -0
  14. package/lib/cjs/ElementLocateManager.js.map +1 -1
  15. package/lib/cjs/EnvironmentDecorations.js +2 -3
  16. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  17. package/lib/cjs/FlashSettings.js +3 -4
  18. package/lib/cjs/FlashSettings.js.map +1 -1
  19. package/lib/cjs/GeoServices.d.ts +57 -5
  20. package/lib/cjs/GeoServices.d.ts.map +1 -1
  21. package/lib/cjs/GeoServices.js +180 -155
  22. package/lib/cjs/GeoServices.js.map +1 -1
  23. package/lib/cjs/IModelApp.d.ts +1 -3
  24. package/lib/cjs/IModelApp.d.ts.map +1 -1
  25. package/lib/cjs/IModelApp.js +20 -24
  26. package/lib/cjs/IModelApp.js.map +1 -1
  27. package/lib/cjs/IModelConnection.d.ts +1 -1
  28. package/lib/cjs/IModelConnection.js +2 -2
  29. package/lib/cjs/IModelConnection.js.map +1 -1
  30. package/lib/cjs/IpcApp.js +1 -1
  31. package/lib/cjs/IpcApp.js.map +1 -1
  32. package/lib/cjs/LocalhostIpcApp.js +3 -4
  33. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  34. package/lib/cjs/ModelState.js +2 -3
  35. package/lib/cjs/ModelState.js.map +1 -1
  36. package/lib/cjs/NativeApp.d.ts +1 -1
  37. package/lib/cjs/NativeApp.js +4 -7
  38. package/lib/cjs/NativeApp.js.map +1 -1
  39. package/lib/cjs/NoRenderApp.d.ts +11 -4
  40. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  41. package/lib/cjs/NoRenderApp.js +14 -8
  42. package/lib/cjs/NoRenderApp.js.map +1 -1
  43. package/lib/cjs/PlanarClipMaskState.js +1 -1
  44. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  45. package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
  46. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  47. package/lib/cjs/SelectionSet.d.ts +0 -1
  48. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  49. package/lib/cjs/SelectionSet.js +0 -1
  50. package/lib/cjs/SelectionSet.js.map +1 -1
  51. package/lib/cjs/SheetViewState.js +15 -23
  52. package/lib/cjs/SheetViewState.js.map +1 -1
  53. package/lib/cjs/Tiles.js +2 -2
  54. package/lib/cjs/Tiles.js.map +1 -1
  55. package/lib/cjs/ViewContext.js +1 -1
  56. package/lib/cjs/ViewContext.js.map +1 -1
  57. package/lib/cjs/ViewCreator2d.js +4 -5
  58. package/lib/cjs/ViewCreator2d.js.map +1 -1
  59. package/lib/cjs/ViewCreator3d.js +5 -5
  60. package/lib/cjs/ViewCreator3d.js.map +1 -1
  61. package/lib/cjs/ViewRect.d.ts +1 -1
  62. package/lib/cjs/ViewRect.d.ts.map +1 -1
  63. package/lib/cjs/ViewRect.js +1 -1
  64. package/lib/cjs/ViewRect.js.map +1 -1
  65. package/lib/cjs/ViewState.js +17 -24
  66. package/lib/cjs/ViewState.js.map +1 -1
  67. package/lib/cjs/Viewport.js +23 -33
  68. package/lib/cjs/Viewport.js.map +1 -1
  69. package/lib/cjs/extension/ExtensionImpl.js +1 -1
  70. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  71. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  72. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  73. package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
  74. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  75. package/lib/cjs/render/FeatureSymbology.js +1 -2
  76. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  77. package/lib/cjs/render/GraphicBuilder.js +7 -9
  78. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  79. package/lib/cjs/render/MockRender.js +1 -2
  80. package/lib/cjs/render/MockRender.js.map +1 -1
  81. package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
  82. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  83. package/lib/cjs/render/RealityMeshParams.d.ts +2 -2
  84. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  85. package/lib/cjs/render/RealityMeshParams.js +8 -11
  86. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  87. package/lib/cjs/render/RenderPlan.js +1 -1
  88. package/lib/cjs/render/RenderPlan.js.map +1 -1
  89. package/lib/cjs/render/RenderSystem.js +1 -2
  90. package/lib/cjs/render/RenderSystem.js.map +1 -1
  91. package/lib/cjs/render/VisibleFeature.js +2 -4
  92. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  93. package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
  94. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  95. package/lib/cjs/render/primitives/EdgeParams.js +6 -7
  96. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  97. package/lib/cjs/render/primitives/PolylineParams.js +2 -3
  98. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  99. package/lib/cjs/render/primitives/VertexKey.js +1 -1
  100. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  101. package/lib/cjs/render/primitives/VertexTable.js +1 -1
  102. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  103. package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
  104. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  105. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
  106. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  107. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
  108. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  109. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
  110. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  111. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
  112. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  113. package/lib/cjs/render/webgl/BranchState.js +9 -10
  114. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  115. package/lib/cjs/render/webgl/EDL.js +17 -21
  116. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  117. package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
  118. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  119. package/lib/cjs/render/webgl/Graphic.js +3 -5
  120. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  121. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
  122. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  123. package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
  124. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  125. package/lib/cjs/render/webgl/Mesh.js +7 -10
  126. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  127. package/lib/cjs/render/webgl/MeshData.js +1 -2
  128. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  129. package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
  130. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  131. package/lib/cjs/render/webgl/RealityMesh.js +5 -8
  132. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  133. package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
  134. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  135. package/lib/cjs/render/webgl/RenderCommands.js +7 -8
  136. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  137. package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
  138. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  139. package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
  140. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  141. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  142. package/lib/cjs/render/webgl/SolarShadowMap.js +1 -11
  143. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  144. package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
  145. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  146. package/lib/cjs/render/webgl/System.d.ts +0 -1
  147. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  148. package/lib/cjs/render/webgl/System.js +12 -17
  149. package/lib/cjs/render/webgl/System.js.map +1 -1
  150. package/lib/cjs/render/webgl/Target.js +9 -14
  151. package/lib/cjs/render/webgl/Target.js.map +1 -1
  152. package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
  153. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  154. package/lib/cjs/render/webgl/Texture.js +1 -2
  155. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  156. package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
  157. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  158. package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
  159. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  160. package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
  161. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  162. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
  163. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  164. package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
  165. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
  167. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  168. package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
  169. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  170. package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
  171. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  172. package/lib/cjs/request/Request.d.ts.map +1 -1
  173. package/lib/cjs/request/Request.js.map +1 -1
  174. package/lib/cjs/tile/ClassifierTileTree.js +3 -3
  175. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  176. package/lib/cjs/tile/GltfReader.js +62 -76
  177. package/lib/cjs/tile/GltfReader.js.map +1 -1
  178. package/lib/cjs/tile/IModelTile.js +2 -3
  179. package/lib/cjs/tile/IModelTile.js.map +1 -1
  180. package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
  181. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  182. package/lib/cjs/tile/IModelTileTree.js +5 -9
  183. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  184. package/lib/cjs/tile/ImdlReader.js +13 -17
  185. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  186. package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
  187. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  188. package/lib/cjs/tile/PntsReader.js +4 -5
  189. package/lib/cjs/tile/PntsReader.js.map +1 -1
  190. package/lib/cjs/tile/PrimaryTileTree.js +22 -32
  191. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  192. package/lib/cjs/tile/RealityModelTileTree.js +12 -19
  193. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  194. package/lib/cjs/tile/RealityTile.d.ts +1 -1
  195. package/lib/cjs/tile/RealityTile.js +4 -6
  196. package/lib/cjs/tile/RealityTile.js.map +1 -1
  197. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  198. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  199. package/lib/cjs/tile/RealityTileTree.d.ts +1 -1
  200. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  201. package/lib/cjs/tile/RealityTileTree.js +2 -3
  202. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  203. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +3 -5
  204. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  205. package/lib/cjs/tile/Tile.js +1 -1
  206. package/lib/cjs/tile/Tile.js.map +1 -1
  207. package/lib/cjs/tile/TileAdmin.d.ts +5 -1
  208. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  209. package/lib/cjs/tile/TileAdmin.js +22 -27
  210. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  211. package/lib/cjs/tile/TileDrawArgs.js +3 -6
  212. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  213. package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
  214. package/lib/cjs/tile/TileRequest.js +2 -1
  215. package/lib/cjs/tile/TileRequest.js.map +1 -1
  216. package/lib/cjs/tile/TileRequestChannel.d.ts +23 -1
  217. package/lib/cjs/tile/TileRequestChannel.d.ts.map +1 -1
  218. package/lib/cjs/tile/TileRequestChannel.js +28 -7
  219. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  220. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  221. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  222. package/lib/cjs/tile/TileTree.js +2 -3
  223. package/lib/cjs/tile/TileTree.js.map +1 -1
  224. package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
  225. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  226. package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
  227. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  228. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
  230. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  231. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
  232. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js +17 -5
  234. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  235. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  236. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  237. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  238. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
  239. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  240. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  241. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  242. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  243. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  244. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  245. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  246. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  247. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  248. package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
  249. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  250. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -1
  251. package/lib/cjs/tile/map/MapCartoRectangle.js +2 -2
  252. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  253. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
  254. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  255. package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
  256. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  257. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
  258. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  259. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  260. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  261. package/lib/cjs/tile/map/MapTile.d.ts +10 -2
  262. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  263. package/lib/cjs/tile/map/MapTile.js +34 -12
  264. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  265. package/lib/cjs/tile/map/MapTileLoader.js +1 -1
  266. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  267. package/lib/cjs/tile/map/MapTileTree.d.ts +3 -2
  268. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  269. package/lib/cjs/tile/map/MapTileTree.js +24 -26
  270. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  271. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
  272. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  273. package/lib/cjs/tile/map/MapTilingScheme.d.ts +1 -1
  274. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  275. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  276. package/lib/cjs/tile/map/QuadId.d.ts +1 -1
  277. package/lib/cjs/tile/map/QuadId.js +1 -1
  278. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  279. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +9 -4
  280. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  281. package/lib/cjs/tile/map/TerrainMeshProvider.js +6 -1
  282. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  283. package/lib/cjs/tile/map/TerrainProvider.d.ts +2 -2
  284. package/lib/cjs/tile/map/TerrainProvider.js +1 -1
  285. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  286. package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
  287. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  288. package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
  289. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  290. package/lib/cjs/tools/ClipViewTool.js +1 -1
  291. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  292. package/lib/cjs/tools/MeasureTool.js +2 -4
  293. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  294. package/lib/cjs/tools/PrimitiveTool.js +2 -3
  295. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  296. package/lib/cjs/tools/SelectTool.js +1 -2
  297. package/lib/cjs/tools/SelectTool.js.map +1 -1
  298. package/lib/cjs/tools/Tool.js +2 -3
  299. package/lib/cjs/tools/Tool.js.map +1 -1
  300. package/lib/cjs/tools/ToolAdmin.js +2 -4
  301. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  302. package/lib/cjs/tools/ViewTool.js +3 -3
  303. package/lib/cjs/tools/ViewTool.js.map +1 -1
  304. package/lib/esm/AccuDraw.js +1 -1
  305. package/lib/esm/AccuDraw.js.map +1 -1
  306. package/lib/esm/AccuSnap.js +3 -3
  307. package/lib/esm/AccuSnap.js.map +1 -1
  308. package/lib/esm/BriefcaseConnection.js +9 -11
  309. package/lib/esm/BriefcaseConnection.js.map +1 -1
  310. package/lib/esm/DisplayStyleState.js +8 -12
  311. package/lib/esm/DisplayStyleState.js.map +1 -1
  312. package/lib/esm/DrawingViewState.js +4 -6
  313. package/lib/esm/DrawingViewState.js.map +1 -1
  314. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  315. package/lib/esm/ElementLocateManager.js +2 -0
  316. package/lib/esm/ElementLocateManager.js.map +1 -1
  317. package/lib/esm/EnvironmentDecorations.js +2 -3
  318. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  319. package/lib/esm/FlashSettings.js +3 -4
  320. package/lib/esm/FlashSettings.js.map +1 -1
  321. package/lib/esm/GeoServices.d.ts +57 -5
  322. package/lib/esm/GeoServices.d.ts.map +1 -1
  323. package/lib/esm/GeoServices.js +178 -154
  324. package/lib/esm/GeoServices.js.map +1 -1
  325. package/lib/esm/IModelApp.d.ts +1 -3
  326. package/lib/esm/IModelApp.d.ts.map +1 -1
  327. package/lib/esm/IModelApp.js +20 -24
  328. package/lib/esm/IModelApp.js.map +1 -1
  329. package/lib/esm/IModelConnection.d.ts +1 -1
  330. package/lib/esm/IModelConnection.js +2 -2
  331. package/lib/esm/IModelConnection.js.map +1 -1
  332. package/lib/esm/IpcApp.js +1 -1
  333. package/lib/esm/IpcApp.js.map +1 -1
  334. package/lib/esm/LocalhostIpcApp.js +3 -4
  335. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  336. package/lib/esm/ModelState.js +2 -3
  337. package/lib/esm/ModelState.js.map +1 -1
  338. package/lib/esm/NativeApp.d.ts +1 -1
  339. package/lib/esm/NativeApp.js +4 -7
  340. package/lib/esm/NativeApp.js.map +1 -1
  341. package/lib/esm/NoRenderApp.d.ts +11 -4
  342. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  343. package/lib/esm/NoRenderApp.js +12 -6
  344. package/lib/esm/NoRenderApp.js.map +1 -1
  345. package/lib/esm/PlanarClipMaskState.js +1 -1
  346. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  347. package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
  348. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  349. package/lib/esm/SelectionSet.d.ts +0 -1
  350. package/lib/esm/SelectionSet.d.ts.map +1 -1
  351. package/lib/esm/SelectionSet.js +0 -1
  352. package/lib/esm/SelectionSet.js.map +1 -1
  353. package/lib/esm/SheetViewState.js +15 -23
  354. package/lib/esm/SheetViewState.js.map +1 -1
  355. package/lib/esm/Tiles.js +2 -2
  356. package/lib/esm/Tiles.js.map +1 -1
  357. package/lib/esm/ViewContext.js +1 -1
  358. package/lib/esm/ViewContext.js.map +1 -1
  359. package/lib/esm/ViewCreator2d.js +4 -5
  360. package/lib/esm/ViewCreator2d.js.map +1 -1
  361. package/lib/esm/ViewCreator3d.js +5 -5
  362. package/lib/esm/ViewCreator3d.js.map +1 -1
  363. package/lib/esm/ViewRect.d.ts +1 -1
  364. package/lib/esm/ViewRect.d.ts.map +1 -1
  365. package/lib/esm/ViewRect.js +1 -1
  366. package/lib/esm/ViewRect.js.map +1 -1
  367. package/lib/esm/ViewState.js +17 -24
  368. package/lib/esm/ViewState.js.map +1 -1
  369. package/lib/esm/Viewport.js +23 -33
  370. package/lib/esm/Viewport.js.map +1 -1
  371. package/lib/esm/extension/ExtensionImpl.js +1 -1
  372. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  373. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  374. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  375. package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
  376. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  377. package/lib/esm/render/FeatureSymbology.js +1 -2
  378. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  379. package/lib/esm/render/GraphicBuilder.js +7 -9
  380. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  381. package/lib/esm/render/MockRender.js +1 -2
  382. package/lib/esm/render/MockRender.js.map +1 -1
  383. package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
  384. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  385. package/lib/esm/render/RealityMeshParams.d.ts +2 -2
  386. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  387. package/lib/esm/render/RealityMeshParams.js +8 -11
  388. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  389. package/lib/esm/render/RenderPlan.js +1 -1
  390. package/lib/esm/render/RenderPlan.js.map +1 -1
  391. package/lib/esm/render/RenderSystem.js +1 -2
  392. package/lib/esm/render/RenderSystem.js.map +1 -1
  393. package/lib/esm/render/VisibleFeature.js +2 -4
  394. package/lib/esm/render/VisibleFeature.js.map +1 -1
  395. package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
  396. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  397. package/lib/esm/render/primitives/EdgeParams.js +6 -7
  398. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  399. package/lib/esm/render/primitives/PolylineParams.js +2 -3
  400. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  401. package/lib/esm/render/primitives/VertexKey.js +1 -1
  402. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  403. package/lib/esm/render/primitives/VertexTable.js +1 -1
  404. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  405. package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
  406. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  407. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
  408. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  409. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
  410. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  411. package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
  412. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  413. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
  414. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  415. package/lib/esm/render/webgl/BranchState.js +9 -10
  416. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  417. package/lib/esm/render/webgl/EDL.js +17 -21
  418. package/lib/esm/render/webgl/EDL.js.map +1 -1
  419. package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
  420. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  421. package/lib/esm/render/webgl/Graphic.js +3 -5
  422. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  423. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
  424. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  425. package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
  426. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  427. package/lib/esm/render/webgl/Mesh.js +7 -10
  428. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  429. package/lib/esm/render/webgl/MeshData.js +1 -2
  430. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  431. package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
  432. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  433. package/lib/esm/render/webgl/RealityMesh.js +5 -8
  434. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  435. package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
  436. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  437. package/lib/esm/render/webgl/RenderCommands.js +7 -8
  438. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  439. package/lib/esm/render/webgl/SceneCompositor.js +7 -9
  440. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  441. package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
  442. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  443. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  444. package/lib/esm/render/webgl/SolarShadowMap.js +1 -11
  445. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  446. package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
  447. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  448. package/lib/esm/render/webgl/System.d.ts +0 -1
  449. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  450. package/lib/esm/render/webgl/System.js +12 -17
  451. package/lib/esm/render/webgl/System.js.map +1 -1
  452. package/lib/esm/render/webgl/Target.js +9 -14
  453. package/lib/esm/render/webgl/Target.js.map +1 -1
  454. package/lib/esm/render/webgl/TargetGraphics.js +1 -2
  455. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  456. package/lib/esm/render/webgl/Texture.js +1 -2
  457. package/lib/esm/render/webgl/Texture.js.map +1 -1
  458. package/lib/esm/render/webgl/ThematicSensors.js +2 -4
  459. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  460. package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
  461. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  462. package/lib/esm/render/webgl/glsl/Animation.js +6 -9
  463. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  464. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
  465. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  466. package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
  467. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  468. package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
  469. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  470. package/lib/esm/render/webgl/glsl/Surface.js +1 -2
  471. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  472. package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
  473. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  474. package/lib/esm/request/Request.d.ts.map +1 -1
  475. package/lib/esm/request/Request.js.map +1 -1
  476. package/lib/esm/tile/ClassifierTileTree.js +3 -3
  477. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  478. package/lib/esm/tile/GltfReader.js +62 -76
  479. package/lib/esm/tile/GltfReader.js.map +1 -1
  480. package/lib/esm/tile/IModelTile.js +2 -3
  481. package/lib/esm/tile/IModelTile.js.map +1 -1
  482. package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
  483. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  484. package/lib/esm/tile/IModelTileTree.js +5 -9
  485. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  486. package/lib/esm/tile/ImdlReader.js +13 -17
  487. package/lib/esm/tile/ImdlReader.js.map +1 -1
  488. package/lib/esm/tile/OrbitGtTileTree.js +2 -2
  489. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  490. package/lib/esm/tile/PntsReader.js +4 -5
  491. package/lib/esm/tile/PntsReader.js.map +1 -1
  492. package/lib/esm/tile/PrimaryTileTree.js +22 -32
  493. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  494. package/lib/esm/tile/RealityModelTileTree.js +12 -19
  495. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  496. package/lib/esm/tile/RealityTile.d.ts +1 -1
  497. package/lib/esm/tile/RealityTile.js +4 -6
  498. package/lib/esm/tile/RealityTile.js.map +1 -1
  499. package/lib/esm/tile/RealityTileLoader.js +2 -2
  500. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  501. package/lib/esm/tile/RealityTileTree.d.ts +1 -1
  502. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  503. package/lib/esm/tile/RealityTileTree.js +2 -3
  504. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  505. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +3 -5
  506. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  507. package/lib/esm/tile/Tile.js +1 -1
  508. package/lib/esm/tile/Tile.js.map +1 -1
  509. package/lib/esm/tile/TileAdmin.d.ts +5 -1
  510. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  511. package/lib/esm/tile/TileAdmin.js +22 -27
  512. package/lib/esm/tile/TileAdmin.js.map +1 -1
  513. package/lib/esm/tile/TileDrawArgs.js +3 -6
  514. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  515. package/lib/esm/tile/TileRequest.d.ts.map +1 -1
  516. package/lib/esm/tile/TileRequest.js +2 -1
  517. package/lib/esm/tile/TileRequest.js.map +1 -1
  518. package/lib/esm/tile/TileRequestChannel.d.ts +23 -1
  519. package/lib/esm/tile/TileRequestChannel.d.ts.map +1 -1
  520. package/lib/esm/tile/TileRequestChannel.js +28 -7
  521. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  522. package/lib/esm/tile/TileRequestChannels.js +1 -1
  523. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  524. package/lib/esm/tile/TileTree.js +2 -3
  525. package/lib/esm/tile/TileTree.js.map +1 -1
  526. package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
  527. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  528. package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
  529. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  530. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  531. package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
  532. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  533. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
  534. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  535. package/lib/esm/tile/map/EllipsoidTerrainProvider.js +17 -5
  536. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  537. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  538. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  539. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  540. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
  541. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  542. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  543. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  544. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  545. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  546. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  547. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  548. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  549. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  550. package/lib/esm/tile/map/ImageryTileTree.js +10 -5
  551. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  552. package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -1
  553. package/lib/esm/tile/map/MapCartoRectangle.js +2 -2
  554. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  555. package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
  556. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  557. package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
  558. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  559. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
  560. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  561. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  562. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  563. package/lib/esm/tile/map/MapTile.d.ts +10 -2
  564. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  565. package/lib/esm/tile/map/MapTile.js +34 -12
  566. package/lib/esm/tile/map/MapTile.js.map +1 -1
  567. package/lib/esm/tile/map/MapTileLoader.js +1 -1
  568. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  569. package/lib/esm/tile/map/MapTileTree.d.ts +3 -2
  570. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  571. package/lib/esm/tile/map/MapTileTree.js +24 -26
  572. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  573. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
  574. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  575. package/lib/esm/tile/map/MapTilingScheme.d.ts +1 -1
  576. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  577. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  578. package/lib/esm/tile/map/QuadId.d.ts +1 -1
  579. package/lib/esm/tile/map/QuadId.js +1 -1
  580. package/lib/esm/tile/map/QuadId.js.map +1 -1
  581. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +9 -4
  582. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  583. package/lib/esm/tile/map/TerrainMeshProvider.js +6 -1
  584. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  585. package/lib/esm/tile/map/TerrainProvider.d.ts +2 -2
  586. package/lib/esm/tile/map/TerrainProvider.js +1 -1
  587. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  588. package/lib/esm/tile/map/WmsCapabilities.js +4 -5
  589. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  590. package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
  591. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  592. package/lib/esm/tools/ClipViewTool.js +1 -1
  593. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  594. package/lib/esm/tools/MeasureTool.js +2 -4
  595. package/lib/esm/tools/MeasureTool.js.map +1 -1
  596. package/lib/esm/tools/PrimitiveTool.js +2 -3
  597. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  598. package/lib/esm/tools/SelectTool.js +1 -2
  599. package/lib/esm/tools/SelectTool.js.map +1 -1
  600. package/lib/esm/tools/Tool.js +2 -3
  601. package/lib/esm/tools/Tool.js.map +1 -1
  602. package/lib/esm/tools/ToolAdmin.js +2 -4
  603. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  604. package/lib/esm/tools/ViewTool.js +3 -3
  605. package/lib/esm/tools/ViewTool.js.map +1 -1
  606. package/package.json +24 -26
@@ -1 +1 @@
1
- {"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.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 { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapCartoRectangle } from \"../internal\";\r\n\r\n/** A scheme for converting between two representations of the surface of the Earth: an ellipsoid and a rectangular [tiled map](https://en.wikipedia.org/wiki/Tiled_web_map).\r\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\r\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\r\n *\r\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\r\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\r\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\r\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\r\n * @beta\r\n */\r\nexport abstract class MapTilingScheme {\r\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\r\n * 0 corresponds to the south pole and 1 to the north.\r\n */\r\n public readonly rowZeroAtNorthPole: boolean;\r\n /** The number of tiles in the X direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesX;\r\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesY;\r\n private readonly _scratchFraction = Point2d.createZero();\r\n private readonly _scratchPoint2d = Point2d.createZero();\r\n\r\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\r\n public longitudeToXFraction(longitude: number) {\r\n return longitude / Angle.pi2Radians + .5;\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\r\n public xFractionToLongitude(xFraction: number) {\r\n return Angle.pi2Radians * (xFraction - .5);\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\r\n public abstract yFractionToLatitude(yFraction: number): number;\r\n\r\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\r\n public abstract latitudeToYFraction(latitude: number): number;\r\n\r\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\r\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\r\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\r\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\r\n }\r\n\r\n /** The total number of tiles in the X direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfXTilesAtLevel(level: number) {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\r\n }\r\n\r\n /** The total number of tiles in the Y direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfYTilesAtLevel(level: number): number {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\r\n }\r\n\r\n /** @alpha */\r\n public get rootLevel() {\r\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfXChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfYChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\r\n public tileXToFraction(x: number, level: number): number {\r\n return x / this.getNumberOfXTilesAtLevel(level);\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\r\n public tileYToFraction(y: number, level: number): number {\r\n return y / this.getNumberOfYTilesAtLevel(level);\r\n }\r\n\r\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\r\n public xFractionToTileX(xFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfXTilesAtLevel(level);\r\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\r\n public yFractionToTileY(yFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfYTilesAtLevel(level);\r\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\r\n public tileXToLongitude(x: number, level: number) {\r\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\r\n public tileYToLatitude(y: number, level: number) {\r\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\r\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\r\n if (undefined === result)\r\n result = Point2d.createZero();\r\n\r\n result.x = this.tileXToFraction(x, level);\r\n result.y = this.tileYToFraction(y, level);\r\n\r\n return result;\r\n }\r\n\r\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\r\n * @param x The X component of the QuadId.\r\n * @param y The Y component of the QuadId.\r\n * @param level The level component of the QuadId.\r\n * @param height The elevation above the ellipsoid.\r\n * @returns the corresponding cartographic position.\r\n */\r\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\r\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\r\n return this.fractionToCartographic(pt.x, pt.y, result, height);\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\r\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\r\n if (level < 0)\r\n return MapCartoRectangle.createMaximum();\r\n\r\n return MapCartoRectangle.fromRadians(\r\n this.tileXToLongitude(x, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\r\n this.tileXToLongitude(x + 1, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\r\n result\r\n );\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\r\n public tileBordersNorthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\r\n public tileBordersSouthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\r\n }\r\n\r\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\r\n * X and Y axes.\r\n */\r\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\r\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\r\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\r\n\r\n }\r\n\r\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\r\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\r\n result.longitude = this.xFractionToLongitude(xFraction);\r\n result.latitude = this.yFractionToLatitude(yFraction);\r\n result.height = height;\r\n return result;\r\n }\r\n\r\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\r\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\r\n result.x = this.longitudeToXFraction(longitudeRadians);\r\n result.y = this.latitudeToYFraction(latitudeRadians);\r\n return result;\r\n }\r\n\r\n /** @alpha */\r\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d {\r\n const cartoGraphic = Cartographic.fromEcef(point)!;\r\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\r\n }\r\n\r\n /** @alpha */\r\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\r\n const dbToEcef = ecefToDb.inverse()!;\r\n\r\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\r\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\r\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\r\n\r\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\r\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\r\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\r\n\r\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\r\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\r\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\r\n\r\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\r\n const mercatorToDb = dbToMercator.inverse();\r\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\r\n }\r\n\r\n /** @alpha */\r\n protected yFractionFlip(fraction: number) {\r\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\r\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\r\n * @beta\r\n */\r\nexport class GeographicTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n return this.yFractionFlip(.5 + latitude / Math.PI);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class WebMercatorProjection {\r\n /**\r\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\r\n * in the range -PI/2 to PI/2.\r\n *\r\n * @param {Number} mercatorAngle The angle to convert.\r\n * @returns {Number} The geodetic latitude in radians.\r\n */\r\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\r\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\r\n }\r\n\r\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\r\n\r\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude)\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n else if (latitude < -WebMercatorProjection.maximumLatitude)\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n\r\n const sinLatitude = Math.sin(latitude);\r\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\r\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\r\n * @beta\r\n */\r\nexport class WebMercatorTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\r\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude) {\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n }\r\n const sinLatitude = Math.sin(latitude);\r\n return (0.5 - Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude)) / (4.0 * Angle.piRadians)); // https://msdn.microsoft.com/en-us/library/bb259689.aspx\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.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 { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapCartoRectangle } from \"../internal\";\r\n\r\n/** A scheme for converting between two representations of the surface of the Earth: an ellipsoid and a rectangular [tiled map](https://en.wikipedia.org/wiki/Tiled_web_map).\r\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\r\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\r\n *\r\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\r\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\r\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\r\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\r\n * @public\r\n */\r\nexport abstract class MapTilingScheme {\r\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\r\n * 0 corresponds to the south pole and 1 to the north.\r\n */\r\n public readonly rowZeroAtNorthPole: boolean;\r\n /** The number of tiles in the X direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesX;\r\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesY;\r\n private readonly _scratchFraction = Point2d.createZero();\r\n private readonly _scratchPoint2d = Point2d.createZero();\r\n\r\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\r\n public longitudeToXFraction(longitude: number) {\r\n return longitude / Angle.pi2Radians + .5;\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\r\n public xFractionToLongitude(xFraction: number) {\r\n return Angle.pi2Radians * (xFraction - .5);\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\r\n public abstract yFractionToLatitude(yFraction: number): number;\r\n\r\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\r\n public abstract latitudeToYFraction(latitude: number): number;\r\n\r\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\r\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\r\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\r\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\r\n }\r\n\r\n /** The total number of tiles in the X direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfXTilesAtLevel(level: number) {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\r\n }\r\n\r\n /** The total number of tiles in the Y direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfYTilesAtLevel(level: number): number {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\r\n }\r\n\r\n /** @alpha */\r\n public get rootLevel() {\r\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfXChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfYChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\r\n public tileXToFraction(x: number, level: number): number {\r\n return x / this.getNumberOfXTilesAtLevel(level);\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\r\n public tileYToFraction(y: number, level: number): number {\r\n return y / this.getNumberOfYTilesAtLevel(level);\r\n }\r\n\r\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\r\n public xFractionToTileX(xFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfXTilesAtLevel(level);\r\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\r\n public yFractionToTileY(yFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfYTilesAtLevel(level);\r\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\r\n public tileXToLongitude(x: number, level: number) {\r\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\r\n public tileYToLatitude(y: number, level: number) {\r\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\r\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\r\n if (undefined === result)\r\n result = Point2d.createZero();\r\n\r\n result.x = this.tileXToFraction(x, level);\r\n result.y = this.tileYToFraction(y, level);\r\n\r\n return result;\r\n }\r\n\r\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\r\n * @param x The X component of the QuadId.\r\n * @param y The Y component of the QuadId.\r\n * @param level The level component of the QuadId.\r\n * @param height The elevation above the ellipsoid.\r\n * @returns the corresponding cartographic position.\r\n */\r\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\r\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\r\n return this.fractionToCartographic(pt.x, pt.y, result, height);\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\r\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\r\n if (level < 0)\r\n return MapCartoRectangle.createMaximum();\r\n\r\n return MapCartoRectangle.fromRadians(\r\n this.tileXToLongitude(x, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\r\n this.tileXToLongitude(x + 1, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\r\n result\r\n );\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\r\n public tileBordersNorthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\r\n public tileBordersSouthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\r\n }\r\n\r\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\r\n * X and Y axes.\r\n */\r\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\r\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\r\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\r\n\r\n }\r\n\r\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\r\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\r\n result.longitude = this.xFractionToLongitude(xFraction);\r\n result.latitude = this.yFractionToLatitude(yFraction);\r\n result.height = height;\r\n return result;\r\n }\r\n\r\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\r\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\r\n result.x = this.longitudeToXFraction(longitudeRadians);\r\n result.y = this.latitudeToYFraction(latitudeRadians);\r\n return result;\r\n }\r\n\r\n /** @alpha */\r\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d {\r\n const cartoGraphic = Cartographic.fromEcef(point)!;\r\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\r\n }\r\n\r\n /** @alpha */\r\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\r\n const dbToEcef = ecefToDb.inverse()!;\r\n\r\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\r\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\r\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\r\n\r\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\r\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\r\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\r\n\r\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\r\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\r\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\r\n\r\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\r\n const mercatorToDb = dbToMercator.inverse();\r\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\r\n }\r\n\r\n /** @alpha */\r\n protected yFractionFlip(fraction: number) {\r\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\r\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\r\n * @beta\r\n */\r\nexport class GeographicTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n return this.yFractionFlip(.5 + latitude / Math.PI);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class WebMercatorProjection {\r\n /**\r\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\r\n * in the range -PI/2 to PI/2.\r\n *\r\n * @param {Number} mercatorAngle The angle to convert.\r\n * @returns {Number} The geodetic latitude in radians.\r\n */\r\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\r\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\r\n }\r\n\r\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\r\n\r\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude)\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n else if (latitude < -WebMercatorProjection.maximumLatitude)\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n\r\n const sinLatitude = Math.sin(latitude);\r\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\r\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\r\n * @beta\r\n */\r\nexport class WebMercatorTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\r\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude) {\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n }\r\n const sinLatitude = Math.sin(latitude);\r\n return (0.5 - Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude)) / (4.0 * Angle.piRadians)); // https://msdn.microsoft.com/en-us/library/bb259689.aspx\r\n }\r\n}\r\n"]}
@@ -6,7 +6,7 @@ import { MapTilingScheme } from "../internal";
6
6
  /** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
7
7
  * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on
8
8
  * level L+1.
9
- * @beta
9
+ * @public
10
10
  */
11
11
  export declare class QuadId {
12
12
  /** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */
@@ -16,7 +16,7 @@ const scratchCartographic2 = core_common_1.Cartographic.createZero();
16
16
  /** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
17
17
  * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on
18
18
  * level L+1.
19
- * @beta
19
+ * @public
20
20
  */
21
21
  class QuadId {
22
22
  /** Construct a new QuadId. The inputs are expected to be non-negative integers. */
@@ -1 +1 @@
1
- {"version":3,"file":"QuadId.js","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.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 { assert, compareNumbers } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Range2d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { MapTilingScheme } from \"../internal\";\r\n\r\nconst scratchCartographic1 = Cartographic.createZero();\r\nconst scratchCartographic2 = Cartographic.createZero();\r\n\r\n/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].\r\n * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on\r\n * level L+1.\r\n * @beta\r\n */\r\nexport class QuadId {\r\n /** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */\r\n public level: number;\r\n /** The node's position along the X axis as a non-negative integer. */\r\n public column: number;\r\n /** The node's position along the Y axis as a non-negative integer. */\r\n public row: number;\r\n\r\n /** @alpha */\r\n public get isValid() {\r\n return this.level >= 0;\r\n }\r\n\r\n /** @alpha */\r\n public static createFromContentId(stringId: string) {\r\n const idParts = stringId.split(\"_\");\r\n assert(idParts.length === 3);\r\n if (3 !== idParts.length)\r\n return new QuadId(-1, -1, -1);\r\n\r\n return new QuadId(parseInt(idParts[0], 10), parseInt(idParts[1], 10), parseInt(idParts[2], 10));\r\n }\r\n\r\n /** @alpha */\r\n public get contentId(): string {\r\n return QuadId.getTileContentId(this.level, this.column, this.row);\r\n }\r\n\r\n /** @alpha */\r\n public static getTileContentId(level: number, column: number, row: number): string {\r\n return `${level}_${column}_${row}`;\r\n }\r\n\r\n /** @alpha */\r\n public get debugString(): string {\r\n return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`;\r\n }\r\n\r\n /** Construct a new QuadId. The inputs are expected to be non-negative integers. */\r\n public constructor(level: number, column: number, row: number) {\r\n this.level = level;\r\n this.column = column;\r\n this.row = row;\r\n }\r\n\r\n /** Compute the QuadIds corresponding to this node's four child nodes. */\r\n public getChildIds(columnCount = 2, rowCount = 2): QuadId[] {\r\n const childIds = [];\r\n const level = this.level + 1;\r\n const column = this.column * 2;\r\n const row = this.row * 2;\r\n for (let j = 0; j < rowCount; j++)\r\n for (let i = 0; i < columnCount; i++)\r\n childIds.push(new QuadId(level, column + i, row + j));\r\n\r\n return childIds;\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeDegrees(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"degrees\");\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeRadians(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"radians\");\r\n }\r\n\r\n private _getLatLongRange(mapTilingScheme: MapTilingScheme, units: \"radians\" | \"degrees\"): Range2d {\r\n const range = Range2d.createNull();\r\n const factor = \"degrees\" === units ? Angle.degreesPerRadian : 1;\r\n\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n range.extendXY(scratchCartographic1.longitude * factor, scratchCartographic1.latitude * factor);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n range.extendXY(scratchCartographic2.longitude * factor, scratchCartographic2.latitude * factor);\r\n\r\n return range;\r\n }\r\n\r\n /** @alpha */\r\n public getAngleSweep(mapTilingScheme: MapTilingScheme): { longitude: AngleSweep, latitude: AngleSweep } {\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n return {\r\n longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude),\r\n latitude: AngleSweep.createStartEndRadians(\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude),\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)\r\n ),\r\n };\r\n }\r\n\r\n /** Returns true if this node is adjacent to the south pole according to the specified tiling scheme. */\r\n public bordersSouthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersSouthPole(this.row, this.level);\r\n }\r\n\r\n /** Returns true if this node is adjacent to the north pole according to the specified tiling scheme. */\r\n public bordersNorthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersNorthPole(this.row, this.level);\r\n }\r\n\r\n /** Compares this Id to another according to the conventions of an [OrderedComparator]($bentley). */\r\n public compare(other: QuadId): number {\r\n return compareNumbers(this.level, other.level) ||\r\n compareNumbers(this.row, other.row) ||\r\n compareNumbers(this.column, other.column);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"QuadId.js","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.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 { assert, compareNumbers } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Range2d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { MapTilingScheme } from \"../internal\";\r\n\r\nconst scratchCartographic1 = Cartographic.createZero();\r\nconst scratchCartographic2 = Cartographic.createZero();\r\n\r\n/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].\r\n * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on\r\n * level L+1.\r\n * @public\r\n */\r\nexport class QuadId {\r\n /** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */\r\n public level: number;\r\n /** The node's position along the X axis as a non-negative integer. */\r\n public column: number;\r\n /** The node's position along the Y axis as a non-negative integer. */\r\n public row: number;\r\n\r\n /** @alpha */\r\n public get isValid() {\r\n return this.level >= 0;\r\n }\r\n\r\n /** @alpha */\r\n public static createFromContentId(stringId: string) {\r\n const idParts = stringId.split(\"_\");\r\n assert(idParts.length === 3);\r\n if (3 !== idParts.length)\r\n return new QuadId(-1, -1, -1);\r\n\r\n return new QuadId(parseInt(idParts[0], 10), parseInt(idParts[1], 10), parseInt(idParts[2], 10));\r\n }\r\n\r\n /** @alpha */\r\n public get contentId(): string {\r\n return QuadId.getTileContentId(this.level, this.column, this.row);\r\n }\r\n\r\n /** @alpha */\r\n public static getTileContentId(level: number, column: number, row: number): string {\r\n return `${level}_${column}_${row}`;\r\n }\r\n\r\n /** @alpha */\r\n public get debugString(): string {\r\n return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`;\r\n }\r\n\r\n /** Construct a new QuadId. The inputs are expected to be non-negative integers. */\r\n public constructor(level: number, column: number, row: number) {\r\n this.level = level;\r\n this.column = column;\r\n this.row = row;\r\n }\r\n\r\n /** Compute the QuadIds corresponding to this node's four child nodes. */\r\n public getChildIds(columnCount = 2, rowCount = 2): QuadId[] {\r\n const childIds = [];\r\n const level = this.level + 1;\r\n const column = this.column * 2;\r\n const row = this.row * 2;\r\n for (let j = 0; j < rowCount; j++)\r\n for (let i = 0; i < columnCount; i++)\r\n childIds.push(new QuadId(level, column + i, row + j));\r\n\r\n return childIds;\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeDegrees(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"degrees\");\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeRadians(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"radians\");\r\n }\r\n\r\n private _getLatLongRange(mapTilingScheme: MapTilingScheme, units: \"radians\" | \"degrees\"): Range2d {\r\n const range = Range2d.createNull();\r\n const factor = \"degrees\" === units ? Angle.degreesPerRadian : 1;\r\n\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n range.extendXY(scratchCartographic1.longitude * factor, scratchCartographic1.latitude * factor);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n range.extendXY(scratchCartographic2.longitude * factor, scratchCartographic2.latitude * factor);\r\n\r\n return range;\r\n }\r\n\r\n /** @alpha */\r\n public getAngleSweep(mapTilingScheme: MapTilingScheme): { longitude: AngleSweep, latitude: AngleSweep } {\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n return {\r\n longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude),\r\n latitude: AngleSweep.createStartEndRadians(\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude),\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)\r\n ),\r\n };\r\n }\r\n\r\n /** Returns true if this node is adjacent to the south pole according to the specified tiling scheme. */\r\n public bordersSouthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersSouthPole(this.row, this.level);\r\n }\r\n\r\n /** Returns true if this node is adjacent to the north pole according to the specified tiling scheme. */\r\n public bordersNorthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersNorthPole(this.row, this.level);\r\n }\r\n\r\n /** Compares this Id to another according to the conventions of an [OrderedComparator]($bentley). */\r\n public compare(other: QuadId): number {\r\n return compareNumbers(this.level, other.level) ||\r\n compareNumbers(this.row, other.row) ||\r\n compareNumbers(this.column, other.column);\r\n }\r\n}\r\n"]}
@@ -6,7 +6,7 @@ import { ScreenViewport } from "../../Viewport";
6
6
  import { RealityMeshParams } from "../../render/RealityMeshParams";
7
7
  import { MapCartoRectangle, MapTile, MapTilingScheme, QuadId } from "../internal";
8
8
  /** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].
9
- * @beta
9
+ * @public
10
10
  */
11
11
  export interface TerrainMeshProviderOptions {
12
12
  /** A scale factor to be applied to the height of the terrain meshes.
@@ -29,7 +29,7 @@ export interface TerrainMeshProviderOptions {
29
29
  wantNormals: boolean;
30
30
  }
31
31
  /** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].
32
- * @beta
32
+ * @public
33
33
  */
34
34
  export interface RequestMeshDataArgs {
35
35
  /** The tile for which the terrain mesh is being requested. */
@@ -38,7 +38,7 @@ export interface RequestMeshDataArgs {
38
38
  isCanceled(): boolean;
39
39
  }
40
40
  /** Arguments supplied to [[TerrainMeshProvider.readMesh]].
41
- * @beta
41
+ * @public
42
42
  */
43
43
  export interface ReadMeshArgs {
44
44
  /** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */
@@ -52,7 +52,12 @@ export interface ReadMeshArgs {
52
52
  * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].
53
53
  * The display system drapes background map imagery onto these meshes.
54
54
  * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.
55
- * @beta
55
+ * @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,
56
+ * it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].
57
+ * @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.
58
+ * @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example
59
+ * implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].
60
+ * @public
56
61
  */
57
62
  export declare abstract class TerrainMeshProvider {
58
63
  /** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,0JAA0J;IAC1J,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,GAAG,CAAC;IACV,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mJAAmJ;IACnJ,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,8BAAsB,mBAAmB;IACvC;;OAEG;aACa,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAExE;;OAEG;aACa,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAEpF;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAExE;;;OAGG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD,iEAAiE;IACjE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAI9G,4GAA4G;IAC5G,aAAoB,YAAY,IAAI,eAAe,CAAC;IAEpD;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAC9C"}
1
+ {"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,0JAA0J;IAC1J,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,GAAG,CAAC;IACV,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mJAAmJ;IACnJ,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,8BAAsB,mBAAmB;IACvC;;OAEG;aACa,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAExE;;OAEG;aACa,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAEpF;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAExE;;;OAGG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD,iEAAiE;IACjE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAI9G,4GAA4G;IAC5G,aAAoB,YAAY,IAAI,eAAe,CAAC;IAEpD;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAC9C"}
@@ -13,7 +13,12 @@ const ApproximateTerrainHeights_1 = require("../../ApproximateTerrainHeights");
13
13
  * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].
14
14
  * The display system drapes background map imagery onto these meshes.
15
15
  * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.
16
- * @beta
16
+ * @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,
17
+ * it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].
18
+ * @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.
19
+ * @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example
20
+ * implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].
21
+ * @public
17
22
  */
18
23
  class TerrainMeshProvider {
19
24
  /** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;AAqD5E;;;;;GAKG;AACH,MAAsB,mBAAmB;IAWvC;;;OAGG;IACI,YAAY,CAAC,MAAwB,EAAE,GAAmB,IAAU,CAAC;IAE5E;;;OAGG;IACI,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD;;;OAGG;IACI,mBAAmB,CAAC,MAAc,EAAE,SAA4B,EAAE,MAAe;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,qDAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qDAAyB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3J,CAAC;IAKD;;;OAGG;IACI,aAAa,CAAC,KAAc,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;CAChE;AA5CD,kDA4CC","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 { Range1d } from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport {\r\n MapCartoRectangle, MapTile, MapTilingScheme, QuadId,\r\n} from \"../internal\";\r\n\r\n/** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].\r\n * @beta\r\n */\r\nexport interface TerrainMeshProviderOptions {\r\n /** A scale factor to be applied to the height of the terrain meshes.\r\n * @see [TerrainSettings.exaggeration]($common).\r\n */\r\n exaggeration: number;\r\n /** If true, the meshes should include \"skirts\" around their edges.\r\n * Skirts add new geometry to each of the four sides of a tile, extending downward. This helps to hide small cracks between adjacent tiles.\r\n * However, if transparency is applied to the terrain then, rather than hiding slight imperfections, the skirts themselves become visible.\r\n * So skirts are only requested when the terrain is displayed without transparency.\r\n *\r\n * A [[TerrainMeshProvider]] can ignore the request for skirts if it considers the risk of visible cracks acceptable.\r\n */\r\n wantSkirts: boolean;\r\n /** If true, each vertex of the terrain meshes should include a normal vector. Normals are requested when lighting or [ThematicDisplay]($common) are applied\r\n * to the terrain.\r\n *\r\n * A [[TerrainmeshProvider can ignore the request to produce normals, but doing so will prevent lighting and thematic display from applying to its terrain meshes.\r\n */\r\n wantNormals: boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].\r\n * @beta\r\n */\r\nexport interface RequestMeshDataArgs {\r\n /** The tile for which the terrain mesh is being requested. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `requestMeshData` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.readMesh]].\r\n * @beta\r\n */\r\nexport interface ReadMeshArgs {\r\n /** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */\r\n data: any;\r\n /** The tile for which the terrain mesh is being generated. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `readMesh` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Provides 3d meshes representing terrain for display in a [[Viewport]].\r\n * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].\r\n * The display system drapes background map imagery onto these meshes.\r\n * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.\r\n * @beta\r\n */\r\nexport abstract class TerrainMeshProvider {\r\n /** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.\r\n * Return `undefined` if no mesh data could be obtained.\r\n */\r\n public abstract requestMeshData(args: RequestMeshDataArgs): Promise<any>;\r\n\r\n /** Convert the terrain data supplied by [[requestMeshData]] into a terrain mesh.\r\n * @see [[RealityMeshParamsBuilder]] to simplify the process of creating the mesh.\r\n */\r\n public abstract readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined>;\r\n\r\n /** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.\r\n * For example, a provider that produces meshes from [Bing Maps](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/) would be required to\r\n * disclose any copyrighted data used in the production of those meshes.\r\n */\r\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\r\n\r\n /** Return whether terrain data can be obtained for the [[MapTile]] specified by `quadId`. If it returns false, a terrain mesh will instead be produced for\r\n * that tile by up-sampling the terrain mesh provided by its parent tile.\r\n * The default implementation returns `true`.\r\n */\r\n public isTileAvailable(_quadId: QuadId): boolean {\r\n return true;\r\n }\r\n\r\n /** Returns the maximum level of detail of the terrain meshes. */\r\n public abstract get maxDepth(): number;\r\n\r\n /** Returns the minimum and maximum elevation of the terrain within the specified region of the Earth.\r\n * This range is used for culling terrain meshes that do not intersect the view frustum.\r\n * The default implementation uses a fast approximation.\r\n */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return (quadId.level < ApproximateTerrainHeights.maxLevel) ? ApproximateTerrainHeights.instance.getMinimumMaximumHeights(rectangle) : parent.heightRange;\r\n }\r\n\r\n /** The tiling scheme used by this provider to convert between tile coordinates and geodetic coordinates. */\r\n public abstract get tilingScheme(): MapTilingScheme;\r\n\r\n /** Returns true if the specified tile should always be loaded. Some tiles contain required metadata and hence should always be loaded.\r\n * For example, a parent tile might contain information about the availability or height ranges of its child tiles that can be used to\r\n * implement [[isTileAvailable]] or [[getChildHeightRange]], respectively.\r\n */\r\n public forceTileLoad(_tile: MapTile): boolean { return false; }\r\n}\r\n"]}
1
+ {"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;AAqD5E;;;;;;;;;;GAUG;AACH,MAAsB,mBAAmB;IAWvC;;;OAGG;IACI,YAAY,CAAC,MAAwB,EAAE,GAAmB,IAAU,CAAC;IAE5E;;;OAGG;IACI,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD;;;OAGG;IACI,mBAAmB,CAAC,MAAc,EAAE,SAA4B,EAAE,MAAe;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,qDAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qDAAyB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3J,CAAC;IAKD;;;OAGG;IACI,aAAa,CAAC,KAAc,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;CAChE;AA5CD,kDA4CC","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 { Range1d } from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport {\r\n MapCartoRectangle, MapTile, MapTilingScheme, QuadId,\r\n} from \"../internal\";\r\n\r\n/** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].\r\n * @public\r\n */\r\nexport interface TerrainMeshProviderOptions {\r\n /** A scale factor to be applied to the height of the terrain meshes.\r\n * @see [TerrainSettings.exaggeration]($common).\r\n */\r\n exaggeration: number;\r\n /** If true, the meshes should include \"skirts\" around their edges.\r\n * Skirts add new geometry to each of the four sides of a tile, extending downward. This helps to hide small cracks between adjacent tiles.\r\n * However, if transparency is applied to the terrain then, rather than hiding slight imperfections, the skirts themselves become visible.\r\n * So skirts are only requested when the terrain is displayed without transparency.\r\n *\r\n * A [[TerrainMeshProvider]] can ignore the request for skirts if it considers the risk of visible cracks acceptable.\r\n */\r\n wantSkirts: boolean;\r\n /** If true, each vertex of the terrain meshes should include a normal vector. Normals are requested when lighting or [ThematicDisplay]($common) are applied\r\n * to the terrain.\r\n *\r\n * A [[TerrainmeshProvider can ignore the request to produce normals, but doing so will prevent lighting and thematic display from applying to its terrain meshes.\r\n */\r\n wantNormals: boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].\r\n * @public\r\n */\r\nexport interface RequestMeshDataArgs {\r\n /** The tile for which the terrain mesh is being requested. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `requestMeshData` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.readMesh]].\r\n * @public\r\n */\r\nexport interface ReadMeshArgs {\r\n /** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */\r\n data: any;\r\n /** The tile for which the terrain mesh is being generated. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `readMesh` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Provides 3d meshes representing terrain for display in a [[Viewport]].\r\n * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].\r\n * The display system drapes background map imagery onto these meshes.\r\n * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.\r\n * @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,\r\n * it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].\r\n * @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.\r\n * @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example\r\n * implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].\r\n * @public\r\n */\r\nexport abstract class TerrainMeshProvider {\r\n /** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.\r\n * Return `undefined` if no mesh data could be obtained.\r\n */\r\n public abstract requestMeshData(args: RequestMeshDataArgs): Promise<any>;\r\n\r\n /** Convert the terrain data supplied by [[requestMeshData]] into a terrain mesh.\r\n * @see [[RealityMeshParamsBuilder]] to simplify the process of creating the mesh.\r\n */\r\n public abstract readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined>;\r\n\r\n /** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.\r\n * For example, a provider that produces meshes from [Bing Maps](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/) would be required to\r\n * disclose any copyrighted data used in the production of those meshes.\r\n */\r\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\r\n\r\n /** Return whether terrain data can be obtained for the [[MapTile]] specified by `quadId`. If it returns false, a terrain mesh will instead be produced for\r\n * that tile by up-sampling the terrain mesh provided by its parent tile.\r\n * The default implementation returns `true`.\r\n */\r\n public isTileAvailable(_quadId: QuadId): boolean {\r\n return true;\r\n }\r\n\r\n /** Returns the maximum level of detail of the terrain meshes. */\r\n public abstract get maxDepth(): number;\r\n\r\n /** Returns the minimum and maximum elevation of the terrain within the specified region of the Earth.\r\n * This range is used for culling terrain meshes that do not intersect the view frustum.\r\n * The default implementation uses a fast approximation.\r\n */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return (quadId.level < ApproximateTerrainHeights.maxLevel) ? ApproximateTerrainHeights.instance.getMinimumMaximumHeights(rectangle) : parent.heightRange;\r\n }\r\n\r\n /** The tiling scheme used by this provider to convert between tile coordinates and geodetic coordinates. */\r\n public abstract get tilingScheme(): MapTilingScheme;\r\n\r\n /** Returns true if the specified tile should always be loaded. Some tiles contain required metadata and hence should always be loaded.\r\n * For example, a parent tile might contain information about the availability or height ranges of its child tiles that can be used to\r\n * implement [[isTileAvailable]] or [[getChildHeightRange]], respectively.\r\n */\r\n public forceTileLoad(_tile: MapTile): boolean { return false; }\r\n}\r\n"]}
@@ -5,7 +5,7 @@ import { TerrainMeshProvider, TerrainMeshProviderOptions } from "../internal";
5
5
  /** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].
6
6
  * @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.
7
7
  * @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).
8
- * @beta
8
+ * @public
9
9
  */
10
10
  export interface TerrainProvider {
11
11
  /** Produce a [[TerrainMeshProvider]] using the specified options. */
@@ -16,7 +16,7 @@ export interface TerrainProvider {
16
16
  * Any number of additional providers can be [[register]]ed.
17
17
  *
18
18
  * When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.
19
- * @beta
19
+ * @public
20
20
  */
21
21
  export declare class TerrainProviderRegistry {
22
22
  private readonly _providers;
@@ -14,7 +14,7 @@ const internal_1 = require("../internal");
14
14
  * Any number of additional providers can be [[register]]ed.
15
15
  *
16
16
  * When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.
17
- * @beta
17
+ * @public
18
18
  */
19
19
  class TerrainProviderRegistry {
20
20
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAAwG;AAYxG;;;;;;GAMG;AACH,MAAa,uBAAuB;IAGlC,gBAAgB;IAChB;QAHiB,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAI/D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YAClC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,mCAAwB,EAAC,OAAO,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,IAAY,EAAE,QAAyB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,gEAAgE;IACzD,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAvBD,0DAuBC","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 { getCesiumTerrainProvider, TerrainMeshProvider, TerrainMeshProviderOptions } from \"../internal\";\r\n\r\n/** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].\r\n * @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.\r\n * @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).\r\n * @beta\r\n */\r\nexport interface TerrainProvider {\r\n /** Produce a [[TerrainMeshProvider]] using the specified options. */\r\n createTerrainMeshProvider(options: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined>;\r\n}\r\n\r\n/** A registry of [[TerrainProvider]]s identified by their unique names. The registry can be accessed via [[IModelApp.terrainProviderRegistry]].\r\n * It always includes the built-in provider named \"CesiumWorldTerrain\", which obtains terrain meshes from [Cesium ION](https://cesium.com/platform/cesium-ion/content/cesium-world-terrain/). That provider requires a valid [[TileAdmin.Props.cesiumIonKey]] to be supplied to [[IModelApp.startup]].\r\n * Any number of additional providers can be [[register]]ed.\r\n *\r\n * When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.\r\n * @beta\r\n */\r\nexport class TerrainProviderRegistry {\r\n private readonly _providers = new Map<string, TerrainProvider>();\r\n\r\n /** @internal */\r\n public constructor() {\r\n this.register(\"CesiumWorldTerrain\", {\r\n createTerrainMeshProvider: async (options) => getCesiumTerrainProvider(options),\r\n });\r\n }\r\n\r\n /** Register a new [[TerrainProvider]].\r\n * @param name The name of the provider. It must be unique among all providers.\r\n * @param provider The provider to register.\r\n * @see [[find]] to later retrieve the provider by name.\r\n */\r\n public register(name: string, provider: TerrainProvider): void {\r\n this._providers.set(name, provider);\r\n }\r\n\r\n /** Look up a [[register]]ed [[TerrainProvider]] by its name. */\r\n public find(name: string): TerrainProvider | undefined {\r\n return this._providers.get(name);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAAwG;AAYxG;;;;;;GAMG;AACH,MAAa,uBAAuB;IAGlC,gBAAgB;IAChB;QAHiB,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAI/D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YAClC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,mCAAwB,EAAC,OAAO,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,IAAY,EAAE,QAAyB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,gEAAgE;IACzD,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAvBD,0DAuBC","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 { getCesiumTerrainProvider, TerrainMeshProvider, TerrainMeshProviderOptions } from \"../internal\";\r\n\r\n/** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].\r\n * @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.\r\n * @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).\r\n * @public\r\n */\r\nexport interface TerrainProvider {\r\n /** Produce a [[TerrainMeshProvider]] using the specified options. */\r\n createTerrainMeshProvider(options: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined>;\r\n}\r\n\r\n/** A registry of [[TerrainProvider]]s identified by their unique names. The registry can be accessed via [[IModelApp.terrainProviderRegistry]].\r\n * It always includes the built-in provider named \"CesiumWorldTerrain\", which obtains terrain meshes from [Cesium ION](https://cesium.com/platform/cesium-ion/content/cesium-world-terrain/). That provider requires a valid [[TileAdmin.Props.cesiumIonKey]] to be supplied to [[IModelApp.startup]].\r\n * Any number of additional providers can be [[register]]ed.\r\n *\r\n * When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.\r\n * @public\r\n */\r\nexport class TerrainProviderRegistry {\r\n private readonly _providers = new Map<string, TerrainProvider>();\r\n\r\n /** @internal */\r\n public constructor() {\r\n this.register(\"CesiumWorldTerrain\", {\r\n createTerrainMeshProvider: async (options) => getCesiumTerrainProvider(options),\r\n });\r\n }\r\n\r\n /** Register a new [[TerrainProvider]].\r\n * @param name The name of the provider. It must be unique among all providers.\r\n * @param provider The provider to register.\r\n * @see [[find]] to later retrieve the provider by name.\r\n */\r\n public register(name: string, provider: TerrainProvider): void {\r\n this._providers.set(name, provider);\r\n }\r\n\r\n /** Look up a [[register]]ed [[TerrainProvider]] by its name. */\r\n public find(name: string): TerrainProvider | undefined {\r\n return this._providers.get(name);\r\n }\r\n}\r\n"]}
@@ -78,7 +78,6 @@ var WmsCapability;
78
78
  this.subLayers.push(new SubLayer(json, capabilities));
79
79
  }
80
80
  getSubLayers(visible = true) {
81
- var _a;
82
81
  const subLayers = new Array();
83
82
  let index = 1;
84
83
  let childrenFound = false;
@@ -110,7 +109,7 @@ var WmsCapability;
110
109
  });
111
110
  if (prefixed.size > 1) {
112
111
  // Preserve the root node if any.
113
- const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? (_a = subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)) === null || _a === void 0 ? void 0 : _a.id : undefined;
112
+ const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;
114
113
  prefixed.forEach((children, parent) => {
115
114
  children.forEach((child) => {
116
115
  child.parent = index;
@@ -184,9 +183,9 @@ class WmsCapabilities {
184
183
  }
185
184
  get json() { return this._json; }
186
185
  get maxLevel() { return this.layer ? this.layer.subLayers.length : -1; }
187
- get cartoRange() { var _a; return (_a = this.layer) === null || _a === void 0 ? void 0 : _a.cartoRange; }
188
- get featureInfoSupported() { var _a, _b; return undefined !== ((_b = (_a = this._json.Capability) === null || _a === void 0 ? void 0 : _a.Request) === null || _b === void 0 ? void 0 : _b.GetFeatureInfo); }
189
- get featureInfoFormats() { var _a, _b, _c, _d, _e, _f; return Array.isArray((_c = (_b = (_a = this._json.Capability) === null || _a === void 0 ? void 0 : _a.Request) === null || _b === void 0 ? void 0 : _b.GetFeatureInfo) === null || _c === void 0 ? void 0 : _c.Format) ? (_f = (_e = (_d = this._json.Capability) === null || _d === void 0 ? void 0 : _d.Request) === null || _e === void 0 ? void 0 : _e.GetFeatureInfo) === null || _f === void 0 ? void 0 : _f.Format : undefined; }
186
+ get cartoRange() { return this.layer?.cartoRange; }
187
+ get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }
188
+ get featureInfoFormats() { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }
190
189
  static async create(url, credentials, ignoreCache) {
191
190
  if (!ignoreCache) {
192
191
  const cached = WmsCapabilities._capabilitiesCache.get(url);
@@ -1 +1 @@
1
- {"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.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 Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.fromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(json: any, capabilities: WmsCapabilities) {\r\n this.queryable = json.queryable;\r\n this.title = json.title;\r\n this.srs = initArray<string>(capabilities.isVersion13 ? json.CRS : json.SRS);\r\n this.cartoRange = rangeFromJSON(json);\r\n this.subLayers.push(new SubLayer(json, capabilities));\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, capabilities: WmsCapabilities, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, capabilities, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly isVersion13: boolean;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf(\"1.3\");\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n if (!credentials) {\r\n // Avoid caching protected data\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n }\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.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 Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.fromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(json: any, capabilities: WmsCapabilities) {\r\n this.queryable = json.queryable;\r\n this.title = json.title;\r\n this.srs = initArray<string>(capabilities.isVersion13 ? json.CRS : json.SRS);\r\n this.cartoRange = rangeFromJSON(json);\r\n this.subLayers.push(new SubLayer(json, capabilities));\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, capabilities: WmsCapabilities, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, capabilities, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly isVersion13: boolean;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf(\"1.3\");\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n if (!credentials) {\r\n // Avoid caching protected data\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n }\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
@@ -87,10 +87,9 @@ async function getXml(url, credentials) {
87
87
  * @internal
88
88
  */
89
89
  const getElementTextContent = (elem, qualifiedName, defaultText) => {
90
- var _a;
91
90
  const tmpElem = elem.getElementsByTagName(qualifiedName);
92
91
  if (tmpElem.length > 0) {
93
- return (_a = tmpElem[0].textContent) !== null && _a !== void 0 ? _a : defaultText;
92
+ return tmpElem[0].textContent ?? defaultText;
94
93
  }
95
94
  else
96
95
  return defaultText;
@@ -151,14 +150,13 @@ var WmtsCapability;
151
150
  WmtsCapability.OperationMetadata = OperationMetadata;
152
151
  class HttpDcp {
153
152
  constructor(elem) {
154
- var _a, _b;
155
153
  const url = elem.getAttribute(XmlConstants.XLINK_HREF);
156
154
  if (url)
157
- this.url = url !== null && url !== void 0 ? url : "";
155
+ this.url = url ?? "";
158
156
  const constraint = elem.getElementsByTagName(OwsConstants.CONSTRAINT_XMLTAG);
159
157
  if (constraint.length > 0) {
160
- this.constraintName = (_a = constraint[0].getAttribute("name")) !== null && _a !== void 0 ? _a : "";
161
- if ((_b = this.constraintName) === null || _b === void 0 ? void 0 : _b.endsWith(XmlConstants.CONSTRAINT_NAME_FILTER)) {
158
+ this.constraintName = constraint[0].getAttribute("name") ?? "";
159
+ if (this.constraintName?.endsWith(XmlConstants.CONSTRAINT_NAME_FILTER)) {
162
160
  const allowedValues = constraint[0].getElementsByTagName(OwsConstants.ALLOWEDVALUES_XMLTAG);
163
161
  if (allowedValues.length > 0) {
164
162
  this.encoding = getElementTextContent(allowedValues[0], OwsConstants.VALUE_XMLTAG);
@@ -170,7 +168,6 @@ var WmtsCapability;
170
168
  WmtsCapability.HttpDcp = HttpDcp;
171
169
  class Operation {
172
170
  constructor(elem) {
173
- var _a, _b;
174
171
  const name = elem.getAttribute("name");
175
172
  if (name)
176
173
  this.name = name;
@@ -184,14 +181,14 @@ var WmtsCapability;
184
181
  if (get.length > 0) {
185
182
  this._getDcpHttp = [];
186
183
  for (const getItem of get) {
187
- (_a = this._getDcpHttp) === null || _a === void 0 ? void 0 : _a.push(new HttpDcp(getItem));
184
+ this._getDcpHttp?.push(new HttpDcp(getItem));
188
185
  }
189
186
  }
190
187
  const post = dcpHttp[0].getElementsByTagName(OwsConstants.POST_XMLTAG);
191
188
  if (post.length > 0) {
192
189
  this._postDcpHttp = [];
193
190
  for (const postItem of post) {
194
- (_b = this._postDcpHttp) === null || _b === void 0 ? void 0 : _b.push(new HttpDcp(postItem));
191
+ this._postDcpHttp?.push(new HttpDcp(postItem));
195
192
  }
196
193
  }
197
194
  }
@@ -219,8 +216,7 @@ var WmtsCapability;
219
216
  getGoogleMapsCompatibleTileMatrixSet() {
220
217
  const googleMapsTms = [];
221
218
  this.tileMatrixSets.forEach((tms) => {
222
- var _a;
223
- if ((_a = tms.wellKnownScaleSet) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(WmtsConstants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))
219
+ if (tms.wellKnownScaleSet?.toLowerCase().includes(WmtsConstants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))
224
220
  googleMapsTms.push(tms);
225
221
  // In case wellKnownScaleSet was not been set properly, infer from scaleDenominator
226
222
  // Note: some servers are quite inaccurate in their scale values, hence I used a delta value of 1.
@@ -252,13 +248,12 @@ var WmtsCapability;
252
248
  WmtsCapability.Style = Style;
253
249
  class BoundingBox {
254
250
  constructor(elem) {
255
- var _a;
256
- this.crs = (_a = elem.getAttribute("crs")) !== null && _a !== void 0 ? _a : undefined;
251
+ this.crs = elem.getAttribute("crs") ?? undefined;
257
252
  const lowerCorner = getElementTextContent(elem, OwsConstants.LOWERCORNER_XMLTAG);
258
253
  const upperCorner = getElementTextContent(elem, OwsConstants.UPPERCORNER_XMLTAG);
259
254
  if (lowerCorner && upperCorner) {
260
- const lowerCornerArray = lowerCorner === null || lowerCorner === void 0 ? void 0 : lowerCorner.split(" ").map((x) => +x);
261
- const upperCornerArray = upperCorner === null || upperCorner === void 0 ? void 0 : upperCorner.split(" ").map((x) => +x);
255
+ const lowerCornerArray = lowerCorner?.split(" ").map((x) => +x);
256
+ const upperCornerArray = upperCorner?.split(" ").map((x) => +x);
262
257
  if (lowerCornerArray && lowerCornerArray.length === 2 && upperCornerArray && upperCornerArray.length === 2)
263
258
  this.range = core_geometry_1.Range2d.createXYXY(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);
264
259
  }
@@ -320,7 +315,6 @@ var WmtsCapability;
320
315
  WmtsCapability.TileMatrixSet = TileMatrixSet;
321
316
  class TileMatrix {
322
317
  constructor(elem) {
323
- var _a;
324
318
  const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, "");
325
319
  if (identifier)
326
320
  this.identifier = identifier;
@@ -334,8 +328,8 @@ var WmtsCapability;
334
328
  throw new Error("No scale denominator found on TileMatrix.");
335
329
  this.scaleDenominator = +scaleDenom;
336
330
  // Top left corner
337
- const topLeftCorner = (_a = getElementTextContent(elem, XmlConstants.TOPLEFTCORNER_XMLTAG, "")) === null || _a === void 0 ? void 0 : _a.split(" ").map((x) => +x);
338
- if ((topLeftCorner === null || topLeftCorner === void 0 ? void 0 : topLeftCorner.length) !== 2)
331
+ const topLeftCorner = getElementTextContent(elem, XmlConstants.TOPLEFTCORNER_XMLTAG, "")?.split(" ").map((x) => +x);
332
+ if (topLeftCorner?.length !== 2)
339
333
  throw new Error("No TopLeftCorner found on TileMatrix.");
340
334
  this.topLeftCorner = core_geometry_1.Point2d.create(topLeftCorner[0], topLeftCorner[1]);
341
335
  // Tile Width
@@ -363,7 +357,6 @@ var WmtsCapability;
363
357
  WmtsCapability.TileMatrix = TileMatrix;
364
358
  class Layer {
365
359
  constructor(elem) {
366
- var _a, _b, _c, _d, _e, _f;
367
360
  this.styles = [];
368
361
  this.tileMatrixSetLinks = [];
369
362
  const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, "");
@@ -380,13 +373,13 @@ var WmtsCapability;
380
373
  let lowerCornerArray, upperCornerArray;
381
374
  const bbox = elem.getElementsByTagName(OwsConstants.WGS84BOUNDINGBOX_XMLTAG);
382
375
  if (bbox.length > 0) {
383
- lowerCornerArray = (_a = getElementTextContent(bbox[0], OwsConstants.LOWERCORNER_XMLTAG)) === null || _a === void 0 ? void 0 : _a.split(" ").map((x) => +x);
384
- upperCornerArray = (_b = getElementTextContent(bbox[0], OwsConstants.UPPERCORNER_XMLTAG)) === null || _b === void 0 ? void 0 : _b.split(" ").map((x) => +x);
376
+ lowerCornerArray = getElementTextContent(bbox[0], OwsConstants.LOWERCORNER_XMLTAG)?.split(" ").map((x) => +x);
377
+ upperCornerArray = getElementTextContent(bbox[0], OwsConstants.UPPERCORNER_XMLTAG)?.split(" ").map((x) => +x);
385
378
  }
386
- if ((lowerCornerArray === null || lowerCornerArray === void 0 ? void 0 : lowerCornerArray.length) === 2 && (upperCornerArray === null || upperCornerArray === void 0 ? void 0 : upperCornerArray.length) === 2)
379
+ if (lowerCornerArray?.length === 2 && upperCornerArray?.length === 2)
387
380
  this.wsg84BoundingBox = internal_1.MapCartoRectangle.fromDegrees(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);
388
381
  // If we could not initialized WSG84 bounding box, attempt to initialized it from Bounding Box
389
- if (!this.wsg84BoundingBox && (((_d = (_c = this.boundingBox) === null || _c === void 0 ? void 0 : _c.crs) === null || _d === void 0 ? void 0 : _d.includes("EPSG:4326")) || ((_f = (_e = this.boundingBox) === null || _e === void 0 ? void 0 : _e.crs) === null || _f === void 0 ? void 0 : _f.includes("CRS:84")))) {
382
+ if (!this.wsg84BoundingBox && (this.boundingBox?.crs?.includes("EPSG:4326") || this.boundingBox?.crs?.includes("CRS:84"))) {
390
383
  const range = this.boundingBox.range;
391
384
  if (range)
392
385
  this.wsg84BoundingBox = internal_1.MapCartoRectangle.fromDegrees(range.low.x, range.low.y, range.high.x, range.high.y);
@@ -413,11 +406,10 @@ var WmtsCapability;
413
406
  /** @internal */
414
407
  class WmtsCapabilities {
415
408
  constructor(xmlDoc) {
416
- var _a;
417
409
  const capabilities = xmlDoc.getElementsByTagName("Capabilities");
418
410
  if (capabilities.length !== 0) {
419
411
  const capability = capabilities[0];
420
- this.version = (_a = capability.getAttribute("version")) !== null && _a !== void 0 ? _a : undefined;
412
+ this.version = capability.getAttribute("version") ?? undefined;
421
413
  // Service Identification
422
414
  const serviceIdentification = capability.getElementsByTagName(OwsConstants.SERVICEIDENTIFICATION_XMLTAG);
423
415
  if (serviceIdentification.length > 0)