@itwin/core-frontend 3.4.0-dev.9 → 3.5.0-dev.4

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 (698) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  3. package/lib/cjs/AccuDraw.js +60 -15
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  6. package/lib/cjs/AccuSnap.js +46 -36
  7. package/lib/cjs/AccuSnap.js.map +1 -1
  8. package/lib/cjs/AuxCoordSys.d.ts.map +1 -1
  9. package/lib/cjs/AuxCoordSys.js +2 -3
  10. package/lib/cjs/AuxCoordSys.js.map +1 -1
  11. package/lib/cjs/BackgroundMapGeometry.d.ts.map +1 -1
  12. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  13. package/lib/cjs/CategorySelectorState.d.ts.map +1 -1
  14. package/lib/cjs/CategorySelectorState.js +6 -4
  15. package/lib/cjs/CategorySelectorState.js.map +1 -1
  16. package/lib/cjs/DevTools.d.ts.map +1 -1
  17. package/lib/cjs/DevTools.js.map +1 -1
  18. package/lib/cjs/DisplayStyleState.js +1 -1
  19. package/lib/cjs/DisplayStyleState.js.map +1 -1
  20. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  21. package/lib/cjs/ElementLocateManager.js +4 -2
  22. package/lib/cjs/ElementLocateManager.js.map +1 -1
  23. package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
  24. package/lib/cjs/FrustumAnimator.js +5 -1
  25. package/lib/cjs/FrustumAnimator.js.map +1 -1
  26. package/lib/cjs/FuzzySearch.d.ts.map +1 -1
  27. package/lib/cjs/FuzzySearch.js +9 -3
  28. package/lib/cjs/FuzzySearch.js.map +1 -1
  29. package/lib/cjs/HitDetail.d.ts.map +1 -1
  30. package/lib/cjs/HitDetail.js +13 -3
  31. package/lib/cjs/HitDetail.js.map +1 -1
  32. package/lib/cjs/IModelApp.d.ts +7 -2
  33. package/lib/cjs/IModelApp.d.ts.map +1 -1
  34. package/lib/cjs/IModelApp.js +10 -2
  35. package/lib/cjs/IModelApp.js.map +1 -1
  36. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  37. package/lib/cjs/IModelConnection.js +3 -1
  38. package/lib/cjs/IModelConnection.js.map +1 -1
  39. package/lib/cjs/ImageUtil.d.ts +6 -0
  40. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  41. package/lib/cjs/ImageUtil.js +14 -1
  42. package/lib/cjs/ImageUtil.js.map +1 -1
  43. package/lib/cjs/Marker.d.ts.map +1 -1
  44. package/lib/cjs/Marker.js +5 -1
  45. package/lib/cjs/Marker.js.map +1 -1
  46. package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
  47. package/lib/cjs/NativeAppLogger.js +1 -1
  48. package/lib/cjs/NativeAppLogger.js.map +1 -1
  49. package/lib/cjs/TentativePoint.d.ts.map +1 -1
  50. package/lib/cjs/TentativePoint.js.map +1 -1
  51. package/lib/cjs/ViewManager.d.ts +4 -0
  52. package/lib/cjs/ViewManager.d.ts.map +1 -1
  53. package/lib/cjs/ViewManager.js +9 -3
  54. package/lib/cjs/ViewManager.js.map +1 -1
  55. package/lib/cjs/ViewRect.d.ts.map +1 -1
  56. package/lib/cjs/ViewRect.js +5 -1
  57. package/lib/cjs/ViewRect.js.map +1 -1
  58. package/lib/cjs/ViewState.d.ts +36 -12
  59. package/lib/cjs/ViewState.d.ts.map +1 -1
  60. package/lib/cjs/ViewState.js +35 -25
  61. package/lib/cjs/ViewState.js.map +1 -1
  62. package/lib/cjs/ViewingSpace.d.ts.map +1 -1
  63. package/lib/cjs/ViewingSpace.js +12 -5
  64. package/lib/cjs/ViewingSpace.js.map +1 -1
  65. package/lib/cjs/Viewport.d.ts +14 -0
  66. package/lib/cjs/Viewport.d.ts.map +1 -1
  67. package/lib/cjs/Viewport.js +106 -5
  68. package/lib/cjs/Viewport.js.map +1 -1
  69. package/lib/cjs/core-frontend.d.ts +6 -0
  70. package/lib/cjs/core-frontend.d.ts.map +1 -1
  71. package/lib/cjs/core-frontend.js +6 -0
  72. package/lib/cjs/core-frontend.js.map +1 -1
  73. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -1
  74. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  75. package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -1
  76. package/lib/cjs/extension/ExtensionImpl.js +3 -1
  77. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  78. package/lib/cjs/public/scripts/checkbrowser.js +24 -0
  79. package/lib/cjs/render/Decorations.d.ts.map +1 -1
  80. package/lib/cjs/render/Decorations.js +24 -6
  81. package/lib/cjs/render/Decorations.js.map +1 -1
  82. package/lib/cjs/render/RealityMeshGraphicParams.d.ts +19 -0
  83. package/lib/cjs/render/RealityMeshGraphicParams.d.ts.map +1 -0
  84. package/lib/cjs/render/RealityMeshGraphicParams.js +10 -0
  85. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -0
  86. package/lib/cjs/render/RealityMeshParams.d.ts +130 -0
  87. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -0
  88. package/lib/cjs/render/RealityMeshParams.js +176 -0
  89. package/lib/cjs/render/RealityMeshParams.js.map +1 -0
  90. package/lib/cjs/render/RenderSystem.d.ts +8 -4
  91. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  92. package/lib/cjs/render/RenderSystem.js +7 -1
  93. package/lib/cjs/render/RenderSystem.js.map +1 -1
  94. package/lib/cjs/render/RenderTexture.d.ts +1 -1
  95. package/lib/cjs/render/RenderTexture.d.ts.map +1 -1
  96. package/lib/cjs/render/RenderTexture.js.map +1 -1
  97. package/lib/cjs/render/UpsampleRealityMeshParams.d.ts +11 -0
  98. package/lib/cjs/render/UpsampleRealityMeshParams.d.ts.map +1 -0
  99. package/lib/cjs/render/UpsampleRealityMeshParams.js +205 -0
  100. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -0
  101. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  102. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  103. package/lib/cjs/render/primitives/Polyface.d.ts.map +1 -1
  104. package/lib/cjs/render/primitives/Polyface.js +3 -1
  105. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  106. package/lib/cjs/render/primitives/Primitives.d.ts.map +1 -1
  107. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  108. package/lib/cjs/render/primitives/Strokes.d.ts.map +1 -1
  109. package/lib/cjs/render/primitives/Strokes.js +6 -2
  110. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  111. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  112. package/lib/cjs/render/primitives/VertexTableSplitter.js +7 -85
  113. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  114. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  115. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +4 -1
  116. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  117. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  118. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  119. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  120. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  121. package/lib/cjs/render/webgl/ColorInfo.d.ts.map +1 -1
  122. package/lib/cjs/render/webgl/ColorInfo.js +4 -1
  123. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  124. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/DrawCommand.js +12 -3
  126. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  127. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  128. package/lib/cjs/render/webgl/FrameBuffer.js +4 -1
  129. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  130. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  131. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  132. package/lib/cjs/render/webgl/Graphic.js +5 -2
  133. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  134. package/lib/cjs/render/webgl/Matrix.d.ts.map +1 -1
  135. package/lib/cjs/render/webgl/Matrix.js +16 -4
  136. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  137. package/lib/cjs/render/webgl/PerformanceMetrics.js +2 -2
  138. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  139. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/PlanarClassifier.js +3 -1
  141. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  142. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  144. package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
  145. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  146. package/lib/cjs/render/webgl/RealityMesh.d.ts +6 -6
  147. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  148. package/lib/cjs/render/webgl/RealityMesh.js +20 -12
  149. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  150. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/RenderCommands.js +3 -2
  152. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  153. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/RenderFlags.js +3 -1
  155. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  156. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/ShaderBuilder.js +4 -1
  158. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  159. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  160. package/lib/cjs/render/webgl/SolarShadowMap.js +17 -5
  161. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  162. package/lib/cjs/render/webgl/System.d.ts +6 -4
  163. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  164. package/lib/cjs/render/webgl/System.js +21 -4
  165. package/lib/cjs/render/webgl/System.js.map +1 -1
  166. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  167. package/lib/cjs/render/webgl/Technique.js +3 -1
  168. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  169. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  170. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  171. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  172. package/lib/cjs/render/webgl/Texture.js +21 -12
  173. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  174. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  175. package/lib/cjs/render/webgl/ThematicSensors.js +8 -2
  176. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  177. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  178. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +3 -1
  179. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  180. package/lib/cjs/render/webgl/glsl/Common.js +1 -1
  181. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  182. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  183. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  184. package/lib/cjs/tile/GltfReader.d.ts +3 -2
  185. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  186. package/lib/cjs/tile/GltfReader.js +7 -3
  187. package/lib/cjs/tile/GltfReader.js.map +1 -1
  188. package/lib/cjs/tile/ImdlReader.d.ts +1 -1
  189. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  190. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -1
  191. package/lib/cjs/tile/OPCFormatInterpreter.js +3 -1
  192. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  193. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  194. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  195. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  196. package/lib/cjs/tile/PrimaryTileTree.js +14 -11
  197. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  198. package/lib/cjs/tile/RealityTile.d.ts +57 -3
  199. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  200. package/lib/cjs/tile/RealityTile.js +49 -5
  201. package/lib/cjs/tile/RealityTile.js.map +1 -1
  202. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  203. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  204. package/lib/cjs/tile/RealityTileTree.d.ts +37 -2
  205. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  206. package/lib/cjs/tile/RealityTileTree.js +30 -2
  207. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  208. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -1
  209. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +6 -2
  210. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  211. package/lib/cjs/tile/TileAdmin.d.ts +11 -0
  212. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  213. package/lib/cjs/tile/TileAdmin.js +47 -4
  214. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  215. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  216. package/lib/cjs/tile/TileDrawArgs.js +10 -16
  217. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  218. package/lib/cjs/tile/TileRequest.d.ts +5 -1
  219. package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
  220. package/lib/cjs/tile/TileRequest.js +6 -2
  221. package/lib/cjs/tile/TileRequest.js.map +1 -1
  222. package/lib/cjs/tile/TileStorage.d.ts +13 -0
  223. package/lib/cjs/tile/TileStorage.d.ts.map +1 -0
  224. package/lib/cjs/tile/TileStorage.js +50 -0
  225. package/lib/cjs/tile/TileStorage.js.map +1 -0
  226. package/lib/cjs/tile/internal.d.ts +2 -0
  227. package/lib/cjs/tile/internal.d.ts.map +1 -1
  228. package/lib/cjs/tile/internal.js +2 -0
  229. package/lib/cjs/tile/internal.js.map +1 -1
  230. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
  231. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  232. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +0 -2
  233. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  234. package/lib/cjs/tile/map/ArcGisUtilities.js +1 -24
  235. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  236. package/lib/cjs/tile/map/BingElevation.d.ts +8 -3
  237. package/lib/cjs/tile/map/BingElevation.d.ts.map +1 -1
  238. package/lib/cjs/tile/map/BingElevation.js +36 -14
  239. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  240. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +2 -7
  241. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  242. package/lib/cjs/tile/map/CesiumTerrainProvider.js +100 -90
  243. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  244. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts +9 -12
  245. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  246. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js +70 -67
  247. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  248. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  249. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +9 -16
  250. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  251. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  252. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  253. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  254. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  255. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  256. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  257. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +8 -6
  258. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  259. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +3 -3
  260. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  261. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  262. package/lib/cjs/tile/map/ImageryTileTree.js +21 -6
  263. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  264. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +62 -6
  265. package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
  266. package/lib/cjs/tile/map/MapCartoRectangle.js +103 -17
  267. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  268. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  269. package/lib/cjs/tile/map/MapLayerImageryFormats.js +4 -2
  270. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  271. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  272. package/lib/cjs/tile/map/MapLayerImageryProvider.js +1 -1
  273. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  274. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  275. package/lib/cjs/tile/map/MapLayerSources.js +11 -7
  276. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  277. package/lib/cjs/tile/map/MapTile.d.ts +68 -15
  278. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  279. package/lib/cjs/tile/map/MapTile.js +88 -30
  280. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  281. package/lib/cjs/tile/map/MapTileAvailability.d.ts.map +1 -1
  282. package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
  283. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  284. package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -2
  285. package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
  286. package/lib/cjs/tile/map/MapTileLoader.js +11 -20
  287. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  288. package/lib/cjs/tile/map/MapTileTree.d.ts +72 -7
  289. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  290. package/lib/cjs/tile/map/MapTileTree.js +72 -16
  291. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  292. package/lib/cjs/tile/map/MapTilingScheme.d.ts +67 -55
  293. package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
  294. package/lib/cjs/tile/map/MapTilingScheme.js +71 -67
  295. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  296. package/lib/cjs/tile/map/QuadId.d.ts +24 -2
  297. package/lib/cjs/tile/map/QuadId.d.ts.map +1 -1
  298. package/lib/cjs/tile/map/QuadId.js +49 -20
  299. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  300. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +79 -19
  301. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  302. package/lib/cjs/tile/map/TerrainMeshProvider.js +28 -13
  303. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  304. package/lib/cjs/tile/map/TerrainProvider.d.ts +34 -0
  305. package/lib/cjs/tile/map/TerrainProvider.d.ts.map +1 -0
  306. package/lib/cjs/tile/map/TerrainProvider.js +41 -0
  307. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -0
  308. package/lib/cjs/tile/map/WmsCapabilities.js +1 -1
  309. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  310. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  311. package/lib/cjs/tile/map/WmtsCapabilities.js +7 -3
  312. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  313. package/lib/cjs/tile/object-storage-azure.js +5 -0
  314. package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
  315. package/lib/cjs/tools/AccuDrawTool.js +87 -26
  316. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  317. package/lib/cjs/tools/ClipViewTool.d.ts +2 -2
  318. package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
  319. package/lib/cjs/tools/ClipViewTool.js +29 -16
  320. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  321. package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
  322. package/lib/cjs/tools/ElementSetTool.js +26 -10
  323. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  324. package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
  325. package/lib/cjs/tools/MeasureTool.js +65 -41
  326. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  327. package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
  328. package/lib/cjs/tools/PrimitiveTool.js +9 -4
  329. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  330. package/lib/cjs/tools/SelectTool.d.ts.map +1 -1
  331. package/lib/cjs/tools/SelectTool.js +20 -9
  332. package/lib/cjs/tools/SelectTool.js.map +1 -1
  333. package/lib/cjs/tools/Tool.d.ts.map +1 -1
  334. package/lib/cjs/tools/Tool.js +13 -5
  335. package/lib/cjs/tools/Tool.js.map +1 -1
  336. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  337. package/lib/cjs/tools/ToolAdmin.js +27 -9
  338. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  339. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  340. package/lib/cjs/tools/ViewTool.js +111 -40
  341. package/lib/cjs/tools/ViewTool.js.map +1 -1
  342. package/lib/esm/AccuDraw.d.ts.map +1 -1
  343. package/lib/esm/AccuDraw.js +60 -15
  344. package/lib/esm/AccuDraw.js.map +1 -1
  345. package/lib/esm/AccuSnap.d.ts.map +1 -1
  346. package/lib/esm/AccuSnap.js +47 -37
  347. package/lib/esm/AccuSnap.js.map +1 -1
  348. package/lib/esm/AuxCoordSys.d.ts.map +1 -1
  349. package/lib/esm/AuxCoordSys.js +2 -3
  350. package/lib/esm/AuxCoordSys.js.map +1 -1
  351. package/lib/esm/BackgroundMapGeometry.d.ts.map +1 -1
  352. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  353. package/lib/esm/CategorySelectorState.d.ts.map +1 -1
  354. package/lib/esm/CategorySelectorState.js +6 -4
  355. package/lib/esm/CategorySelectorState.js.map +1 -1
  356. package/lib/esm/DevTools.d.ts.map +1 -1
  357. package/lib/esm/DevTools.js.map +1 -1
  358. package/lib/esm/DisplayStyleState.js +1 -1
  359. package/lib/esm/DisplayStyleState.js.map +1 -1
  360. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  361. package/lib/esm/ElementLocateManager.js +4 -2
  362. package/lib/esm/ElementLocateManager.js.map +1 -1
  363. package/lib/esm/FrustumAnimator.d.ts.map +1 -1
  364. package/lib/esm/FrustumAnimator.js +5 -1
  365. package/lib/esm/FrustumAnimator.js.map +1 -1
  366. package/lib/esm/FuzzySearch.d.ts.map +1 -1
  367. package/lib/esm/FuzzySearch.js +9 -3
  368. package/lib/esm/FuzzySearch.js.map +1 -1
  369. package/lib/esm/HitDetail.d.ts.map +1 -1
  370. package/lib/esm/HitDetail.js +13 -3
  371. package/lib/esm/HitDetail.js.map +1 -1
  372. package/lib/esm/IModelApp.d.ts +7 -2
  373. package/lib/esm/IModelApp.d.ts.map +1 -1
  374. package/lib/esm/IModelApp.js +11 -3
  375. package/lib/esm/IModelApp.js.map +1 -1
  376. package/lib/esm/IModelConnection.d.ts.map +1 -1
  377. package/lib/esm/IModelConnection.js +3 -1
  378. package/lib/esm/IModelConnection.js.map +1 -1
  379. package/lib/esm/ImageUtil.d.ts +6 -0
  380. package/lib/esm/ImageUtil.d.ts.map +1 -1
  381. package/lib/esm/ImageUtil.js +12 -0
  382. package/lib/esm/ImageUtil.js.map +1 -1
  383. package/lib/esm/Marker.d.ts.map +1 -1
  384. package/lib/esm/Marker.js +5 -1
  385. package/lib/esm/Marker.js.map +1 -1
  386. package/lib/esm/NativeAppLogger.d.ts.map +1 -1
  387. package/lib/esm/NativeAppLogger.js +1 -1
  388. package/lib/esm/NativeAppLogger.js.map +1 -1
  389. package/lib/esm/TentativePoint.d.ts.map +1 -1
  390. package/lib/esm/TentativePoint.js.map +1 -1
  391. package/lib/esm/ViewManager.d.ts +4 -0
  392. package/lib/esm/ViewManager.d.ts.map +1 -1
  393. package/lib/esm/ViewManager.js +9 -3
  394. package/lib/esm/ViewManager.js.map +1 -1
  395. package/lib/esm/ViewRect.d.ts.map +1 -1
  396. package/lib/esm/ViewRect.js +5 -1
  397. package/lib/esm/ViewRect.js.map +1 -1
  398. package/lib/esm/ViewState.d.ts +36 -12
  399. package/lib/esm/ViewState.d.ts.map +1 -1
  400. package/lib/esm/ViewState.js +35 -25
  401. package/lib/esm/ViewState.js.map +1 -1
  402. package/lib/esm/ViewingSpace.d.ts.map +1 -1
  403. package/lib/esm/ViewingSpace.js +12 -5
  404. package/lib/esm/ViewingSpace.js.map +1 -1
  405. package/lib/esm/Viewport.d.ts +14 -0
  406. package/lib/esm/Viewport.d.ts.map +1 -1
  407. package/lib/esm/Viewport.js +106 -5
  408. package/lib/esm/Viewport.js.map +1 -1
  409. package/lib/esm/core-frontend.d.ts +6 -0
  410. package/lib/esm/core-frontend.d.ts.map +1 -1
  411. package/lib/esm/core-frontend.js +6 -0
  412. package/lib/esm/core-frontend.js.map +1 -1
  413. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -1
  414. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  415. package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -1
  416. package/lib/esm/extension/ExtensionImpl.js +3 -1
  417. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  418. package/lib/esm/public/scripts/checkbrowser.js +24 -0
  419. package/lib/esm/render/Decorations.d.ts.map +1 -1
  420. package/lib/esm/render/Decorations.js +24 -6
  421. package/lib/esm/render/Decorations.js.map +1 -1
  422. package/lib/esm/render/RealityMeshGraphicParams.d.ts +19 -0
  423. package/lib/esm/render/RealityMeshGraphicParams.d.ts.map +1 -0
  424. package/lib/esm/render/RealityMeshGraphicParams.js +9 -0
  425. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -0
  426. package/lib/esm/render/RealityMeshParams.d.ts +130 -0
  427. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -0
  428. package/lib/esm/render/RealityMeshParams.js +172 -0
  429. package/lib/esm/render/RealityMeshParams.js.map +1 -0
  430. package/lib/esm/render/RenderSystem.d.ts +8 -4
  431. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  432. package/lib/esm/render/RenderSystem.js +7 -1
  433. package/lib/esm/render/RenderSystem.js.map +1 -1
  434. package/lib/esm/render/RenderTexture.d.ts +1 -1
  435. package/lib/esm/render/RenderTexture.d.ts.map +1 -1
  436. package/lib/esm/render/RenderTexture.js.map +1 -1
  437. package/lib/esm/render/UpsampleRealityMeshParams.d.ts +11 -0
  438. package/lib/esm/render/UpsampleRealityMeshParams.d.ts.map +1 -0
  439. package/lib/esm/render/UpsampleRealityMeshParams.js +201 -0
  440. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -0
  441. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  442. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  443. package/lib/esm/render/primitives/Polyface.d.ts.map +1 -1
  444. package/lib/esm/render/primitives/Polyface.js +3 -1
  445. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  446. package/lib/esm/render/primitives/Primitives.d.ts.map +1 -1
  447. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  448. package/lib/esm/render/primitives/Strokes.d.ts.map +1 -1
  449. package/lib/esm/render/primitives/Strokes.js +6 -2
  450. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  451. package/lib/esm/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  452. package/lib/esm/render/primitives/VertexTableSplitter.js +1 -79
  453. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  454. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  455. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +4 -1
  456. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  457. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  458. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  459. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  460. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  461. package/lib/esm/render/webgl/ColorInfo.d.ts.map +1 -1
  462. package/lib/esm/render/webgl/ColorInfo.js +4 -1
  463. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  464. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  465. package/lib/esm/render/webgl/DrawCommand.js +12 -3
  466. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  467. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  468. package/lib/esm/render/webgl/FrameBuffer.js +4 -1
  469. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  470. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  471. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  472. package/lib/esm/render/webgl/Graphic.js +5 -2
  473. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  474. package/lib/esm/render/webgl/Matrix.d.ts.map +1 -1
  475. package/lib/esm/render/webgl/Matrix.js +16 -4
  476. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  477. package/lib/esm/render/webgl/PerformanceMetrics.js +2 -2
  478. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  479. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  480. package/lib/esm/render/webgl/PlanarClassifier.js +3 -1
  481. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  482. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  483. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  484. package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
  485. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  486. package/lib/esm/render/webgl/RealityMesh.d.ts +6 -6
  487. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  488. package/lib/esm/render/webgl/RealityMesh.js +20 -12
  489. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  490. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  491. package/lib/esm/render/webgl/RenderCommands.js +3 -2
  492. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  493. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  494. package/lib/esm/render/webgl/RenderFlags.js +3 -1
  495. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  496. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  497. package/lib/esm/render/webgl/ShaderBuilder.js +4 -1
  498. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  499. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  500. package/lib/esm/render/webgl/SolarShadowMap.js +17 -5
  501. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  502. package/lib/esm/render/webgl/System.d.ts +6 -4
  503. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  504. package/lib/esm/render/webgl/System.js +21 -4
  505. package/lib/esm/render/webgl/System.js.map +1 -1
  506. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  507. package/lib/esm/render/webgl/Technique.js +3 -1
  508. package/lib/esm/render/webgl/Technique.js.map +1 -1
  509. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  510. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  511. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  512. package/lib/esm/render/webgl/Texture.js +21 -12
  513. package/lib/esm/render/webgl/Texture.js.map +1 -1
  514. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  515. package/lib/esm/render/webgl/ThematicSensors.js +8 -2
  516. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  517. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  518. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +3 -1
  519. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  520. package/lib/esm/render/webgl/glsl/Common.js +1 -1
  521. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  522. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  523. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  524. package/lib/esm/tile/GltfReader.d.ts +3 -2
  525. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  526. package/lib/esm/tile/GltfReader.js +8 -4
  527. package/lib/esm/tile/GltfReader.js.map +1 -1
  528. package/lib/esm/tile/ImdlReader.d.ts +1 -1
  529. package/lib/esm/tile/ImdlReader.js.map +1 -1
  530. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -1
  531. package/lib/esm/tile/OPCFormatInterpreter.js +3 -1
  532. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  533. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  534. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  535. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  536. package/lib/esm/tile/PrimaryTileTree.js +14 -11
  537. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  538. package/lib/esm/tile/RealityTile.d.ts +57 -3
  539. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  540. package/lib/esm/tile/RealityTile.js +49 -5
  541. package/lib/esm/tile/RealityTile.js.map +1 -1
  542. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  543. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  544. package/lib/esm/tile/RealityTileTree.d.ts +37 -2
  545. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  546. package/lib/esm/tile/RealityTileTree.js +30 -2
  547. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  548. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -1
  549. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +6 -2
  550. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  551. package/lib/esm/tile/TileAdmin.d.ts +11 -0
  552. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  553. package/lib/esm/tile/TileAdmin.js +28 -4
  554. package/lib/esm/tile/TileAdmin.js.map +1 -1
  555. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  556. package/lib/esm/tile/TileDrawArgs.js +11 -17
  557. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  558. package/lib/esm/tile/TileRequest.d.ts +5 -1
  559. package/lib/esm/tile/TileRequest.d.ts.map +1 -1
  560. package/lib/esm/tile/TileRequest.js +6 -2
  561. package/lib/esm/tile/TileRequest.js.map +1 -1
  562. package/lib/esm/tile/TileStorage.d.ts +13 -0
  563. package/lib/esm/tile/TileStorage.d.ts.map +1 -0
  564. package/lib/esm/tile/TileStorage.js +46 -0
  565. package/lib/esm/tile/TileStorage.js.map +1 -0
  566. package/lib/esm/tile/internal.d.ts +2 -0
  567. package/lib/esm/tile/internal.d.ts.map +1 -1
  568. package/lib/esm/tile/internal.js +2 -0
  569. package/lib/esm/tile/internal.js.map +1 -1
  570. package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
  571. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  572. package/lib/esm/tile/map/ArcGisUtilities.d.ts +0 -2
  573. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  574. package/lib/esm/tile/map/ArcGisUtilities.js +1 -24
  575. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  576. package/lib/esm/tile/map/BingElevation.d.ts +8 -3
  577. package/lib/esm/tile/map/BingElevation.d.ts.map +1 -1
  578. package/lib/esm/tile/map/BingElevation.js +36 -14
  579. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  580. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +2 -7
  581. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  582. package/lib/esm/tile/map/CesiumTerrainProvider.js +101 -91
  583. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  584. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts +9 -12
  585. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  586. package/lib/esm/tile/map/EllipsoidTerrainProvider.js +71 -68
  587. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  588. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  589. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +9 -16
  590. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  591. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  592. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  593. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  594. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  595. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  596. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  597. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +8 -6
  598. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  599. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +3 -3
  600. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  601. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  602. package/lib/esm/tile/map/ImageryTileTree.js +21 -6
  603. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  604. package/lib/esm/tile/map/MapCartoRectangle.d.ts +62 -6
  605. package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
  606. package/lib/esm/tile/map/MapCartoRectangle.js +103 -17
  607. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  608. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  609. package/lib/esm/tile/map/MapLayerImageryFormats.js +4 -2
  610. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  611. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  612. package/lib/esm/tile/map/MapLayerImageryProvider.js +1 -1
  613. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  614. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  615. package/lib/esm/tile/map/MapLayerSources.js +11 -7
  616. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  617. package/lib/esm/tile/map/MapTile.d.ts +68 -15
  618. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  619. package/lib/esm/tile/map/MapTile.js +88 -30
  620. package/lib/esm/tile/map/MapTile.js.map +1 -1
  621. package/lib/esm/tile/map/MapTileAvailability.d.ts.map +1 -1
  622. package/lib/esm/tile/map/MapTileAvailability.js +1 -1
  623. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  624. package/lib/esm/tile/map/MapTileLoader.d.ts +2 -2
  625. package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
  626. package/lib/esm/tile/map/MapTileLoader.js +12 -21
  627. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  628. package/lib/esm/tile/map/MapTileTree.d.ts +72 -7
  629. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  630. package/lib/esm/tile/map/MapTileTree.js +73 -17
  631. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  632. package/lib/esm/tile/map/MapTilingScheme.d.ts +67 -55
  633. package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
  634. package/lib/esm/tile/map/MapTilingScheme.js +72 -68
  635. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  636. package/lib/esm/tile/map/QuadId.d.ts +24 -2
  637. package/lib/esm/tile/map/QuadId.d.ts.map +1 -1
  638. package/lib/esm/tile/map/QuadId.js +49 -20
  639. package/lib/esm/tile/map/QuadId.js.map +1 -1
  640. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +79 -19
  641. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  642. package/lib/esm/tile/map/TerrainMeshProvider.js +28 -13
  643. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  644. package/lib/esm/tile/map/TerrainProvider.d.ts +34 -0
  645. package/lib/esm/tile/map/TerrainProvider.d.ts.map +1 -0
  646. package/lib/esm/tile/map/TerrainProvider.js +37 -0
  647. package/lib/esm/tile/map/TerrainProvider.js.map +1 -0
  648. package/lib/esm/tile/map/WmsCapabilities.js +1 -1
  649. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  650. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  651. package/lib/esm/tile/map/WmtsCapabilities.js +7 -3
  652. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  653. package/lib/esm/tile/object-storage-azure.js +5 -0
  654. package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
  655. package/lib/esm/tools/AccuDrawTool.js +87 -26
  656. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  657. package/lib/esm/tools/ClipViewTool.d.ts +2 -2
  658. package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
  659. package/lib/esm/tools/ClipViewTool.js +29 -16
  660. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  661. package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
  662. package/lib/esm/tools/ElementSetTool.js +26 -10
  663. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  664. package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
  665. package/lib/esm/tools/MeasureTool.js +65 -41
  666. package/lib/esm/tools/MeasureTool.js.map +1 -1
  667. package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
  668. package/lib/esm/tools/PrimitiveTool.js +9 -4
  669. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  670. package/lib/esm/tools/SelectTool.d.ts.map +1 -1
  671. package/lib/esm/tools/SelectTool.js +20 -9
  672. package/lib/esm/tools/SelectTool.js.map +1 -1
  673. package/lib/esm/tools/Tool.d.ts.map +1 -1
  674. package/lib/esm/tools/Tool.js +13 -5
  675. package/lib/esm/tools/Tool.js.map +1 -1
  676. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  677. package/lib/esm/tools/ToolAdmin.js +27 -9
  678. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  679. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  680. package/lib/esm/tools/ViewTool.js +111 -40
  681. package/lib/esm/tools/ViewTool.js.map +1 -1
  682. package/package.json +30 -24
  683. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +0 -47
  684. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +0 -1
  685. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +0 -75
  686. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +0 -1
  687. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.d.ts +0 -56
  688. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.d.ts.map +0 -1
  689. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.js +0 -270
  690. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.js.map +0 -1
  691. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +0 -47
  692. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +0 -1
  693. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +0 -71
  694. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +0 -1
  695. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.d.ts +0 -56
  696. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.d.ts.map +0 -1
  697. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.js +0 -266
  698. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.js.map +0 -1
