@itwin/core-frontend 5.2.0-dev.5 → 5.2.0-dev.7
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.
- package/lib/cjs/BackgroundMapGeometry.js +13 -13
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +2 -2
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
- package/lib/cjs/CheckpointConnection.js +3 -3
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/ContextRealityModelState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +7 -6
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
- package/lib/cjs/EmphasizeElements.js +3 -1
- package/lib/cjs/EmphasizeElements.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +4 -0
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
- package/lib/cjs/FrustumAnimator.js +3 -2
- package/lib/cjs/FrustumAnimator.js.map +1 -1
- package/lib/cjs/GlobeAnimator.d.ts.map +1 -1
- package/lib/cjs/GlobeAnimator.js +7 -6
- package/lib/cjs/GlobeAnimator.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +12 -7
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +2 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +8 -9
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/cjs/LinePlaneIntersect.js +2 -0
- package/lib/cjs/LinePlaneIntersect.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +2 -1
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/Marker.d.ts.map +1 -1
- package/lib/cjs/Marker.js +4 -3
- package/lib/cjs/Marker.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +2 -2
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +5 -4
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
- package/lib/cjs/NativeAppLogger.js +1 -0
- package/lib/cjs/NativeAppLogger.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +3 -3
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +1 -0
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +5 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -1
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/Sprites.js +2 -2
- package/lib/cjs/Sprites.js.map +1 -1
- package/lib/cjs/TentativePoint.d.ts.map +1 -1
- package/lib/cjs/TentativePoint.js +10 -9
- package/lib/cjs/TentativePoint.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +1 -1
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +1 -1
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewPose.d.ts.map +1 -1
- package/lib/cjs/ViewPose.js +4 -1
- package/lib/cjs/ViewPose.js.map +1 -1
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +17 -12
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.d.ts.map +1 -1
- package/lib/cjs/ViewingSpace.js +2 -0
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +17 -10
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/ImageUtil.d.ts.map +1 -1
- package/lib/cjs/common/ImageUtil.js +2 -1
- package/lib/cjs/common/ImageUtil.js.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.js +16 -7
- package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/cjs/extension/ExtensionAdmin.js +2 -2
- package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
- package/lib/cjs/internal/GoogleMapsDecorator.js +1 -1
- package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/cjs/internal/ScriptUtils.js +1 -0
- package/lib/cjs/internal/ScriptUtils.js.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/cjs/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js +2 -2
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.js +2 -1
- package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
- package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.js +2 -2
- package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Contours.js +3 -3
- package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/EDL.js +18 -18
- package/lib/cjs/internal/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js +4 -4
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrameBuffer.js +3 -3
- package/lib/cjs/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.js +2 -0
- package/lib/cjs/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +2 -2
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MeshData.js +2 -2
- package/lib/cjs/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js +7 -7
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderBuffer.js +2 -2
- package/lib/cjs/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +115 -85
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js +3 -3
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderProgram.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +6 -4
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/System.js +1 -1
- package/lib/cjs/internal/render/webgl/System.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +10 -7
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.js +10 -8
- package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.js +4 -2
- package/lib/cjs/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +8 -8
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +10 -10
- package/lib/cjs/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js +2 -2
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.js +4 -0
- package/lib/cjs/internal/tile/LRUTileList.js.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js +4 -4
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +3 -3
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.js +3 -0
- package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js +3 -3
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.js +4 -0
- package/lib/cjs/internal/tile/TileUserSet.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.js +5 -2
- package/lib/cjs/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.js +2 -0
- package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +5 -2
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +54 -16
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +2 -2
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +5 -5
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +2 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +9 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +10 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +8 -7
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +2 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tools/Tool.js +1 -1
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/esm/BackgroundMapGeometry.js +14 -14
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +2 -2
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CheckpointConnection.d.ts.map +1 -1
- package/lib/esm/CheckpointConnection.js +4 -4
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/ContextRealityModelState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +8 -7
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/EmphasizeElements.d.ts.map +1 -1
- package/lib/esm/EmphasizeElements.js +3 -1
- package/lib/esm/EmphasizeElements.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +4 -0
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FrustumAnimator.d.ts.map +1 -1
- package/lib/esm/FrustumAnimator.js +3 -2
- package/lib/esm/FrustumAnimator.js.map +1 -1
- package/lib/esm/GlobeAnimator.d.ts.map +1 -1
- package/lib/esm/GlobeAnimator.js +7 -6
- package/lib/esm/GlobeAnimator.js.map +1 -1
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +12 -7
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +4 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +9 -10
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +2 -2
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/esm/LinePlaneIntersect.js +2 -0
- package/lib/esm/LinePlaneIntersect.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +2 -1
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/Marker.d.ts.map +1 -1
- package/lib/esm/Marker.js +5 -4
- package/lib/esm/Marker.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +3 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +5 -4
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NativeAppLogger.d.ts.map +1 -1
- package/lib/esm/NativeAppLogger.js +1 -0
- package/lib/esm/NativeAppLogger.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +3 -3
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +2 -1
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +6 -6
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +2 -2
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/Sprites.js +2 -2
- package/lib/esm/Sprites.js.map +1 -1
- package/lib/esm/TentativePoint.d.ts.map +1 -1
- package/lib/esm/TentativePoint.js +10 -9
- package/lib/esm/TentativePoint.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +1 -1
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +1 -1
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewPose.d.ts.map +1 -1
- package/lib/esm/ViewPose.js +4 -1
- package/lib/esm/ViewPose.js.map +1 -1
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +18 -13
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.d.ts.map +1 -1
- package/lib/esm/ViewingSpace.js +2 -0
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +18 -11
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/ImageUtil.d.ts.map +1 -1
- package/lib/esm/common/ImageUtil.js +2 -1
- package/lib/esm/common/ImageUtil.js.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/MeshBuilder.js +2 -2
- package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.js +17 -8
- package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/esm/extension/ExtensionAdmin.js +2 -2
- package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
- package/lib/esm/internal/GoogleMapsDecorator.js +1 -1
- package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/esm/internal/ScriptUtils.js +1 -0
- package/lib/esm/internal/ScriptUtils.js.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/esm/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.js +2 -1
- package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchUniforms.js +3 -3
- package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.js +3 -3
- package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/esm/internal/render/webgl/ColorInfo.js +2 -2
- package/lib/esm/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/esm/internal/render/webgl/Contours.js +4 -4
- package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/EDL.js +19 -19
- package/lib/esm/internal/render/webgl/EDL.js.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.js +5 -5
- package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrameBuffer.js +4 -4
- package/lib/esm/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.js +2 -0
- package/lib/esm/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +3 -3
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/MeshData.js +3 -3
- package/lib/esm/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.js +8 -8
- package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarGrid.js +2 -2
- package/lib/esm/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/internal/render/webgl/PointCloud.js +2 -2
- package/lib/esm/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/internal/render/webgl/RealityMesh.js +2 -2
- package/lib/esm/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderBuffer.js +3 -3
- package/lib/esm/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +116 -86
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js +4 -4
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderProgram.js +4 -4
- package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +7 -5
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/System.js +2 -2
- package/lib/esm/internal/render/webgl/System.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +11 -8
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.js +11 -9
- package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.js +5 -3
- package/lib/esm/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Composite.js +2 -2
- package/lib/esm/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js +4 -4
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +9 -9
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +11 -11
- package/lib/esm/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Vertex.js +3 -3
- package/lib/esm/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.js +2 -2
- package/lib/esm/internal/tile/B3dmReader.js.map +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.js +4 -0
- package/lib/esm/internal/tile/LRUTileList.js.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/esm/internal/tile/OPCFormatInterpreter.js +5 -5
- package/lib/esm/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.js +3 -3
- package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +4 -4
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.js +3 -0
- package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js +4 -4
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.js +4 -0
- package/lib/esm/internal/tile/TileUserSet.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -2
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.js +6 -3
- package/lib/esm/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.js +2 -0
- package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +5 -2
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +55 -17
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +3 -3
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +6 -6
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +2 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +2 -2
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +2 -2
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +10 -2
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +11 -9
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +9 -8
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +2 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -2
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.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, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { DecorateContext, SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapLayerTreeSetting, MapTile,\r\n MapTileLoader, MapTilingScheme, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n\r\n /** @internal */\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._layerHandler.imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._layerHandler.imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this._layerHandler.layerImageryTrees.length = 0;\r\n this._layerHandler.layerSettings.clear();\r\n this._layerHandler.modelIdToIndex.clear();\r\n this._layerHandler.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n /** NB: need to use local layerImageTrees because of the order super() is called (before layerHandler exists on this class)! */\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return this.earthEllipsoid.worldToLocal(point, scratchPoint)!.magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = this._gcsConverter!.getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._layerHandler.modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerHandler.layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainDataSource: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.terrainDataSource, rhs.terrainDataSource);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n dataSource: id.terrainDataSource,\r\n produceGeometry: id.produceGeometry,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n public get layerRefHandler() { return this._layerRefHandler; }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.Globe === mapLayerSettings.drapeTarget;\r\n return true; // catch-all for other cases (skip reality models, though).\r\n }\r\n\r\n public constructor(settings: BackgroundMapSettings, baseLayerSettings: BaseLayerSettings | undefined, layerSettings: MapLayerSettings[], iModel: IModelConnection, tileUserId: number, isOverlay: boolean, private _isDrape: boolean, private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n\r\n this.iModel = iModel;\r\n\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, isOverlay, baseLayerSettings, layerSettings, true);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this.baseColor; }\r\n public override get planarClipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this.iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this.layerRefHandler.layerSettings;\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerRefHandler.layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this._layerRefHandler.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._layerRefHandler.baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainDataSource: this.settings.terrainSettings.dataSource,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this._layerRefHandler.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._layerRefHandler.baseColor,\r\n baseTransparent: this._layerRefHandler.baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this.iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._layerRefHandler.baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerRefHandler.layerTrees.length ? undefined : this._layerRefHandler.layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerHandler.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n this._layerRefHandler.discloseTileTrees(trees);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerRefHandler.layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._layerRefHandler.baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : { isOverlay: this._layerRefHandler.isOverlay, index: this._layerRefHandler.baseImageryLayerIncluded ? tree.layerIndex - 1 : tree.layerIndex },\r\n settings: tree.layerSettings, provider: tree.imageryProvider,\r\n };\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const tree = this.treeOwner.tileTree;\r\n return undefined !== tree && tree.modelId === hit.modelId;\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree | undefined;\r\n if (undefined === tree || tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.ImageryLayer\")}: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Latitude\")}: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Longitude\")}: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Height\")}: ${geodeticHeight.toFixed(1)} ${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.SeaLevel\")}: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override async addAttributions(cards: HTMLTableElement, vp: ScreenViewport): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n\r\n if (tree) {\r\n const promises = [tree.mapLoader.terrainProvider.addAttributions(cards, vp)];\r\n\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n promises.push(imageryTree.addAttributions(cards, vp));\r\n }\r\n }\r\n await Promise.all(promises);\r\n }\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n if (layerTree)\r\n layerTree.decorate(context);\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.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, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, expectDefined, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { DecorateContext, SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapLayerTreeSetting, MapTile,\r\n MapTileLoader, MapTilingScheme, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n\r\n /** @internal */\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._layerHandler.imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._layerHandler.imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this._layerHandler.layerImageryTrees.length = 0;\r\n this._layerHandler.layerSettings.clear();\r\n this._layerHandler.modelIdToIndex.clear();\r\n this._layerHandler.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n /** NB: need to use local layerImageTrees because of the order super() is called (before layerHandler exists on this class)! */\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return expectDefined(this.earthEllipsoid.worldToLocal(point, scratchPoint)).magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = expectDefined(this._gcsConverter).getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await expectDefined(this._gcsConverter).getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._layerHandler.modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerHandler.layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainDataSource: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.terrainDataSource, rhs.terrainDataSource);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n dataSource: id.terrainDataSource,\r\n produceGeometry: id.produceGeometry,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n public get layerRefHandler() { return this._layerRefHandler; }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.Globe === mapLayerSettings.drapeTarget;\r\n return true; // catch-all for other cases (skip reality models, though).\r\n }\r\n\r\n public constructor(settings: BackgroundMapSettings, baseLayerSettings: BaseLayerSettings | undefined, layerSettings: MapLayerSettings[], iModel: IModelConnection, tileUserId: number, isOverlay: boolean, private _isDrape: boolean, private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n\r\n this.iModel = iModel;\r\n\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, isOverlay, baseLayerSettings, layerSettings, true);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this.baseColor; }\r\n public override get planarClipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this.iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this.layerRefHandler.layerSettings;\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerRefHandler.layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this._layerRefHandler.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._layerRefHandler.baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainDataSource: this.settings.terrainSettings.dataSource,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this._layerRefHandler.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._layerRefHandler.baseColor,\r\n baseTransparent: this._layerRefHandler.baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this.iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._layerRefHandler.baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerRefHandler.layerTrees.length ? undefined : this._layerRefHandler.layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerHandler.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n this._layerRefHandler.discloseTileTrees(trees);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerRefHandler.layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._layerRefHandler.baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : { isOverlay: this._layerRefHandler.isOverlay, index: this._layerRefHandler.baseImageryLayerIncluded ? tree.layerIndex - 1 : tree.layerIndex },\r\n settings: tree.layerSettings, provider: tree.imageryProvider,\r\n };\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const tree = this.treeOwner.tileTree;\r\n return undefined !== tree && tree.modelId === hit.modelId;\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree | undefined;\r\n if (undefined === tree || tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.ImageryLayer\")}: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Latitude\")}: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Longitude\")}: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Height\")}: ${geodeticHeight.toFixed(1)} ${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.SeaLevel\")}: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override async addAttributions(cards: HTMLTableElement, vp: ScreenViewport): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n\r\n if (tree) {\r\n const promises = [tree.mapLoader.terrainProvider.addAttributions(cards, vp)];\r\n\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n promises.push(imageryTree.addAttributions(cards, vp));\r\n }\r\n }\r\n await Promise.all(promises);\r\n }\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n if (layerTree)\r\n layerTree.decorate(context);\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTilingScheme.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"MapTilingScheme.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.WebMercatorTilingScheme = exports.WebMercatorProjection = exports.GeographicTilingScheme = exports.MapTilingScheme = void 0;
|
|
11
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
11
12
|
const core_geometry_1 = require("@itwin/core-geometry");
|
|
12
13
|
const core_common_1 = require("@itwin/core-common");
|
|
13
14
|
const internal_1 = require("../internal");
|
|
@@ -157,7 +158,7 @@ class MapTilingScheme {
|
|
|
157
158
|
}
|
|
158
159
|
/** @alpha */
|
|
159
160
|
computeMercatorFractionToDb(ecefToDb, bimElevationOffset, iModel, applyTerrain) {
|
|
160
|
-
const dbToEcef = ecefToDb.inverse();
|
|
161
|
+
const dbToEcef = (0, core_bentley_1.expectDefined)(ecefToDb.inverse());
|
|
161
162
|
const projectCenter = core_geometry_1.Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);
|
|
162
163
|
const projectEast = projectCenter.plusXYZ(1, 0, 0);
|
|
163
164
|
const projectNorth = projectCenter.plusXYZ(0, 1, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { Cartographic } from \"@itwin/core-common\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { MapCartoRectangle } from \"../internal\";\n\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).\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\n *\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\n * @public\n */\nexport abstract class MapTilingScheme {\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\n * 0 corresponds to the south pole and 1 to the north.\n */\n public readonly rowZeroAtNorthPole: boolean;\n /** The number of tiles in the X direction at level 0 of the quad tree. */\n public readonly numberOfLevelZeroTilesX;\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\n public readonly numberOfLevelZeroTilesY;\n private readonly _scratchFraction = Point2d.createZero();\n private readonly _scratchPoint2d = Point2d.createZero();\n\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\n public longitudeToXFraction(longitude: number) {\n return longitude / Angle.pi2Radians + .5;\n }\n\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\n public xFractionToLongitude(xFraction: number) {\n return Angle.pi2Radians * (xFraction - .5);\n }\n\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\n public abstract yFractionToLatitude(yFraction: number): number;\n\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\n public abstract latitudeToYFraction(latitude: number): number;\n\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\n }\n\n /** The total number of tiles in the X direction at the specified level of detail.\n * @param level The level of detail, with 0 corresponding to the root tile.\n */\n public getNumberOfXTilesAtLevel(level: number) {\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\n }\n\n /** The total number of tiles in the Y direction at the specified level of detail.\n * @param level The level of detail, with 0 corresponding to the root tile.\n */\n public getNumberOfYTilesAtLevel(level: number): number {\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\n }\n\n /** @alpha */\n public get rootLevel() {\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\n }\n\n /** @alpha */\n public getNumberOfXChildrenAtLevel(level: number): number {\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\n }\n\n /** @alpha */\n public getNumberOfYChildrenAtLevel(level: number): number {\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\n }\n\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\n public tileXToFraction(x: number, level: number): number {\n return x / this.getNumberOfXTilesAtLevel(level);\n }\n\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\n public tileYToFraction(y: number, level: number): number {\n return y / this.getNumberOfYTilesAtLevel(level);\n }\n\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\n public xFractionToTileX(xFraction: number, level: number): number {\n const nTiles = this.getNumberOfXTilesAtLevel(level);\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\n }\n\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\n public yFractionToTileY(yFraction: number, level: number): number {\n const nTiles = this.getNumberOfYTilesAtLevel(level);\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\n }\n\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\n public tileXToLongitude(x: number, level: number) {\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\n }\n\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\n public tileYToLatitude(y: number, level: number) {\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\n }\n\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\n if (undefined === result)\n result = Point2d.createZero();\n\n result.x = this.tileXToFraction(x, level);\n result.y = this.tileYToFraction(y, level);\n\n return result;\n }\n\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\n * @param x The X component of the QuadId.\n * @param y The Y component of the QuadId.\n * @param level The level component of the QuadId.\n * @param height The elevation above the ellipsoid.\n * @returns the corresponding cartographic position.\n */\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\n return this.fractionToCartographic(pt.x, pt.y, result, height);\n }\n\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\n if (level < 0)\n return MapCartoRectangle.createMaximum();\n\n return MapCartoRectangle.fromRadians(\n this.tileXToLongitude(x, level),\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\n this.tileXToLongitude(x + 1, level),\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\n result,\n );\n }\n\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\n public tileBordersNorthPole(row: number, level: number) {\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\n }\n\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\n public tileBordersSouthPole(row: number, level: number) {\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\n }\n\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\n * X and Y axes.\n */\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\n\n }\n\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\n result.longitude = this.xFractionToLongitude(xFraction);\n result.latitude = this.yFractionToLatitude(yFraction);\n result.height = height;\n return result;\n }\n\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\n result.x = this.longitudeToXFraction(longitudeRadians);\n result.y = this.latitudeToYFraction(latitudeRadians);\n return result;\n }\n\n /** @alpha */\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d | undefined {\n const cartoGraphic = Cartographic.fromEcef(point);\n if (!cartoGraphic)\n return undefined;\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\n }\n\n /** @alpha */\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\n const dbToEcef = ecefToDb.inverse()!;\n\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\n\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\n\n if (!mercatorOrigin || !mercatorX || !mercatorY)\n return Transform.createIdentity();\n\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\n\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\n const mercatorToDb = dbToMercator.inverse();\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\n }\n\n /** @alpha */\n protected yFractionFlip(fraction: number) {\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\n }\n}\n\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\n * @beta\n */\nexport class GeographicTilingScheme extends MapTilingScheme {\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\n }\n\n /** Implements [[MapTilingScheme.yFractionToLatitude]]. */\n public yFractionToLatitude(yFraction: number): number {\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\n }\n\n /** Implements [[MapTilingScheme.latitudeToYFraction]]. */\n public latitudeToYFraction(latitude: number): number {\n return this.yFractionFlip(.5 + latitude / Math.PI);\n }\n}\n\n/** @alpha */\nexport class WebMercatorProjection {\n /**\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\n * in the range -PI/2 to PI/2.\n *\n * @param {Number} mercatorAngle The angle to convert.\n * @returns {Number} The geodetic latitude in radians.\n */\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\n }\n\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\n\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\n // Clamp the latitude coordinate to the valid Mercator bounds.\n if (latitude > WebMercatorProjection.maximumLatitude)\n latitude = WebMercatorProjection.maximumLatitude;\n else if (latitude < -WebMercatorProjection.maximumLatitude)\n latitude = -WebMercatorProjection.maximumLatitude;\n\n const sinLatitude = Math.sin(latitude);\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n }\n}\n\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\n * @beta\n */\nexport class WebMercatorTilingScheme extends MapTilingScheme {\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\n }\n\n /** Implements [[MapTilingScheme.yFractionToLatitude]]. */\n public yFractionToLatitude(yFraction: number): number {\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\n }\n\n /** Implements [[MapTilingScheme.latitudeToYFraction. */\n public latitudeToYFraction(latitude: number): number {\n // Clamp the latitude coordinate to the valid Mercator bounds.\n if (latitude > WebMercatorProjection.maximumLatitude) {\n latitude = WebMercatorProjection.maximumLatitude;\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\n latitude = -WebMercatorProjection.maximumLatitude;\n }\n const sinLatitude = Math.sin(latitude);\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\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { expectDefined } from \"@itwin/core-bentley\";\nimport { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { Cartographic } from \"@itwin/core-common\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { MapCartoRectangle } from \"../internal\";\n\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).\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\n *\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\n * @public\n */\nexport abstract class MapTilingScheme {\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\n * 0 corresponds to the south pole and 1 to the north.\n */\n public readonly rowZeroAtNorthPole: boolean;\n /** The number of tiles in the X direction at level 0 of the quad tree. */\n public readonly numberOfLevelZeroTilesX;\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\n public readonly numberOfLevelZeroTilesY;\n private readonly _scratchFraction = Point2d.createZero();\n private readonly _scratchPoint2d = Point2d.createZero();\n\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\n public longitudeToXFraction(longitude: number) {\n return longitude / Angle.pi2Radians + .5;\n }\n\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\n public xFractionToLongitude(xFraction: number) {\n return Angle.pi2Radians * (xFraction - .5);\n }\n\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\n public abstract yFractionToLatitude(yFraction: number): number;\n\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\n public abstract latitudeToYFraction(latitude: number): number;\n\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\n }\n\n /** The total number of tiles in the X direction at the specified level of detail.\n * @param level The level of detail, with 0 corresponding to the root tile.\n */\n public getNumberOfXTilesAtLevel(level: number) {\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\n }\n\n /** The total number of tiles in the Y direction at the specified level of detail.\n * @param level The level of detail, with 0 corresponding to the root tile.\n */\n public getNumberOfYTilesAtLevel(level: number): number {\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\n }\n\n /** @alpha */\n public get rootLevel() {\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\n }\n\n /** @alpha */\n public getNumberOfXChildrenAtLevel(level: number): number {\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\n }\n\n /** @alpha */\n public getNumberOfYChildrenAtLevel(level: number): number {\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\n }\n\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\n public tileXToFraction(x: number, level: number): number {\n return x / this.getNumberOfXTilesAtLevel(level);\n }\n\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\n public tileYToFraction(y: number, level: number): number {\n return y / this.getNumberOfYTilesAtLevel(level);\n }\n\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\n public xFractionToTileX(xFraction: number, level: number): number {\n const nTiles = this.getNumberOfXTilesAtLevel(level);\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\n }\n\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\n public yFractionToTileY(yFraction: number, level: number): number {\n const nTiles = this.getNumberOfYTilesAtLevel(level);\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\n }\n\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\n public tileXToLongitude(x: number, level: number) {\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\n }\n\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\n public tileYToLatitude(y: number, level: number) {\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\n }\n\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\n if (undefined === result)\n result = Point2d.createZero();\n\n result.x = this.tileXToFraction(x, level);\n result.y = this.tileYToFraction(y, level);\n\n return result;\n }\n\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\n * @param x The X component of the QuadId.\n * @param y The Y component of the QuadId.\n * @param level The level component of the QuadId.\n * @param height The elevation above the ellipsoid.\n * @returns the corresponding cartographic position.\n */\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\n return this.fractionToCartographic(pt.x, pt.y, result, height);\n }\n\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\n if (level < 0)\n return MapCartoRectangle.createMaximum();\n\n return MapCartoRectangle.fromRadians(\n this.tileXToLongitude(x, level),\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\n this.tileXToLongitude(x + 1, level),\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\n result,\n );\n }\n\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\n public tileBordersNorthPole(row: number, level: number) {\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\n }\n\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\n public tileBordersSouthPole(row: number, level: number) {\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\n }\n\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\n * X and Y axes.\n */\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\n\n }\n\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\n result.longitude = this.xFractionToLongitude(xFraction);\n result.latitude = this.yFractionToLatitude(yFraction);\n result.height = height;\n return result;\n }\n\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\n result.x = this.longitudeToXFraction(longitudeRadians);\n result.y = this.latitudeToYFraction(latitudeRadians);\n return result;\n }\n\n /** @alpha */\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d | undefined {\n const cartoGraphic = Cartographic.fromEcef(point);\n if (!cartoGraphic)\n return undefined;\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\n }\n\n /** @alpha */\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\n const dbToEcef = expectDefined(ecefToDb.inverse());\n\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\n\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\n\n if (!mercatorOrigin || !mercatorX || !mercatorY)\n return Transform.createIdentity();\n\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\n\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\n const mercatorToDb = dbToMercator.inverse();\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\n }\n\n /** @alpha */\n protected yFractionFlip(fraction: number) {\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\n }\n}\n\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\n * @beta\n */\nexport class GeographicTilingScheme extends MapTilingScheme {\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\n }\n\n /** Implements [[MapTilingScheme.yFractionToLatitude]]. */\n public yFractionToLatitude(yFraction: number): number {\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\n }\n\n /** Implements [[MapTilingScheme.latitudeToYFraction]]. */\n public latitudeToYFraction(latitude: number): number {\n return this.yFractionFlip(.5 + latitude / Math.PI);\n }\n}\n\n/** @alpha */\nexport class WebMercatorProjection {\n /**\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\n * in the range -PI/2 to PI/2.\n *\n * @param {Number} mercatorAngle The angle to convert.\n * @returns {Number} The geodetic latitude in radians.\n */\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\n }\n\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\n\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\n // Clamp the latitude coordinate to the valid Mercator bounds.\n if (latitude > WebMercatorProjection.maximumLatitude)\n latitude = WebMercatorProjection.maximumLatitude;\n else if (latitude < -WebMercatorProjection.maximumLatitude)\n latitude = -WebMercatorProjection.maximumLatitude;\n\n const sinLatitude = Math.sin(latitude);\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n }\n}\n\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\n * @beta\n */\nexport class WebMercatorTilingScheme extends MapTilingScheme {\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\n }\n\n /** Implements [[MapTilingScheme.yFractionToLatitude]]. */\n public yFractionToLatitude(yFraction: number): number {\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\n }\n\n /** Implements [[MapTilingScheme.latitudeToYFraction. */\n public latitudeToYFraction(latitude: number): number {\n // Clamp the latitude coordinate to the valid Mercator bounds.\n if (latitude > WebMercatorProjection.maximumLatitude) {\n latitude = WebMercatorProjection.maximumLatitude;\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\n latitude = -WebMercatorProjection.maximumLatitude;\n }\n const sinLatitude = Math.sin(latitude);\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\n }\n}\n"]}
|