@@ -5,86 +5,86 @@
5
5
  /** @packageDocumentation
6
6
  * @module Tiles
7
7
  */
8
- import { Angle, Matrix3d, Point2d, Point3d, Range2d, Transform, Vector3d } from "@itwin/core-geometry";
8
+ import { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from "@itwin/core-geometry";
9
9
  import { Cartographic } from "@itwin/core-common";
10
10
  import { MapCartoRectangle } from "../internal";
11
- /** @internal */
11
+ /** 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).
12
+ * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.
13
+ * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.
14
+ *
15
+ * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.
16
+ * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.
17
+ * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].
18
+ * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].
19
+ * @beta
20
+ */
12
21
  export class MapTilingScheme {
13
- constructor(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole, _rectangle = Range2d.createXYXY(-Angle.piRadians, -Angle.piOver2Radians, Angle.piRadians, Angle.piOver2Radians)) {
22
+ constructor(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole) {
23
+ this._scratchFraction = Point2d.createZero();
24
+ this._scratchPoint2d = Point2d.createZero();
25
+ this.rowZeroAtNorthPole = rowZeroAtNorthPole;
14
26
  this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;
15
27
  this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;
16
- this.rowZeroAtNorthPole = rowZeroAtNorthPole;
17
- this._rectangle = _rectangle;
18
- this._scratchFraction = Point2d.createZero();
19
28
  }
20
- /**
21
- * @param longitude in radians (-pi to pi)
22
- */
29
+ /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */
23
30
  longitudeToXFraction(longitude) {
24
31
  return longitude / Angle.pi2Radians + .5;
25
32
  }
26
- /**
27
- * Return longitude in radians (-pi to pi from fraction).
28
- */
33
+ /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */
29
34
  xFractionToLongitude(xFraction) {
30
35
  return Angle.pi2Radians * (xFraction - .5);
31
36
  }
32
- /**
33
- * Gets the total number of tiles in the X direction at a specified level-of-detail.
34
- *
35
- * @param {Number} level The level-of-detail. Level 0 is the root tile.
36
- * @returns {Number} The number of tiles in the X direction at the given level.
37
+ /** The total number of tiles in the X direction at the specified level of detail.
38
+ * @param level The level of detail, with 0 corresponding to the root tile.
37
39
  */
38
40
  getNumberOfXTilesAtLevel(level) {
39
41
  return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;
40
42
  }
41
- /**
42
- * Gets the total number of tiles in the Y direction at a specified level-of-detail.
43
- *
44
- *
45
- * @param {Number} level The level-of-detail. Level 0 is the root tile.
46
- * @returns {Number} The number of tiles in the Y direction at the given level.
43
+ /** The total number of tiles in the Y direction at the specified level of detail.
44
+ * @param level The level of detail, with 0 corresponding to the root tile.
47
45
  */
48
46
  getNumberOfYTilesAtLevel(level) {
49
47
  return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;
50
48
  }
49
+ /** @alpha */
51
50
  get rootLevel() {
52
51
  return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;
53
52
  }
53
+ /** @alpha */
54
54
  getNumberOfXChildrenAtLevel(level) {
55
55
  return level === 0 ? this.numberOfLevelZeroTilesX : 2;
56
56
  }
57
+ /** @alpha */
57
58
  getNumberOfYChildrenAtLevel(level) {
58
59
  return level === 0 ? this.numberOfLevelZeroTilesY : 2;
59
60
  }
61
+ /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */
60
62
  tileXToFraction(x, level) {
61
63
  return x / this.getNumberOfXTilesAtLevel(level);
62
64
  }
65
+ /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */
63
66
  tileYToFraction(y, level) {
64
67
  return y / this.getNumberOfYTilesAtLevel(level);
65
68
  }
69
+ /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */
66
70
  xFractionToTileX(xFraction, level) {
67
71
  const nTiles = this.getNumberOfXTilesAtLevel(level);
68
72
  return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);
69
73
  }
74
+ /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */
70
75
  yFractionToTileY(yFraction, level) {
71
76
  const nTiles = this.getNumberOfYTilesAtLevel(level);
72
77
  return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);
73
78
  }
79
+ /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */
74
80
  tileXToLongitude(x, level) {
75
81
  return this.xFractionToLongitude(this.tileXToFraction(x, level));
76
82
  }
83
+ /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */
77
84
  tileYToLatitude(y, level) {
78
85
  return this.yFractionToLatitude(this.tileYToFraction(y, level));
79
86
  }
80
- /**
81
- * Gets the fraction of the normalized (0-1) coordinates with at left, bottom.
82
- *
83
- * @param x column
84
- * @param y row
85
- * @param level depth
86
- * @param result result (0-1 from left, bottom
87
- */
87
+ /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */
88
88
  tileXYToFraction(x, y, level, result) {
89
89
  if (undefined === result)
90
90
  result = Point2d.createZero();
@@ -92,61 +92,57 @@ export class MapTilingScheme {
92
92
  result.y = this.tileYToFraction(y, level);
93
93
  return result;
94
94
  }
95
- /** Get Cartographic from tile XY
96
- *
97
- * @param x column
98
- * @param y row
99
- * @param level depth
100
- * @param result result longitude, latitude.
101
- * @param height height (optional)
95
+ /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.
96
+ * @param x The X component of the QuadId.
97
+ * @param y The Y component of the QuadId.
98
+ * @param level The level component of the QuadId.
99
+ * @param height The elevation above the ellipsoid.
100
+ * @returns the corresponding cartographic position.
102
101
  */
103
- tileXYToCartographic(x, y, level, result, height) {
104
- this.tileXYToFraction(x, y, level, this._scratchFraction);
105
- return this.fractionToCartographic(this._scratchFraction.x, this._scratchFraction.y, result, height);
102
+ tileXYToCartographic(x, y, level, result, height = 0) {
103
+ const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);
104
+ return this.fractionToCartographic(pt.x, pt.y, result, height);
106
105
  }
106
+ /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */
107
107
  tileXYToRectangle(x, y, level, result) {
108
- return level < 0 ? MapCartoRectangle.create() : MapCartoRectangle.create(this.tileXToLongitude(x, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level), this.tileXToLongitude(x + 1, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level), result);
108
+ if (level < 0)
109
+ return MapCartoRectangle.createMaximum();
110
+ return MapCartoRectangle.fromRadians(this.tileXToLongitude(x, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level), this.tileXToLongitude(x + 1, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level), result);
109
111
  }
112
+ /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */
110
113
  tileBordersNorthPole(row, level) {
111
114
  return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;
112
115
  }
116
+ /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */
113
117
  tileBordersSouthPole(row, level) {
114
118
  return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;
115
119
  }
116
- /** Get tile XY from Cartographic.
117
- *
118
- * @param x column
119
- * @param y row
120
- * @param level depth
121
- * @param result result longitude, latitude.
122
- * @param height height (optional)
120
+ /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the
121
+ * X and Y axes.
123
122
  */
124
123
  cartographicToTileXY(carto, level, result) {
125
- const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, MapTilingScheme._scratchPoint2d);
124
+ const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);
126
125
  return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);
127
126
  }
128
- /** Get fraction from Cartographic.
129
- * @param xFraction
130
- * @param yFraction
131
- * @param result
132
- * @param height
133
- */
134
- fractionToCartographic(xFraction, yFraction, result, height) {
127
+ /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */
128
+ fractionToCartographic(xFraction, yFraction, result, height = 0) {
135
129
  result.longitude = this.xFractionToLongitude(xFraction);
136
130
  result.latitude = this.yFractionToLatitude(yFraction);
137
- result.height = undefined === height ? 0.0 : height;
131
+ result.height = height;
138
132
  return result;
139
133
  }
134
+ /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */
140
135
  cartographicToFraction(latitudeRadians, longitudeRadians, result) {
141
136
  result.x = this.longitudeToXFraction(longitudeRadians);
142
137
  result.y = this.latitudeToYFraction(latitudeRadians);
143
138
  return result;
144
139
  }
145
- // gets the longitude and latitude into a point with coordinates between 0 and 1
140
+ /** @alpha */
146
141
  ecefToPixelFraction(point, applyTerrain) {
147
142
  const cartoGraphic = Cartographic.fromEcef(point);
148
143
  return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);
149
144
  }
145
+ /** @alpha */
150
146
  computeMercatorFractionToDb(ecefToDb, bimElevationOffset, iModel, applyTerrain) {
151
147
  const dbToEcef = ecefToDb.inverse();
152
148
  const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);
@@ -162,24 +158,29 @@ export class MapTilingScheme {
162
158
  const mercatorToDb = dbToMercator.inverse();
163
159
  return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;
164
160
  }
161
+ /** @alpha */
165
162
  yFractionFlip(fraction) {
166
163
  return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;
167
164
  }
168
165
  }
169
- MapTilingScheme._scratchPoint2d = Point2d.createZero();
170
- /** @internal */
166
+ /** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.
167
+ * This projection is commonly known as "geographic", "equirectangular", "equidistant cylindrical", or "plate carrée".
168
+ * @beta
169
+ */
171
170
  export class GeographicTilingScheme extends MapTilingScheme {
172
171
  constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {
173
172
  super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);
174
173
  }
174
+ /** @internal override */
175
175
  yFractionToLatitude(yFraction) {
176
176
  return Math.PI * (this.yFractionFlip(yFraction) - .5);
177
177
  }
178
+ /** @internal override */
178
179
  latitudeToYFraction(latitude) {
179
180
  return this.yFractionFlip(.5 + latitude / Math.PI);
180
181
  }
181
182
  }
182
- /** @internal */
183
+ /** @alpha */
183
184
  export class WebMercatorProjection {
184
185
  /**
185
186
  * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude
@@ -193,26 +194,29 @@ export class WebMercatorProjection {
193
194
  }
194
195
  static geodeticLatitudeToMercatorAngle(latitude) {
195
196
  // Clamp the latitude coordinate to the valid Mercator bounds.
196
- if (latitude > WebMercatorProjection.maximumLatitude) {
197
+ if (latitude > WebMercatorProjection.maximumLatitude)
197
198
  latitude = WebMercatorProjection.maximumLatitude;
198
- }
199
- else if (latitude < -WebMercatorProjection.maximumLatitude) {
199
+ else if (latitude < -WebMercatorProjection.maximumLatitude)
200
200
  latitude = -WebMercatorProjection.maximumLatitude;
201
- }
202
201
  const sinLatitude = Math.sin(latitude);
203
202
  return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));
204
203
  }
205
204
  }
206
205
  WebMercatorProjection.maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);
207
- /** @internal */
206
+ /** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.
207
+ * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.
208
+ * @beta
209
+ */
208
210
  export class WebMercatorTilingScheme extends MapTilingScheme {
209
- constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true /* Bing uses 0 north */) {
211
+ constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {
210
212
  super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);
211
213
  }
214
+ /** @internal override */
212
215
  yFractionToLatitude(yFraction) {
213
216
  const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));
214
217
  return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);
215
218
  }
219
+ /** @internal override */
216
220
  latitudeToYFraction(latitude) {
217
221
  // Clamp the latitude coordinate to the valid Mercator bounds.
218
222
  if (latitude > WebMercatorProjection.maximumLatitude) {
@@ -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, Range2d, 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/** @internal */\r\nexport abstract class MapTilingScheme {\r\n private _scratchFraction = Point2d.createZero();\r\n\r\n /**\r\n * @param longitude in radians (-pi to pi)\r\n */\r\n public longitudeToXFraction(longitude: number) {\r\n return longitude / Angle.pi2Radians + .5;\r\n }\r\n\r\n /**\r\n * Return longitude in radians (-pi to pi from fraction).\r\n */\r\n public xFractionToLongitude(xFraction: number) {\r\n return Angle.pi2Radians * (xFraction - .5);\r\n }\r\n\r\n public abstract yFractionToLatitude(yFraction: number): number;\r\n public abstract latitudeToYFraction(latitude: number): number;\r\n\r\n protected constructor(public readonly numberOfLevelZeroTilesX: number, public readonly numberOfLevelZeroTilesY: number, public rowZeroAtNorthPole: boolean, private _rectangle = Range2d.createXYXY(-Angle.piRadians, -Angle.piOver2Radians, Angle.piRadians, Angle.piOver2Radians)) {\r\n }\r\n /**\r\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\r\n *\r\n * @param {Number} level The level-of-detail. Level 0 is the root tile.\r\n * @returns {Number} The number of tiles in the X direction at the given level.\r\n */\r\n public getNumberOfXTilesAtLevel(level: number) {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\r\n }\r\n\r\n /**\r\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\r\n *\r\n *\r\n * @param {Number} level The level-of-detail. Level 0 is the root tile.\r\n * @returns {Number} The number of tiles in the Y direction at the given level.\r\n */\r\n public getNumberOfYTilesAtLevel(level: number): number {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\r\n }\r\n\r\n public get rootLevel() {\r\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\r\n }\r\n public getNumberOfXChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\r\n }\r\n public getNumberOfYChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\r\n }\r\n public tileXToFraction(x: number, level: number): number {\r\n return x / this.getNumberOfXTilesAtLevel(level);\r\n }\r\n\r\n public tileYToFraction(y: number, level: number): number {\r\n return y / this.getNumberOfYTilesAtLevel(level);\r\n }\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 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 public tileXToLongitude(x: number, level: number) {\r\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\r\n }\r\n public tileYToLatitude(y: number, level: number) {\r\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\r\n }\r\n /**\r\n * Gets the fraction of the normalized (0-1) coordinates with at left, bottom.\r\n *\r\n * @param x column\r\n * @param y row\r\n * @param level depth\r\n * @param result result (0-1 from left, bottom\r\n */\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 private static _scratchPoint2d = Point2d.createZero();\r\n /** Get Cartographic from tile XY\r\n *\r\n * @param x column\r\n * @param y row\r\n * @param level depth\r\n * @param result result longitude, latitude.\r\n * @param height height (optional)\r\n */\r\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height?: number): Cartographic {\r\n this.tileXYToFraction(x, y, level, this._scratchFraction);\r\n return this.fractionToCartographic(this._scratchFraction.x, this._scratchFraction.y, result, height);\r\n }\r\n\r\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\r\n return level < 0 ? MapCartoRectangle.create() : MapCartoRectangle.create(this.tileXToLongitude(x, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level), this.tileXToLongitude(x + 1, level), this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level), result);\r\n }\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 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 /** Get tile XY from Cartographic.\r\n *\r\n * @param x column\r\n * @param y row\r\n * @param level depth\r\n * @param result result longitude, latitude.\r\n * @param height height (optional)\r\n */\r\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\r\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, MapTilingScheme._scratchPoint2d);\r\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\r\n\r\n }\r\n /** Get fraction from Cartographic.\r\n * @param xFraction\r\n * @param yFraction\r\n * @param result\r\n * @param height\r\n */\r\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height?: number): Cartographic {\r\n result.longitude = this.xFractionToLongitude(xFraction);\r\n result.latitude = this.yFractionToLatitude(yFraction);\r\n result.height = undefined === height ? 0.0 : height;\r\n return result;\r\n }\r\n\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 // gets the longitude and latitude into a point with coordinates between 0 and 1\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 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 protected yFractionFlip(fraction: number) {\r\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class GeographicTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX: number = 2, numberOfLevelZeroTilesY: number = 1, rowZeroAtNorthPole = false) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n public yFractionToLatitude(yFraction: number): number {\r\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\r\n }\r\n\r\n public latitudeToYFraction(latitude: number): number {\r\n return this.yFractionFlip(.5 + latitude / Math.PI);\r\n }\r\n}\r\n\r\n/** @internal */\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 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/** @internal */\r\nexport class WebMercatorTilingScheme extends MapTilingScheme {\r\n\r\n public constructor(numberOfLevelZeroTilesX: number = 1, numberOfLevelZeroTilesY: number = 1, rowZeroAtNorthPole: boolean = true /* Bing uses 0 north */) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\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 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 * @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"]}
@@ -3,25 +3,47 @@
3
3
  */
4
4
  import { AngleSweep, Range2d } from "@itwin/core-geometry";
5
5
  import { MapTilingScheme } from "../internal";
6
- /** @internal */
6
+ /** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
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
+ * level L+1.
9
+ * @beta
10
+ */
7
11
  export declare class QuadId {
12
+ /** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */
8
13
  level: number;
14
+ /** The node's position along the X axis as a non-negative integer. */
9
15
  column: number;
16
+ /** The node's position along the Y axis as a non-negative integer. */
10
17
  row: number;
18
+ /** @alpha */
11
19
  get isValid(): boolean;
20
+ /** @alpha */
12
21
  static createFromContentId(stringId: string): QuadId;
22
+ /** @alpha */
13
23
  get contentId(): string;
24
+ /** @alpha */
14
25
  static getTileContentId(level: number, column: number, row: number): string;
26
+ /** @alpha */
15
27
  get debugString(): string;
28
+ /** Construct a new QuadId. The inputs are expected to be non-negative integers. */
16
29
  constructor(level: number, column: number, row: number);
30
+ /** Compute the QuadIds corresponding to this node's four child nodes. */
17
31
  getChildIds(columnCount?: number, rowCount?: number): QuadId[];
18
- getLatLongRange(mapTilingScheme: MapTilingScheme): Range2d;
32
+ /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */
33
+ getLatLongRangeDegrees(mapTilingScheme: MapTilingScheme): Range2d;
34
+ /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */
35
+ getLatLongRangeRadians(mapTilingScheme: MapTilingScheme): Range2d;
36
+ private _getLatLongRange;
37
+ /** @alpha */
19
38
  getAngleSweep(mapTilingScheme: MapTilingScheme): {
20
39
  longitude: AngleSweep;
21
40
  latitude: AngleSweep;
22
41
  };
42
+ /** Returns true if this node is adjacent to the south pole according to the specified tiling scheme. */
23
43
  bordersSouthPole(mapTilingScheme: MapTilingScheme): boolean;
44
+ /** Returns true if this node is adjacent to the north pole according to the specified tiling scheme. */
24
45
  bordersNorthPole(mapTilingScheme: MapTilingScheme): boolean;
46
+ /** Compares this Id to another according to the conventions of an [OrderedComparator]($bentley). */
25
47
  compare(other: QuadId): number;
26
48
  }
27
49
  //# sourceMappingURL=QuadId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuadId.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAS,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,gBAAgB;AAChB,qBAAa,MAAM;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACnB,IAAW,OAAO,YAA8B;WAElC,mBAAmB,CAAC,QAAQ,EAAE,MAAM;IAUlD,IAAW,SAAS,IAAI,MAAM,CAAwE;WACxF,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAElF,IAAW,WAAW,IAAI,MAAM,CAA2E;gBAExF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKtD,WAAW,CAAC,WAAW,SAAI,EAAE,QAAQ,SAAI,GAAG,MAAM,EAAE;IAapD,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO;IAU1D,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,UAAU,CAAA;KAAE;IAMhG,gBAAgB,CAAC,eAAe,EAAE,eAAe;IAIjD,gBAAgB,CAAC,eAAe,EAAE,eAAe;IAGjD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAStC"}
1
+ {"version":3,"file":"QuadId.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAS,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C;;;;GAIG;AACH,qBAAa,MAAM;IACjB,0GAA0G;IACnG,KAAK,EAAE,MAAM,CAAC;IACrB,sEAAsE;IAC/D,MAAM,EAAE,MAAM,CAAC;IACtB,sEAAsE;IAC/D,GAAG,EAAE,MAAM,CAAC;IAEnB,aAAa;IACb,IAAW,OAAO,YAEjB;IAED,aAAa;WACC,mBAAmB,CAAC,QAAQ,EAAE,MAAM;IASlD,aAAa;IACb,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,aAAa;WACC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIlF,aAAa;IACb,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,mFAAmF;gBAChE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAM7D,yEAAyE;IAClE,WAAW,CAAC,WAAW,SAAI,EAAE,QAAQ,SAAI,GAAG,MAAM,EAAE;IAY3D,wHAAwH;IACjH,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO;IAIxE,wHAAwH;IACjH,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO;IAIxE,OAAO,CAAC,gBAAgB;IAYxB,aAAa;IACN,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,UAAU,CAAA;KAAE;IAYvG,wGAAwG;IACjG,gBAAgB,CAAC,eAAe,EAAE,eAAe;IAIxD,wGAAwG;IACjG,gBAAgB,CAAC,eAAe,EAAE,eAAe;IAIxD,oGAAoG;IAC7F,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAKtC"}
@@ -10,25 +10,43 @@ import { Angle, AngleSweep, Range2d } from "@itwin/core-geometry";
10
10
  import { Cartographic } from "@itwin/core-common";
11
11
  const scratchCartographic1 = Cartographic.createZero();
12
12
  const scratchCartographic2 = Cartographic.createZero();
13
- /** @internal */
13
+ /** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
14
+ * 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
15
+ * level L+1.
16
+ * @beta
17
+ */
14
18
  export class QuadId {
19
+ /** Construct a new QuadId. The inputs are expected to be non-negative integers. */
15
20
  constructor(level, column, row) {
16
21
  this.level = level;
17
22
  this.column = column;
18
23
  this.row = row;
19
24
  }
20
- get isValid() { return this.level >= 0; }
25
+ /** @alpha */
26
+ get isValid() {
27
+ return this.level >= 0;
28
+ }
29
+ /** @alpha */
21
30
  static createFromContentId(stringId) {
22
31
  const idParts = stringId.split("_");
23
- if (3 !== idParts.length) {
24
- assert(false, "Invalid quad tree ID");
32
+ assert(idParts.length === 3);
33
+ if (3 !== idParts.length)
25
34
  return new QuadId(-1, -1, -1);
26
- }
27
35
  return new QuadId(parseInt(idParts[0], 10), parseInt(idParts[1], 10), parseInt(idParts[2], 10));
28
36
  }
29
- get contentId() { return QuadId.getTileContentId(this.level, this.column, this.row); }
30
- static getTileContentId(level, column, row) { return `${level}_${column}_${row}`; }
31
- get debugString() { return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`; }
37
+ /** @alpha */
38
+ get contentId() {
39
+ return QuadId.getTileContentId(this.level, this.column, this.row);
40
+ }
41
+ /** @alpha */
42
+ static getTileContentId(level, column, row) {
43
+ return `${level}_${column}_${row}`;
44
+ }
45
+ /** @alpha */
46
+ get debugString() {
47
+ return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`;
48
+ }
49
+ /** Compute the QuadIds corresponding to this node's four child nodes. */
32
50
  getChildIds(columnCount = 2, rowCount = 2) {
33
51
  const childIds = [];
34
52
  const level = this.level + 1;
@@ -39,34 +57,45 @@ export class QuadId {
39
57
  childIds.push(new QuadId(level, column + i, row + j));
40
58
  return childIds;
41
59
  }
42
- // Not used in display - used only to tell whether this tile overlaps the range provided by a tile provider for attribution.
43
- getLatLongRange(mapTilingScheme) {
60
+ /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */
61
+ getLatLongRangeDegrees(mapTilingScheme) {
62
+ return this._getLatLongRange(mapTilingScheme, "degrees");
63
+ }
64
+ /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */
65
+ getLatLongRangeRadians(mapTilingScheme) {
66
+ return this._getLatLongRange(mapTilingScheme, "radians");
67
+ }
68
+ _getLatLongRange(mapTilingScheme, units) {
44
69
  const range = Range2d.createNull();
70
+ const factor = "degrees" === units ? Angle.degreesPerRadian : 1;
45
71
  mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);
46
- range.extendXY(scratchCartographic1.longitude * Angle.degreesPerRadian, scratchCartographic1.latitude * Angle.degreesPerRadian);
72
+ range.extendXY(scratchCartographic1.longitude * factor, scratchCartographic1.latitude * factor);
47
73
  mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);
48
- range.extendXY(scratchCartographic2.longitude * Angle.degreesPerRadian, scratchCartographic2.latitude * Angle.degreesPerRadian);
74
+ range.extendXY(scratchCartographic2.longitude * factor, scratchCartographic2.latitude * factor);
49
75
  return range;
50
76
  }
77
+ /** @alpha */
51
78
  getAngleSweep(mapTilingScheme) {
52
79
  mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);
53
80
  mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);
54
- return { longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude), latitude: AngleSweep.createStartEndRadians(Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude), Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)) };
81
+ return {
82
+ longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude),
83
+ latitude: AngleSweep.createStartEndRadians(Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude), Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)),
84
+ };
55
85
  }
86
+ /** Returns true if this node is adjacent to the south pole according to the specified tiling scheme. */
56
87
  bordersSouthPole(mapTilingScheme) {
57
88
  return mapTilingScheme.tileBordersSouthPole(this.row, this.level);
58
89
  }
90
+ /** Returns true if this node is adjacent to the north pole according to the specified tiling scheme. */
59
91
  bordersNorthPole(mapTilingScheme) {
60
92
  return mapTilingScheme.tileBordersNorthPole(this.row, this.level);
61
93
  }
94
+ /** Compares this Id to another according to the conventions of an [OrderedComparator]($bentley). */
62
95
  compare(other) {
63
- let cmp = compareNumbers(this.level, other.level);
64
- if (0 === cmp) {
65
- cmp = compareNumbers(this.row, other.row);
66
- if (0 === cmp)
67
- cmp = compareNumbers(this.column, other.column);
68
- }
69
- return cmp;
96
+ return compareNumbers(this.level, other.level) ||
97
+ compareNumbers(this.row, other.row) ||
98
+ compareNumbers(this.column, other.column);
70
99
  }
71
100
  }
72
101
  //# sourceMappingURL=QuadId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuadId.js","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,oBAAoB,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;AACvD,MAAM,oBAAoB,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;AAEvD,gBAAgB;AAChB,MAAM,OAAO,MAAM;IAqBjB,YAAmB,KAAa,EAAE,MAAc,EAAE,GAAW;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IArBD,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,CAAC,mBAAmB,CAAC,QAAgB;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE;YACxB,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YACtC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,IAAW,SAAS,KAAa,OAAQ,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,GAAW,IAAY,OAAO,GAAG,KAAK,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAE1H,IAAW,WAAW,KAAa,OAAO,UAAU,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAOpG,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC;QAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE;gBAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,4HAA4H;IACrH,eAAe,CAAC,eAAgC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC9F,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChI,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACtG,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAEhI,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,aAAa,CAAC,eAAgC;QACnD,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC9F,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACtG,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,qBAAqB,CAAC,YAAY,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAC7U,CAAC;IAEM,gBAAgB,CAAC,eAAgC;QACtD,OAAO,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAEM,gBAAgB,CAAC,eAAgC;QACtD,OAAO,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IACM,OAAO,CAAC,KAAa;QAC1B,IAAI,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,EAAE;YACb,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;SACnD;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF","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/** @internal */\r\nexport class QuadId {\r\n public level: number;\r\n public column: number;\r\n public row: number;\r\n public get isValid() { return this.level >= 0; }\r\n\r\n public static createFromContentId(stringId: string) {\r\n const idParts = stringId.split(\"_\");\r\n if (3 !== idParts.length) {\r\n assert(false, \"Invalid quad tree ID\");\r\n return new QuadId(-1, -1, -1);\r\n }\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 public get contentId(): string { return QuadId.getTileContentId(this.level, this.column, this.row); }\r\n public static getTileContentId(level: number, column: number, row: number): string { return `${level}_${column}_${row}`; }\r\n\r\n public get debugString(): string { return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`; }\r\n\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 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 // Not used in display - used only to tell whether this tile overlaps the range provided by a tile provider for attribution.\r\n public getLatLongRange(mapTilingScheme: MapTilingScheme): Range2d {\r\n const range = Range2d.createNull();\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n range.extendXY(scratchCartographic1.longitude * Angle.degreesPerRadian, scratchCartographic1.latitude * Angle.degreesPerRadian);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n range.extendXY(scratchCartographic2.longitude * Angle.degreesPerRadian, scratchCartographic2.latitude * Angle.degreesPerRadian);\r\n\r\n return range;\r\n }\r\n\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 { longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude), latitude: AngleSweep.createStartEndRadians(Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude), Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)) };\r\n }\r\n\r\n public bordersSouthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersSouthPole(this.row, this.level);\r\n }\r\n\r\n public bordersNorthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersNorthPole(this.row, this.level);\r\n }\r\n public compare(other: QuadId): number {\r\n let cmp = compareNumbers(this.level, other.level);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(this.row, other.row);\r\n if (0 === cmp)\r\n cmp = compareNumbers(this.column, other.column);\r\n }\r\n return cmp;\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 * @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"]}