@itwin/core-frontend 4.0.0-dev.4 → 4.0.0-dev.41
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/CHANGELOG.md +67 -37
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.js +3 -3
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +9 -11
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.js +8 -12
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.js +4 -6
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +2 -0
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +2 -3
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FlashSettings.js +3 -4
- package/lib/cjs/FlashSettings.js.map +1 -1
- package/lib/cjs/GeoServices.d.ts +57 -5
- package/lib/cjs/GeoServices.d.ts.map +1 -1
- package/lib/cjs/GeoServices.js +180 -155
- package/lib/cjs/GeoServices.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +1 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +20 -24
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +1 -1
- package/lib/cjs/IModelConnection.js +2 -2
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +3 -4
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/ModelState.js +2 -3
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +1 -1
- package/lib/cjs/NativeApp.js +4 -7
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts +11 -4
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +14 -8
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +1 -1
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts +0 -1
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +0 -1
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.js +15 -23
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/Tiles.js +2 -2
- package/lib/cjs/Tiles.js.map +1 -1
- package/lib/cjs/ViewContext.js +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +4 -5
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +5 -5
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewRect.d.ts +1 -1
- package/lib/cjs/ViewRect.d.ts.map +1 -1
- package/lib/cjs/ViewRect.js +1 -1
- package/lib/cjs/ViewRect.js.map +1 -1
- package/lib/cjs/ViewState.js +17 -24
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.js +23 -33
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionImpl.js +1 -1
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/FeatureSymbology.js +1 -2
- package/lib/cjs/render/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.js +7 -9
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/MockRender.js +1 -2
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
- package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.d.ts +2 -2
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +8 -11
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderPlan.js +1 -1
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.js +1 -2
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.js +2 -4
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
- package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +6 -7
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.js +2 -3
- package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.js +1 -1
- package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +1 -1
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +9 -10
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.js +17 -21
- package/lib/cjs/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +3 -5
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +7 -10
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/MeshData.js +1 -2
- package/lib/cjs/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +5 -8
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +7 -8
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -11
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +0 -1
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +12 -17
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +9 -14
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
- package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +1 -2
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
- package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
- package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/request/Request.d.ts.map +1 -1
- package/lib/cjs/request/Request.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +3 -3
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/GltfReader.js +62 -76
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +2 -3
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
- package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/IModelTileTree.js +5 -9
- package/lib/cjs/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +13 -17
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.js +4 -5
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +22 -32
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +12 -19
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +1 -1
- package/lib/cjs/tile/RealityTile.js +4 -6
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +2 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +2 -3
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/Tile.js +1 -1
- package/lib/cjs/tile/Tile.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts +5 -1
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +22 -27
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +3 -6
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequest.js +2 -1
- package/lib/cjs/tile/TileRequest.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.d.ts +23 -1
- package/lib/cjs/tile/TileRequestChannel.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.js +28 -7
- package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannels.js +1 -1
- package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/TileTree.js +2 -3
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.js +17 -5
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.js +2 -2
- package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +10 -2
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +34 -12
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +3 -2
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +24 -26
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.d.ts +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tile/map/QuadId.d.ts +1 -1
- package/lib/cjs/tile/map/QuadId.js +1 -1
- package/lib/cjs/tile/map/QuadId.js.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +9 -4
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js +6 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/cjs/tile/map/TerrainProvider.d.ts +2 -2
- package/lib/cjs/tile/map/TerrainProvider.js +1 -1
- package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +1 -1
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -4
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/PrimitiveTool.js +2 -3
- package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.js +1 -2
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.js +2 -3
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +2 -4
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +3 -3
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.js +3 -3
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.js +9 -11
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.js +8 -12
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.js +4 -6
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +2 -0
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +2 -3
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FlashSettings.js +3 -4
- package/lib/esm/FlashSettings.js.map +1 -1
- package/lib/esm/GeoServices.d.ts +57 -5
- package/lib/esm/GeoServices.d.ts.map +1 -1
- package/lib/esm/GeoServices.js +178 -154
- package/lib/esm/GeoServices.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +1 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +20 -24
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +1 -1
- package/lib/esm/IModelConnection.js +2 -2
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.js +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +3 -4
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/ModelState.js +2 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +1 -1
- package/lib/esm/NativeApp.js +4 -7
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts +11 -4
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +12 -6
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +1 -1
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts +0 -1
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +0 -1
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.js +15 -23
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/Tiles.js +2 -2
- package/lib/esm/Tiles.js.map +1 -1
- package/lib/esm/ViewContext.js +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +4 -5
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +5 -5
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewRect.d.ts +1 -1
- package/lib/esm/ViewRect.d.ts.map +1 -1
- package/lib/esm/ViewRect.js +1 -1
- package/lib/esm/ViewRect.js.map +1 -1
- package/lib/esm/ViewState.js +17 -24
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.js +23 -33
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionImpl.js +1 -1
- package/lib/esm/extension/ExtensionImpl.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/FeatureSymbology.js +1 -2
- package/lib/esm/render/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.js +7 -9
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/MockRender.js +1 -2
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
- package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.d.ts +2 -2
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +8 -11
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderPlan.js +1 -1
- package/lib/esm/render/RenderPlan.js.map +1 -1
- package/lib/esm/render/RenderSystem.js +1 -2
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/VisibleFeature.js +2 -4
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
- package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +6 -7
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.js +2 -3
- package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexKey.js +1 -1
- package/lib/esm/render/primitives/VertexKey.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +1 -1
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +9 -10
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/EDL.js +17 -21
- package/lib/esm/render/webgl/EDL.js.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +3 -5
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +7 -10
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/MeshData.js +1 -2
- package/lib/esm/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +5 -8
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +7 -8
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +7 -9
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -11
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +0 -1
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +12 -17
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +9 -14
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/TargetGraphics.js +1 -2
- package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/esm/render/webgl/Texture.js +1 -2
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/render/webgl/ThematicSensors.js +2 -4
- package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +6 -9
- package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
- package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +1 -2
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/request/Request.d.ts.map +1 -1
- package/lib/esm/request/Request.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +3 -3
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/GltfReader.js +62 -76
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +2 -3
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
- package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/esm/tile/IModelTileTree.js +5 -9
- package/lib/esm/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +13 -17
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +2 -2
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PntsReader.js +4 -5
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +22 -32
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +12 -19
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +1 -1
- package/lib/esm/tile/RealityTile.js +4 -6
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +2 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +2 -3
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/Tile.js +1 -1
- package/lib/esm/tile/Tile.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts +5 -1
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +22 -27
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +3 -6
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileRequest.d.ts.map +1 -1
- package/lib/esm/tile/TileRequest.js +2 -1
- package/lib/esm/tile/TileRequest.js.map +1 -1
- package/lib/esm/tile/TileRequestChannel.d.ts +23 -1
- package/lib/esm/tile/TileRequestChannel.d.ts.map +1 -1
- package/lib/esm/tile/TileRequestChannel.js +28 -7
- package/lib/esm/tile/TileRequestChannel.js.map +1 -1
- package/lib/esm/tile/TileRequestChannels.js +1 -1
- package/lib/esm/tile/TileRequestChannels.js.map +1 -1
- package/lib/esm/tile/TileTree.js +2 -3
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
- package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/EllipsoidTerrainProvider.js +17 -5
- package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +10 -5
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.js +2 -2
- package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +1 -1
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +10 -2
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +34 -12
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +1 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +3 -2
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +24 -26
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tile/map/QuadId.d.ts +1 -1
- package/lib/esm/tile/map/QuadId.js +1 -1
- package/lib/esm/tile/map/QuadId.js.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts +9 -4
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js +6 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/esm/tile/map/TerrainProvider.d.ts +2 -2
- package/lib/esm/tile/map/TerrainProvider.js +1 -1
- package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +4 -5
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +1 -1
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -4
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/PrimitiveTool.js +2 -3
- package/lib/esm/tools/PrimitiveTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.js +1 -2
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -3
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +2 -4
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +3 -3
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +24 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapCartoRectangle } from \"../internal\";\r\n\r\n/** A scheme for converting between two representations of the surface of the Earth: an ellipsoid and a rectangular [tiled map](https://en.wikipedia.org/wiki/Tiled_web_map).\r\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\r\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\r\n *\r\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\r\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\r\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\r\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\r\n * @beta\r\n */\r\nexport abstract class MapTilingScheme {\r\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\r\n * 0 corresponds to the south pole and 1 to the north.\r\n */\r\n public readonly rowZeroAtNorthPole: boolean;\r\n /** The number of tiles in the X direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesX;\r\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesY;\r\n private readonly _scratchFraction = Point2d.createZero();\r\n private readonly _scratchPoint2d = Point2d.createZero();\r\n\r\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\r\n public longitudeToXFraction(longitude: number) {\r\n return longitude / Angle.pi2Radians + .5;\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\r\n public xFractionToLongitude(xFraction: number) {\r\n return Angle.pi2Radians * (xFraction - .5);\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\r\n public abstract yFractionToLatitude(yFraction: number): number;\r\n\r\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\r\n public abstract latitudeToYFraction(latitude: number): number;\r\n\r\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\r\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\r\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\r\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\r\n }\r\n\r\n /** The total number of tiles in the X direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfXTilesAtLevel(level: number) {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\r\n }\r\n\r\n /** The total number of tiles in the Y direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfYTilesAtLevel(level: number): number {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\r\n }\r\n\r\n /** @alpha */\r\n public get rootLevel() {\r\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfXChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfYChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\r\n public tileXToFraction(x: number, level: number): number {\r\n return x / this.getNumberOfXTilesAtLevel(level);\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\r\n public tileYToFraction(y: number, level: number): number {\r\n return y / this.getNumberOfYTilesAtLevel(level);\r\n }\r\n\r\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\r\n public xFractionToTileX(xFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfXTilesAtLevel(level);\r\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\r\n public yFractionToTileY(yFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfYTilesAtLevel(level);\r\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\r\n public tileXToLongitude(x: number, level: number) {\r\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\r\n public tileYToLatitude(y: number, level: number) {\r\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\r\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\r\n if (undefined === result)\r\n result = Point2d.createZero();\r\n\r\n result.x = this.tileXToFraction(x, level);\r\n result.y = this.tileYToFraction(y, level);\r\n\r\n return result;\r\n }\r\n\r\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\r\n * @param x The X component of the QuadId.\r\n * @param y The Y component of the QuadId.\r\n * @param level The level component of the QuadId.\r\n * @param height The elevation above the ellipsoid.\r\n * @returns the corresponding cartographic position.\r\n */\r\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\r\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\r\n return this.fractionToCartographic(pt.x, pt.y, result, height);\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\r\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\r\n if (level < 0)\r\n return MapCartoRectangle.createMaximum();\r\n\r\n return MapCartoRectangle.fromRadians(\r\n this.tileXToLongitude(x, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\r\n this.tileXToLongitude(x + 1, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\r\n result\r\n );\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\r\n public tileBordersNorthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\r\n public tileBordersSouthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\r\n }\r\n\r\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\r\n * X and Y axes.\r\n */\r\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\r\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\r\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\r\n\r\n }\r\n\r\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\r\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\r\n result.longitude = this.xFractionToLongitude(xFraction);\r\n result.latitude = this.yFractionToLatitude(yFraction);\r\n result.height = height;\r\n return result;\r\n }\r\n\r\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\r\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\r\n result.x = this.longitudeToXFraction(longitudeRadians);\r\n result.y = this.latitudeToYFraction(latitudeRadians);\r\n return result;\r\n }\r\n\r\n /** @alpha */\r\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d {\r\n const cartoGraphic = Cartographic.fromEcef(point)!;\r\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\r\n }\r\n\r\n /** @alpha */\r\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\r\n const dbToEcef = ecefToDb.inverse()!;\r\n\r\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\r\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\r\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\r\n\r\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\r\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\r\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\r\n\r\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\r\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\r\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\r\n\r\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\r\n const mercatorToDb = dbToMercator.inverse();\r\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\r\n }\r\n\r\n /** @alpha */\r\n protected yFractionFlip(fraction: number) {\r\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\r\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\r\n * @beta\r\n */\r\nexport class GeographicTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n return this.yFractionFlip(.5 + latitude / Math.PI);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class WebMercatorProjection {\r\n /**\r\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\r\n * in the range -PI/2 to PI/2.\r\n *\r\n * @param {Number} mercatorAngle The angle to convert.\r\n * @returns {Number} The geodetic latitude in radians.\r\n */\r\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\r\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\r\n }\r\n\r\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\r\n\r\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude)\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n else if (latitude < -WebMercatorProjection.maximumLatitude)\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n\r\n const sinLatitude = Math.sin(latitude);\r\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\r\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\r\n * @beta\r\n */\r\nexport class WebMercatorTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\r\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude) {\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n }\r\n const sinLatitude = Math.sin(latitude);\r\n return (0.5 - Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude)) / (4.0 * Angle.piRadians)); // https://msdn.microsoft.com/en-us/library/bb259689.aspx\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTilingScheme.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapCartoRectangle } from \"../internal\";\r\n\r\n/** A scheme for converting between two representations of the surface of the Earth: an ellipsoid and a rectangular [tiled map](https://en.wikipedia.org/wiki/Tiled_web_map).\r\n * Positions on the surface of the ellipsoid are expressed in [Cartographic]($common) coordinates.\r\n * Rectangular [[MapTile]]s are projected onto this ellipsoid by the tiling scheme. Tile coordinates are represented by [[QuadId]]s.\r\n *\r\n * The tiling scheme represents the (x,y) coordinates of its tiles as fractions in [0,1] along the X and Y axes.\r\n * An X fraction of 0 corresponds to the easternmost longitude and an X fraction of 1 to the westernmost longitude.\r\n * The scheme can choose to correlate a Y fraction of 0 with either the north or south pole, as specified by [[rowZeroAtNorthPole]].\r\n * Implementing a tiling scheme only requires implementing the abstract method [[yFractionToLatitude]] and its inverse, [[latitudeToYFraction]].\r\n * @public\r\n */\r\nexport abstract class MapTilingScheme {\r\n /** If true, the fractional Y coordinate 0 corresponds to the north pole and 1 to the south pole; otherwise,\r\n * 0 corresponds to the south pole and 1 to the north.\r\n */\r\n public readonly rowZeroAtNorthPole: boolean;\r\n /** The number of tiles in the X direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesX;\r\n /** The number of tiles in the Y direction at level 0 of the quad tree. */\r\n public readonly numberOfLevelZeroTilesY;\r\n private readonly _scratchFraction = Point2d.createZero();\r\n private readonly _scratchPoint2d = Point2d.createZero();\r\n\r\n /** Convert a longitude in [-pi, pi] radisn to a fraction in [0, 1] along the X axis. */\r\n public longitudeToXFraction(longitude: number) {\r\n return longitude / Angle.pi2Radians + .5;\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the X axis into a longitude in [-pi, pi] radians. */\r\n public xFractionToLongitude(xFraction: number) {\r\n return Angle.pi2Radians * (xFraction - .5);\r\n }\r\n\r\n /** Convert a fraction in [0, 1] along the Y axis into a latitude in [-pi/2, pi/2] radians. */\r\n public abstract yFractionToLatitude(yFraction: number): number;\r\n\r\n /** Convert a latitude in [-pi/2, pi/2] radians into a fraction in [0, 1] along the Y axis. */\r\n public abstract latitudeToYFraction(latitude: number): number;\r\n\r\n protected constructor(numberOfLevelZeroTilesX: number, numberOfLevelZeroTilesY: number, rowZeroAtNorthPole: boolean) {\r\n this.rowZeroAtNorthPole = rowZeroAtNorthPole;\r\n this.numberOfLevelZeroTilesX = numberOfLevelZeroTilesX;\r\n this.numberOfLevelZeroTilesY = numberOfLevelZeroTilesY;\r\n }\r\n\r\n /** The total number of tiles in the X direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfXTilesAtLevel(level: number) {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesX << level;\r\n }\r\n\r\n /** The total number of tiles in the Y direction at the specified level of detail.\r\n * @param level The level of detail, with 0 corresponding to the root tile.\r\n */\r\n public getNumberOfYTilesAtLevel(level: number): number {\r\n return level < 0 ? 1 : this.numberOfLevelZeroTilesY << level;\r\n }\r\n\r\n /** @alpha */\r\n public get rootLevel() {\r\n return this.numberOfLevelZeroTilesX > 1 || this.numberOfLevelZeroTilesY > 1 ? -1 : 0;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfXChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesX : 2;\r\n }\r\n\r\n /** @alpha */\r\n public getNumberOfYChildrenAtLevel(level: number): number {\r\n return level === 0 ? this.numberOfLevelZeroTilesY : 2;\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], convert it to a fractional distance along the X axis. */\r\n public tileXToFraction(x: number, level: number): number {\r\n return x / this.getNumberOfXTilesAtLevel(level);\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], convert it to a fractional distance along the Y axis. */\r\n public tileYToFraction(y: number, level: number): number {\r\n return y / this.getNumberOfYTilesAtLevel(level);\r\n }\r\n\r\n /** Given a fractional distance along the X axis and a level of the quad tree, compute the X component of the corresponding [[QuadId]]. */\r\n public xFractionToTileX(xFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfXTilesAtLevel(level);\r\n return Math.min(Math.floor(xFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given a fractional distance along the Y axis and a level of the quad tree, compute the Y component of the corresponding [[QuadId]]. */\r\n public yFractionToTileY(yFraction: number, level: number): number {\r\n const nTiles = this.getNumberOfYTilesAtLevel(level);\r\n return Math.min(Math.floor(yFraction * nTiles), nTiles - 1);\r\n }\r\n\r\n /** Given the X component and level of a [[QuadId]], compute its longitude in [-pi, pi] radians. */\r\n public tileXToLongitude(x: number, level: number) {\r\n return this.xFractionToLongitude(this.tileXToFraction(x, level));\r\n }\r\n\r\n /** Given the Y component and level of a [[QuadId]], compute its latitude in [-pi/2, pi/2] radians. */\r\n public tileYToLatitude(y: number, level: number) {\r\n return this.yFractionToLatitude(this.tileYToFraction(y, level));\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute its fractional coordinates in the XY plane. */\r\n public tileXYToFraction(x: number, y: number, level: number, result?: Point2d): Point2d {\r\n if (undefined === result)\r\n result = Point2d.createZero();\r\n\r\n result.x = this.tileXToFraction(x, level);\r\n result.y = this.tileYToFraction(y, level);\r\n\r\n return result;\r\n }\r\n\r\n /** Given the components of a [[QuadId]] and an elevation, compute the corresponding [Cartographic]($common) position.\r\n * @param x The X component of the QuadId.\r\n * @param y The Y component of the QuadId.\r\n * @param level The level component of the QuadId.\r\n * @param height The elevation above the ellipsoid.\r\n * @returns the corresponding cartographic position.\r\n */\r\n public tileXYToCartographic(x: number, y: number, level: number, result: Cartographic, height = 0): Cartographic {\r\n const pt = this.tileXYToFraction(x, y, level, this._scratchFraction);\r\n return this.fractionToCartographic(pt.x, pt.y, result, height);\r\n }\r\n\r\n /** Given the components of a [[QuadId]], compute the corresponding region of the Earth's surface. */\r\n public tileXYToRectangle(x: number, y: number, level: number, result?: MapCartoRectangle) {\r\n if (level < 0)\r\n return MapCartoRectangle.createMaximum();\r\n\r\n return MapCartoRectangle.fromRadians(\r\n this.tileXToLongitude(x, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? (y + 1) : y, level),\r\n this.tileXToLongitude(x + 1, level),\r\n this.tileYToLatitude(this.rowZeroAtNorthPole ? y : (y + 1), level),\r\n result\r\n );\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the north pole. */\r\n public tileBordersNorthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row, level) === 0.0 : this.tileYToFraction(row + 1, level) === 1.0;\r\n }\r\n\r\n /** Returns true if the tile at the specified X coordinate and level is adjacent to the south pole. */\r\n public tileBordersSouthPole(row: number, level: number) {\r\n return this.rowZeroAtNorthPole ? this.tileYToFraction(row + 1, level) === 1.0 : this.tileYToFraction(row, level) === 0.0;\r\n }\r\n\r\n /** Given a cartographic position, compute the corresponding position on the surface of the Earth as fractional distances along the\r\n * X and Y axes.\r\n */\r\n public cartographicToTileXY(carto: Cartographic, level: number, result?: Point2d): Point2d {\r\n const fraction = this.cartographicToFraction(carto.latitude, carto.longitude, this._scratchPoint2d);\r\n return Point2d.create(this.xFractionToTileX(fraction.x, level), this.yFractionToTileY(fraction.y, level), result);\r\n\r\n }\r\n\r\n /** Given fractional coordinates in the XY plane and an elevation, compute the corresponding cartographic position. */\r\n public fractionToCartographic(xFraction: number, yFraction: number, result: Cartographic, height = 0): Cartographic {\r\n result.longitude = this.xFractionToLongitude(xFraction);\r\n result.latitude = this.yFractionToLatitude(yFraction);\r\n result.height = height;\r\n return result;\r\n }\r\n\r\n /** Given a cartographic location on the surface of the Earth, convert it to fractional coordinates in the XY plane. */\r\n public cartographicToFraction(latitudeRadians: number, longitudeRadians: number, result: Point2d): Point2d {\r\n result.x = this.longitudeToXFraction(longitudeRadians);\r\n result.y = this.latitudeToYFraction(latitudeRadians);\r\n return result;\r\n }\r\n\r\n /** @alpha */\r\n private ecefToPixelFraction(point: Point3d, applyTerrain: boolean): Point3d {\r\n const cartoGraphic = Cartographic.fromEcef(point)!;\r\n return Point3d.create(this.longitudeToXFraction(cartoGraphic.longitude), this.latitudeToYFraction(cartoGraphic.latitude), applyTerrain ? cartoGraphic.height : 0);\r\n }\r\n\r\n /** @alpha */\r\n public computeMercatorFractionToDb(ecefToDb: Transform, bimElevationOffset: number, iModel: IModelConnection, applyTerrain: boolean) {\r\n const dbToEcef = ecefToDb.inverse()!;\r\n\r\n const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);\r\n const projectEast = projectCenter.plusXYZ(1, 0, 0);\r\n const projectNorth = projectCenter.plusXYZ(0, 1, 0);\r\n\r\n const mercatorOrigin = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectCenter), applyTerrain);\r\n const mercatorX = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectEast), applyTerrain);\r\n const mercatorY = this.ecefToPixelFraction(dbToEcef.multiplyPoint3d(projectNorth), applyTerrain);\r\n\r\n const deltaX = Vector3d.createStartEnd(mercatorOrigin, mercatorX);\r\n const deltaY = Vector3d.createStartEnd(mercatorOrigin, mercatorY);\r\n const matrix = Matrix3d.createColumns(deltaX, deltaY, Vector3d.create(0, 0, 1));\r\n\r\n const dbToMercator = Transform.createMatrixPickupPutdown(matrix, projectCenter, mercatorOrigin);\r\n const mercatorToDb = dbToMercator.inverse();\r\n return mercatorToDb === undefined ? Transform.createIdentity() : mercatorToDb;\r\n }\r\n\r\n /** @alpha */\r\n protected yFractionFlip(fraction: number) {\r\n return this.rowZeroAtNorthPole ? (1.0 - fraction) : fraction;\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using a simple geographic projection by which longitude and latitude are mapped directly to X and Y.\r\n * This projection is commonly known as \"geographic\", \"equirectangular\", \"equidistant cylindrical\", or \"plate carrée\".\r\n * @beta\r\n */\r\nexport class GeographicTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 2, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = false) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n return Math.PI * (this.yFractionFlip(yFraction) - .5);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n return this.yFractionFlip(.5 + latitude / Math.PI);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class WebMercatorProjection {\r\n /**\r\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\r\n * in the range -PI/2 to PI/2.\r\n *\r\n * @param {Number} mercatorAngle The angle to convert.\r\n * @returns {Number} The geodetic latitude in radians.\r\n */\r\n public static mercatorAngleToGeodeticLatitude(mercatorAngle: number) {\r\n return Angle.piOver2Radians - (2.0 * Math.atan(Math.exp(-mercatorAngle)));\r\n }\r\n\r\n public static maximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(Angle.piRadians);\r\n\r\n public static geodeticLatitudeToMercatorAngle(latitude: number) {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude)\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n else if (latitude < -WebMercatorProjection.maximumLatitude)\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n\r\n const sinLatitude = Math.sin(latitude);\r\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\r\n }\r\n}\r\n\r\n/** A [[MapTilingScheme]] using the [EPSG:3857](https://en.wikipedia.org/wiki/Web_Mercator_projection) projection.\r\n * This scheme is used by most [tiled web maps](https://en.wikipedia.org/wiki/Tiled_web_map), including Bing Maps and Google Maps.\r\n * @beta\r\n */\r\nexport class WebMercatorTilingScheme extends MapTilingScheme {\r\n public constructor(numberOfLevelZeroTilesX = 1, numberOfLevelZeroTilesY = 1, rowZeroAtNorthPole = true) {\r\n super(numberOfLevelZeroTilesX, numberOfLevelZeroTilesY, rowZeroAtNorthPole);\r\n }\r\n\r\n /** @internal override */\r\n public yFractionToLatitude(yFraction: number): number {\r\n const mercatorAngle = Angle.pi2Radians * (this.rowZeroAtNorthPole ? (.5 - yFraction) : (yFraction - .5));\r\n return WebMercatorProjection.mercatorAngleToGeodeticLatitude(mercatorAngle);\r\n }\r\n\r\n /** @internal override */\r\n public latitudeToYFraction(latitude: number): number {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.maximumLatitude) {\r\n latitude = WebMercatorProjection.maximumLatitude;\r\n } else if (latitude < -WebMercatorProjection.maximumLatitude) {\r\n latitude = -WebMercatorProjection.maximumLatitude;\r\n }\r\n const sinLatitude = Math.sin(latitude);\r\n return (0.5 - Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude)) / (4.0 * Angle.piRadians)); // https://msdn.microsoft.com/en-us/library/bb259689.aspx\r\n }\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@ import { MapTilingScheme } from "../internal";
|
|
|
6
6
|
/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
|
|
7
7
|
* A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on
|
|
8
8
|
* level L+1.
|
|
9
|
-
* @
|
|
9
|
+
* @public
|
|
10
10
|
*/
|
|
11
11
|
export declare class QuadId {
|
|
12
12
|
/** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */
|
|
@@ -16,7 +16,7 @@ const scratchCartographic2 = core_common_1.Cartographic.createZero();
|
|
|
16
16
|
/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].
|
|
17
17
|
* A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on
|
|
18
18
|
* level L+1.
|
|
19
|
-
* @
|
|
19
|
+
* @public
|
|
20
20
|
*/
|
|
21
21
|
class QuadId {
|
|
22
22
|
/** Construct a new QuadId. The inputs are expected to be non-negative integers. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuadId.js","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareNumbers } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Range2d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { MapTilingScheme } from \"../internal\";\r\n\r\nconst scratchCartographic1 = Cartographic.createZero();\r\nconst scratchCartographic2 = Cartographic.createZero();\r\n\r\n/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].\r\n * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on\r\n * level L+1.\r\n * @
|
|
1
|
+
{"version":3,"file":"QuadId.js","sourceRoot":"","sources":["../../../../src/tile/map/QuadId.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6D;AAC7D,wDAAkE;AAClE,oDAAkD;AAGlD,MAAM,oBAAoB,GAAG,0BAAY,CAAC,UAAU,EAAE,CAAC;AACvD,MAAM,oBAAoB,GAAG,0BAAY,CAAC,UAAU,EAAE,CAAC;AAEvD;;;;GAIG;AACH,MAAa,MAAM;IAsCjB,mFAAmF;IACnF,YAAmB,KAAa,EAAE,MAAc,EAAE,GAAW;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAnCD,aAAa;IACb,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,aAAa;IACN,MAAM,CAAC,mBAAmB,CAAC,QAAgB;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAA,qBAAM,EAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM;YACtB,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,aAAa;IACb,IAAW,SAAS;QAClB,OAAQ,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,aAAa;IACN,MAAM,CAAC,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,GAAW;QACvE,OAAO,GAAG,KAAK,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,aAAa;IACb,IAAW,WAAW;QACpB,OAAO,UAAU,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;IACxE,CAAC;IASD,yEAAyE;IAClE,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC;QAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE;gBAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wHAAwH;IACjH,sBAAsB,CAAC,eAAgC;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,wHAAwH;IACjH,sBAAsB,CAAC,eAAgC;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAEO,gBAAgB,CAAC,eAAgC,EAAE,KAA4B;QACrF,MAAM,KAAK,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,qBAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC9F,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,GAAG,MAAM,EAAE,oBAAoB,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;QAChG,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACtG,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,GAAG,MAAM,EAAE,oBAAoB,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;QAEhG,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa;IACN,aAAa,CAAC,eAAgC;QACnD,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC9F,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACtG,OAAO;YACL,SAAS,EAAE,0BAAU,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC;YAC3G,QAAQ,EAAE,0BAAU,CAAC,qBAAqB,CACxC,0BAAY,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAClF,0BAAY,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CACnF;SACF,CAAC;IACJ,CAAC;IAED,wGAAwG;IACjG,gBAAgB,CAAC,eAAgC;QACtD,OAAO,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,wGAAwG;IACjG,gBAAgB,CAAC,eAAgC;QACtD,OAAO,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,oGAAoG;IAC7F,OAAO,CAAC,KAAa;QAC1B,OAAO,IAAA,6BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAC5C,IAAA,6BAAc,EAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;YACnC,IAAA,6BAAc,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;CACF;AA7GD,wBA6GC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareNumbers } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Range2d } from \"@itwin/core-geometry\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { MapTilingScheme } from \"../internal\";\r\n\r\nconst scratchCartographic1 = Cartographic.createZero();\r\nconst scratchCartographic2 = Cartographic.createZero();\r\n\r\n/** Identifies a node within a [quad tree](https://en.wikipedia.org/wiki/Quadtree), such as a [[MapTile]] within a [[MapTileTree]].\r\n * A quad tree recursively sub-divides a two-dimensional space along the X and Y axes such that each node on level L has four child nodes on\r\n * level L+1.\r\n * @public\r\n */\r\nexport class QuadId {\r\n /** The level of the node within the tree, increasing with each subdivision, as a non-negative integer. */\r\n public level: number;\r\n /** The node's position along the X axis as a non-negative integer. */\r\n public column: number;\r\n /** The node's position along the Y axis as a non-negative integer. */\r\n public row: number;\r\n\r\n /** @alpha */\r\n public get isValid() {\r\n return this.level >= 0;\r\n }\r\n\r\n /** @alpha */\r\n public static createFromContentId(stringId: string) {\r\n const idParts = stringId.split(\"_\");\r\n assert(idParts.length === 3);\r\n if (3 !== idParts.length)\r\n return new QuadId(-1, -1, -1);\r\n\r\n return new QuadId(parseInt(idParts[0], 10), parseInt(idParts[1], 10), parseInt(idParts[2], 10));\r\n }\r\n\r\n /** @alpha */\r\n public get contentId(): string {\r\n return QuadId.getTileContentId(this.level, this.column, this.row);\r\n }\r\n\r\n /** @alpha */\r\n public static getTileContentId(level: number, column: number, row: number): string {\r\n return `${level}_${column}_${row}`;\r\n }\r\n\r\n /** @alpha */\r\n public get debugString(): string {\r\n return `Level: ${this.level} Column: ${this.column} Row: ${this.row}`;\r\n }\r\n\r\n /** Construct a new QuadId. The inputs are expected to be non-negative integers. */\r\n public constructor(level: number, column: number, row: number) {\r\n this.level = level;\r\n this.column = column;\r\n this.row = row;\r\n }\r\n\r\n /** Compute the QuadIds corresponding to this node's four child nodes. */\r\n public getChildIds(columnCount = 2, rowCount = 2): QuadId[] {\r\n const childIds = [];\r\n const level = this.level + 1;\r\n const column = this.column * 2;\r\n const row = this.row * 2;\r\n for (let j = 0; j < rowCount; j++)\r\n for (let i = 0; i < columnCount; i++)\r\n childIds.push(new QuadId(level, column + i, row + j));\r\n\r\n return childIds;\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeDegrees(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"degrees\");\r\n }\r\n\r\n /** Compute the region of the surface of the Earth represented by this node according to the specified tiling scheme. */\r\n public getLatLongRangeRadians(mapTilingScheme: MapTilingScheme): Range2d {\r\n return this._getLatLongRange(mapTilingScheme, \"radians\");\r\n }\r\n\r\n private _getLatLongRange(mapTilingScheme: MapTilingScheme, units: \"radians\" | \"degrees\"): Range2d {\r\n const range = Range2d.createNull();\r\n const factor = \"degrees\" === units ? Angle.degreesPerRadian : 1;\r\n\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n range.extendXY(scratchCartographic1.longitude * factor, scratchCartographic1.latitude * factor);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n range.extendXY(scratchCartographic2.longitude * factor, scratchCartographic2.latitude * factor);\r\n\r\n return range;\r\n }\r\n\r\n /** @alpha */\r\n public getAngleSweep(mapTilingScheme: MapTilingScheme): { longitude: AngleSweep, latitude: AngleSweep } {\r\n mapTilingScheme.tileXYToCartographic(this.column, this.row, this.level, scratchCartographic1);\r\n mapTilingScheme.tileXYToCartographic(this.column + 1, this.row + 1, this.level, scratchCartographic2);\r\n return {\r\n longitude: AngleSweep.createStartEndRadians(scratchCartographic1.longitude, scratchCartographic2.longitude),\r\n latitude: AngleSweep.createStartEndRadians(\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic1.latitude),\r\n Cartographic.parametricLatitudeFromGeodeticLatitude(scratchCartographic2.latitude)\r\n ),\r\n };\r\n }\r\n\r\n /** Returns true if this node is adjacent to the south pole according to the specified tiling scheme. */\r\n public bordersSouthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersSouthPole(this.row, this.level);\r\n }\r\n\r\n /** Returns true if this node is adjacent to the north pole according to the specified tiling scheme. */\r\n public bordersNorthPole(mapTilingScheme: MapTilingScheme) {\r\n return mapTilingScheme.tileBordersNorthPole(this.row, this.level);\r\n }\r\n\r\n /** Compares this Id to another according to the conventions of an [OrderedComparator]($bentley). */\r\n public compare(other: QuadId): number {\r\n return compareNumbers(this.level, other.level) ||\r\n compareNumbers(this.row, other.row) ||\r\n compareNumbers(this.column, other.column);\r\n }\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@ import { ScreenViewport } from "../../Viewport";
|
|
|
6
6
|
import { RealityMeshParams } from "../../render/RealityMeshParams";
|
|
7
7
|
import { MapCartoRectangle, MapTile, MapTilingScheme, QuadId } from "../internal";
|
|
8
8
|
/** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].
|
|
9
|
-
* @
|
|
9
|
+
* @public
|
|
10
10
|
*/
|
|
11
11
|
export interface TerrainMeshProviderOptions {
|
|
12
12
|
/** A scale factor to be applied to the height of the terrain meshes.
|
|
@@ -29,7 +29,7 @@ export interface TerrainMeshProviderOptions {
|
|
|
29
29
|
wantNormals: boolean;
|
|
30
30
|
}
|
|
31
31
|
/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].
|
|
32
|
-
* @
|
|
32
|
+
* @public
|
|
33
33
|
*/
|
|
34
34
|
export interface RequestMeshDataArgs {
|
|
35
35
|
/** The tile for which the terrain mesh is being requested. */
|
|
@@ -38,7 +38,7 @@ export interface RequestMeshDataArgs {
|
|
|
38
38
|
isCanceled(): boolean;
|
|
39
39
|
}
|
|
40
40
|
/** Arguments supplied to [[TerrainMeshProvider.readMesh]].
|
|
41
|
-
* @
|
|
41
|
+
* @public
|
|
42
42
|
*/
|
|
43
43
|
export interface ReadMeshArgs {
|
|
44
44
|
/** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */
|
|
@@ -52,7 +52,12 @@ export interface ReadMeshArgs {
|
|
|
52
52
|
* Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].
|
|
53
53
|
* The display system drapes background map imagery onto these meshes.
|
|
54
54
|
* `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.
|
|
55
|
-
* @
|
|
55
|
+
* @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,
|
|
56
|
+
* it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].
|
|
57
|
+
* @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.
|
|
58
|
+
* @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example
|
|
59
|
+
* implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].
|
|
60
|
+
* @public
|
|
56
61
|
*/
|
|
57
62
|
export declare abstract class TerrainMeshProvider {
|
|
58
63
|
/** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,0JAA0J;IAC1J,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,GAAG,CAAC;IACV,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mJAAmJ;IACnJ,UAAU,IAAI,OAAO,CAAC;CACvB;AAED
|
|
1
|
+
{"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,0JAA0J;IAC1J,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,GAAG,CAAC;IACV,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mJAAmJ;IACnJ,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,8BAAsB,mBAAmB;IACvC;;OAEG;aACa,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAExE;;OAEG;aACa,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAEpF;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAExE;;;OAGG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD,iEAAiE;IACjE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAI9G,4GAA4G;IAC5G,aAAoB,YAAY,IAAI,eAAe,CAAC;IAEpD;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAC9C"}
|
|
@@ -13,7 +13,12 @@ const ApproximateTerrainHeights_1 = require("../../ApproximateTerrainHeights");
|
|
|
13
13
|
* Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].
|
|
14
14
|
* The display system drapes background map imagery onto these meshes.
|
|
15
15
|
* `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.
|
|
16
|
-
* @
|
|
16
|
+
* @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,
|
|
17
|
+
* it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].
|
|
18
|
+
* @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.
|
|
19
|
+
* @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example
|
|
20
|
+
* implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].
|
|
21
|
+
* @public
|
|
17
22
|
*/
|
|
18
23
|
class TerrainMeshProvider {
|
|
19
24
|
/** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;AAqD5E
|
|
1
|
+
{"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;AAqD5E;;;;;;;;;;GAUG;AACH,MAAsB,mBAAmB;IAWvC;;;OAGG;IACI,YAAY,CAAC,MAAwB,EAAE,GAAmB,IAAU,CAAC;IAE5E;;;OAGG;IACI,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD;;;OAGG;IACI,mBAAmB,CAAC,MAAc,EAAE,SAA4B,EAAE,MAAe;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,qDAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qDAAyB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3J,CAAC;IAKD;;;OAGG;IACI,aAAa,CAAC,KAAc,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;CAChE;AA5CD,kDA4CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { Range1d } from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport {\r\n MapCartoRectangle, MapTile, MapTilingScheme, QuadId,\r\n} from \"../internal\";\r\n\r\n/** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].\r\n * @public\r\n */\r\nexport interface TerrainMeshProviderOptions {\r\n /** A scale factor to be applied to the height of the terrain meshes.\r\n * @see [TerrainSettings.exaggeration]($common).\r\n */\r\n exaggeration: number;\r\n /** If true, the meshes should include \"skirts\" around their edges.\r\n * Skirts add new geometry to each of the four sides of a tile, extending downward. This helps to hide small cracks between adjacent tiles.\r\n * However, if transparency is applied to the terrain then, rather than hiding slight imperfections, the skirts themselves become visible.\r\n * So skirts are only requested when the terrain is displayed without transparency.\r\n *\r\n * A [[TerrainMeshProvider]] can ignore the request for skirts if it considers the risk of visible cracks acceptable.\r\n */\r\n wantSkirts: boolean;\r\n /** If true, each vertex of the terrain meshes should include a normal vector. Normals are requested when lighting or [ThematicDisplay]($common) are applied\r\n * to the terrain.\r\n *\r\n * A [[TerrainmeshProvider can ignore the request to produce normals, but doing so will prevent lighting and thematic display from applying to its terrain meshes.\r\n */\r\n wantNormals: boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].\r\n * @public\r\n */\r\nexport interface RequestMeshDataArgs {\r\n /** The tile for which the terrain mesh is being requested. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `requestMeshData` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.readMesh]].\r\n * @public\r\n */\r\nexport interface ReadMeshArgs {\r\n /** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */\r\n data: any;\r\n /** The tile for which the terrain mesh is being generated. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `readMesh` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Provides 3d meshes representing terrain for display in a [[Viewport]].\r\n * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].\r\n * The display system drapes background map imagery onto these meshes.\r\n * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.\r\n * @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,\r\n * it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].\r\n * @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.\r\n * @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example\r\n * implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].\r\n * @public\r\n */\r\nexport abstract class TerrainMeshProvider {\r\n /** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.\r\n * Return `undefined` if no mesh data could be obtained.\r\n */\r\n public abstract requestMeshData(args: RequestMeshDataArgs): Promise<any>;\r\n\r\n /** Convert the terrain data supplied by [[requestMeshData]] into a terrain mesh.\r\n * @see [[RealityMeshParamsBuilder]] to simplify the process of creating the mesh.\r\n */\r\n public abstract readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined>;\r\n\r\n /** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.\r\n * For example, a provider that produces meshes from [Bing Maps](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/) would be required to\r\n * disclose any copyrighted data used in the production of those meshes.\r\n */\r\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\r\n\r\n /** Return whether terrain data can be obtained for the [[MapTile]] specified by `quadId`. If it returns false, a terrain mesh will instead be produced for\r\n * that tile by up-sampling the terrain mesh provided by its parent tile.\r\n * The default implementation returns `true`.\r\n */\r\n public isTileAvailable(_quadId: QuadId): boolean {\r\n return true;\r\n }\r\n\r\n /** Returns the maximum level of detail of the terrain meshes. */\r\n public abstract get maxDepth(): number;\r\n\r\n /** Returns the minimum and maximum elevation of the terrain within the specified region of the Earth.\r\n * This range is used for culling terrain meshes that do not intersect the view frustum.\r\n * The default implementation uses a fast approximation.\r\n */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return (quadId.level < ApproximateTerrainHeights.maxLevel) ? ApproximateTerrainHeights.instance.getMinimumMaximumHeights(rectangle) : parent.heightRange;\r\n }\r\n\r\n /** The tiling scheme used by this provider to convert between tile coordinates and geodetic coordinates. */\r\n public abstract get tilingScheme(): MapTilingScheme;\r\n\r\n /** Returns true if the specified tile should always be loaded. Some tiles contain required metadata and hence should always be loaded.\r\n * For example, a parent tile might contain information about the availability or height ranges of its child tiles that can be used to\r\n * implement [[isTileAvailable]] or [[getChildHeightRange]], respectively.\r\n */\r\n public forceTileLoad(_tile: MapTile): boolean { return false; }\r\n}\r\n"]}
|
|
@@ -5,7 +5,7 @@ import { TerrainMeshProvider, TerrainMeshProviderOptions } from "../internal";
|
|
|
5
5
|
/** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].
|
|
6
6
|
* @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.
|
|
7
7
|
* @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).
|
|
8
|
-
* @
|
|
8
|
+
* @public
|
|
9
9
|
*/
|
|
10
10
|
export interface TerrainProvider {
|
|
11
11
|
/** Produce a [[TerrainMeshProvider]] using the specified options. */
|
|
@@ -16,7 +16,7 @@ export interface TerrainProvider {
|
|
|
16
16
|
* Any number of additional providers can be [[register]]ed.
|
|
17
17
|
*
|
|
18
18
|
* When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.
|
|
19
|
-
* @
|
|
19
|
+
* @public
|
|
20
20
|
*/
|
|
21
21
|
export declare class TerrainProviderRegistry {
|
|
22
22
|
private readonly _providers;
|
|
@@ -14,7 +14,7 @@ const internal_1 = require("../internal");
|
|
|
14
14
|
* Any number of additional providers can be [[register]]ed.
|
|
15
15
|
*
|
|
16
16
|
* When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.
|
|
17
|
-
* @
|
|
17
|
+
* @public
|
|
18
18
|
*/
|
|
19
19
|
class TerrainProviderRegistry {
|
|
20
20
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAAwG;AAYxG;;;;;;GAMG;AACH,MAAa,uBAAuB;IAGlC,gBAAgB;IAChB;QAHiB,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAI/D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YAClC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,mCAAwB,EAAC,OAAO,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,IAAY,EAAE,QAAyB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,gEAAgE;IACzD,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAvBD,0DAuBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { getCesiumTerrainProvider, TerrainMeshProvider, TerrainMeshProviderOptions } from \"../internal\";\r\n\r\n/** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].\r\n * @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.\r\n * @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).\r\n * @
|
|
1
|
+
{"version":3,"file":"TerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAAwG;AAYxG;;;;;;GAMG;AACH,MAAa,uBAAuB;IAGlC,gBAAgB;IAChB;QAHiB,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAI/D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YAClC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,mCAAwB,EAAC,OAAO,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,IAAY,EAAE,QAAyB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,gEAAgE;IACzD,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAvBD,0DAuBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { getCesiumTerrainProvider, TerrainMeshProvider, TerrainMeshProviderOptions } from \"../internal\";\r\n\r\n/** Interface adopted by an object that can supply [[TerrainMeshProvider]]s enabling the display of 3d terrain in a [[Viewport]].\r\n * @see [[TerrainProviderRegistry]] to register or look up a `TerrainProvider` by its name.\r\n * @see [TerrainSettings.providerName]($common) to specify the terrain provider used by a [DisplayStyle]($backend).\r\n * @public\r\n */\r\nexport interface TerrainProvider {\r\n /** Produce a [[TerrainMeshProvider]] using the specified options. */\r\n createTerrainMeshProvider(options: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined>;\r\n}\r\n\r\n/** A registry of [[TerrainProvider]]s identified by their unique names. The registry can be accessed via [[IModelApp.terrainProviderRegistry]].\r\n * It always includes the built-in provider named \"CesiumWorldTerrain\", which obtains terrain meshes from [Cesium ION](https://cesium.com/platform/cesium-ion/content/cesium-world-terrain/). That provider requires a valid [[TileAdmin.Props.cesiumIonKey]] to be supplied to [[IModelApp.startup]].\r\n * Any number of additional providers can be [[register]]ed.\r\n *\r\n * When terrain is enabled for a [[Viewport]], the display system will attempt to look up the [[TerrainProvider]] corresponding to the [TerrainSettings.providerName]($common) specified by the [[Viewport]]'s [DisplayStyleSettings]($common). If a provider by that name is registered, it will be used to obtain terrain meshes; otherwise, the display system will produce flat terrain meshes.\r\n * @public\r\n */\r\nexport class TerrainProviderRegistry {\r\n private readonly _providers = new Map<string, TerrainProvider>();\r\n\r\n /** @internal */\r\n public constructor() {\r\n this.register(\"CesiumWorldTerrain\", {\r\n createTerrainMeshProvider: async (options) => getCesiumTerrainProvider(options),\r\n });\r\n }\r\n\r\n /** Register a new [[TerrainProvider]].\r\n * @param name The name of the provider. It must be unique among all providers.\r\n * @param provider The provider to register.\r\n * @see [[find]] to later retrieve the provider by name.\r\n */\r\n public register(name: string, provider: TerrainProvider): void {\r\n this._providers.set(name, provider);\r\n }\r\n\r\n /** Look up a [[register]]ed [[TerrainProvider]] by its name. */\r\n public find(name: string): TerrainProvider | undefined {\r\n return this._providers.get(name);\r\n }\r\n}\r\n"]}
|
|
@@ -78,7 +78,6 @@ var WmsCapability;
|
|
|
78
78
|
this.subLayers.push(new SubLayer(json, capabilities));
|
|
79
79
|
}
|
|
80
80
|
getSubLayers(visible = true) {
|
|
81
|
-
var _a;
|
|
82
81
|
const subLayers = new Array();
|
|
83
82
|
let index = 1;
|
|
84
83
|
let childrenFound = false;
|
|
@@ -110,7 +109,7 @@ var WmsCapability;
|
|
|
110
109
|
});
|
|
111
110
|
if (prefixed.size > 1) {
|
|
112
111
|
// Preserve the root node if any.
|
|
113
|
-
const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ?
|
|
112
|
+
const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;
|
|
114
113
|
prefixed.forEach((children, parent) => {
|
|
115
114
|
children.forEach((child) => {
|
|
116
115
|
child.parent = index;
|
|
@@ -184,9 +183,9 @@ class WmsCapabilities {
|
|
|
184
183
|
}
|
|
185
184
|
get json() { return this._json; }
|
|
186
185
|
get maxLevel() { return this.layer ? this.layer.subLayers.length : -1; }
|
|
187
|
-
get cartoRange() {
|
|
188
|
-
get featureInfoSupported() {
|
|
189
|
-
get featureInfoFormats() {
|
|
186
|
+
get cartoRange() { return this.layer?.cartoRange; }
|
|
187
|
+
get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }
|
|
188
|
+
get featureInfoFormats() { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }
|
|
190
189
|
static async create(url, credentials, ignoreCache) {
|
|
191
190
|
if (!ignoreCache) {
|
|
192
191
|
const cached = WmsCapabilities._capabilitiesCache.get(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.fromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(json: any, capabilities: WmsCapabilities) {\r\n this.queryable = json.queryable;\r\n this.title = json.title;\r\n this.srs = initArray<string>(capabilities.isVersion13 ? json.CRS : json.SRS);\r\n this.cartoRange = rangeFromJSON(json);\r\n this.subLayers.push(new SubLayer(json, capabilities));\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, capabilities: WmsCapabilities, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, capabilities, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly isVersion13: boolean;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf(\"1.3\");\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n if (!credentials) {\r\n // Avoid caching protected data\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n }\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.fromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(json: any, capabilities: WmsCapabilities) {\r\n this.queryable = json.queryable;\r\n this.title = json.title;\r\n this.srs = initArray<string>(capabilities.isVersion13 ? json.CRS : json.SRS);\r\n this.cartoRange = rangeFromJSON(json);\r\n this.subLayers.push(new SubLayer(json, capabilities));\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, capabilities: WmsCapabilities, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, capabilities, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly isVersion13: boolean;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf(\"1.3\");\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n if (!credentials) {\r\n // Avoid caching protected data\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n }\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
|
|
@@ -87,10 +87,9 @@ async function getXml(url, credentials) {
|
|
|
87
87
|
* @internal
|
|
88
88
|
*/
|
|
89
89
|
const getElementTextContent = (elem, qualifiedName, defaultText) => {
|
|
90
|
-
var _a;
|
|
91
90
|
const tmpElem = elem.getElementsByTagName(qualifiedName);
|
|
92
91
|
if (tmpElem.length > 0) {
|
|
93
|
-
return
|
|
92
|
+
return tmpElem[0].textContent ?? defaultText;
|
|
94
93
|
}
|
|
95
94
|
else
|
|
96
95
|
return defaultText;
|
|
@@ -151,14 +150,13 @@ var WmtsCapability;
|
|
|
151
150
|
WmtsCapability.OperationMetadata = OperationMetadata;
|
|
152
151
|
class HttpDcp {
|
|
153
152
|
constructor(elem) {
|
|
154
|
-
var _a, _b;
|
|
155
153
|
const url = elem.getAttribute(XmlConstants.XLINK_HREF);
|
|
156
154
|
if (url)
|
|
157
|
-
this.url = url
|
|
155
|
+
this.url = url ?? "";
|
|
158
156
|
const constraint = elem.getElementsByTagName(OwsConstants.CONSTRAINT_XMLTAG);
|
|
159
157
|
if (constraint.length > 0) {
|
|
160
|
-
this.constraintName =
|
|
161
|
-
if (
|
|
158
|
+
this.constraintName = constraint[0].getAttribute("name") ?? "";
|
|
159
|
+
if (this.constraintName?.endsWith(XmlConstants.CONSTRAINT_NAME_FILTER)) {
|
|
162
160
|
const allowedValues = constraint[0].getElementsByTagName(OwsConstants.ALLOWEDVALUES_XMLTAG);
|
|
163
161
|
if (allowedValues.length > 0) {
|
|
164
162
|
this.encoding = getElementTextContent(allowedValues[0], OwsConstants.VALUE_XMLTAG);
|
|
@@ -170,7 +168,6 @@ var WmtsCapability;
|
|
|
170
168
|
WmtsCapability.HttpDcp = HttpDcp;
|
|
171
169
|
class Operation {
|
|
172
170
|
constructor(elem) {
|
|
173
|
-
var _a, _b;
|
|
174
171
|
const name = elem.getAttribute("name");
|
|
175
172
|
if (name)
|
|
176
173
|
this.name = name;
|
|
@@ -184,14 +181,14 @@ var WmtsCapability;
|
|
|
184
181
|
if (get.length > 0) {
|
|
185
182
|
this._getDcpHttp = [];
|
|
186
183
|
for (const getItem of get) {
|
|
187
|
-
|
|
184
|
+
this._getDcpHttp?.push(new HttpDcp(getItem));
|
|
188
185
|
}
|
|
189
186
|
}
|
|
190
187
|
const post = dcpHttp[0].getElementsByTagName(OwsConstants.POST_XMLTAG);
|
|
191
188
|
if (post.length > 0) {
|
|
192
189
|
this._postDcpHttp = [];
|
|
193
190
|
for (const postItem of post) {
|
|
194
|
-
|
|
191
|
+
this._postDcpHttp?.push(new HttpDcp(postItem));
|
|
195
192
|
}
|
|
196
193
|
}
|
|
197
194
|
}
|
|
@@ -219,8 +216,7 @@ var WmtsCapability;
|
|
|
219
216
|
getGoogleMapsCompatibleTileMatrixSet() {
|
|
220
217
|
const googleMapsTms = [];
|
|
221
218
|
this.tileMatrixSets.forEach((tms) => {
|
|
222
|
-
|
|
223
|
-
if ((_a = tms.wellKnownScaleSet) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(WmtsConstants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))
|
|
219
|
+
if (tms.wellKnownScaleSet?.toLowerCase().includes(WmtsConstants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))
|
|
224
220
|
googleMapsTms.push(tms);
|
|
225
221
|
// In case wellKnownScaleSet was not been set properly, infer from scaleDenominator
|
|
226
222
|
// Note: some servers are quite inaccurate in their scale values, hence I used a delta value of 1.
|
|
@@ -252,13 +248,12 @@ var WmtsCapability;
|
|
|
252
248
|
WmtsCapability.Style = Style;
|
|
253
249
|
class BoundingBox {
|
|
254
250
|
constructor(elem) {
|
|
255
|
-
|
|
256
|
-
this.crs = (_a = elem.getAttribute("crs")) !== null && _a !== void 0 ? _a : undefined;
|
|
251
|
+
this.crs = elem.getAttribute("crs") ?? undefined;
|
|
257
252
|
const lowerCorner = getElementTextContent(elem, OwsConstants.LOWERCORNER_XMLTAG);
|
|
258
253
|
const upperCorner = getElementTextContent(elem, OwsConstants.UPPERCORNER_XMLTAG);
|
|
259
254
|
if (lowerCorner && upperCorner) {
|
|
260
|
-
const lowerCornerArray = lowerCorner
|
|
261
|
-
const upperCornerArray = upperCorner
|
|
255
|
+
const lowerCornerArray = lowerCorner?.split(" ").map((x) => +x);
|
|
256
|
+
const upperCornerArray = upperCorner?.split(" ").map((x) => +x);
|
|
262
257
|
if (lowerCornerArray && lowerCornerArray.length === 2 && upperCornerArray && upperCornerArray.length === 2)
|
|
263
258
|
this.range = core_geometry_1.Range2d.createXYXY(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);
|
|
264
259
|
}
|
|
@@ -320,7 +315,6 @@ var WmtsCapability;
|
|
|
320
315
|
WmtsCapability.TileMatrixSet = TileMatrixSet;
|
|
321
316
|
class TileMatrix {
|
|
322
317
|
constructor(elem) {
|
|
323
|
-
var _a;
|
|
324
318
|
const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, "");
|
|
325
319
|
if (identifier)
|
|
326
320
|
this.identifier = identifier;
|
|
@@ -334,8 +328,8 @@ var WmtsCapability;
|
|
|
334
328
|
throw new Error("No scale denominator found on TileMatrix.");
|
|
335
329
|
this.scaleDenominator = +scaleDenom;
|
|
336
330
|
// Top left corner
|
|
337
|
-
const topLeftCorner =
|
|
338
|
-
if (
|
|
331
|
+
const topLeftCorner = getElementTextContent(elem, XmlConstants.TOPLEFTCORNER_XMLTAG, "")?.split(" ").map((x) => +x);
|
|
332
|
+
if (topLeftCorner?.length !== 2)
|
|
339
333
|
throw new Error("No TopLeftCorner found on TileMatrix.");
|
|
340
334
|
this.topLeftCorner = core_geometry_1.Point2d.create(topLeftCorner[0], topLeftCorner[1]);
|
|
341
335
|
// Tile Width
|
|
@@ -363,7 +357,6 @@ var WmtsCapability;
|
|
|
363
357
|
WmtsCapability.TileMatrix = TileMatrix;
|
|
364
358
|
class Layer {
|
|
365
359
|
constructor(elem) {
|
|
366
|
-
var _a, _b, _c, _d, _e, _f;
|
|
367
360
|
this.styles = [];
|
|
368
361
|
this.tileMatrixSetLinks = [];
|
|
369
362
|
const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, "");
|
|
@@ -380,13 +373,13 @@ var WmtsCapability;
|
|
|
380
373
|
let lowerCornerArray, upperCornerArray;
|
|
381
374
|
const bbox = elem.getElementsByTagName(OwsConstants.WGS84BOUNDINGBOX_XMLTAG);
|
|
382
375
|
if (bbox.length > 0) {
|
|
383
|
-
lowerCornerArray =
|
|
384
|
-
upperCornerArray =
|
|
376
|
+
lowerCornerArray = getElementTextContent(bbox[0], OwsConstants.LOWERCORNER_XMLTAG)?.split(" ").map((x) => +x);
|
|
377
|
+
upperCornerArray = getElementTextContent(bbox[0], OwsConstants.UPPERCORNER_XMLTAG)?.split(" ").map((x) => +x);
|
|
385
378
|
}
|
|
386
|
-
if (
|
|
379
|
+
if (lowerCornerArray?.length === 2 && upperCornerArray?.length === 2)
|
|
387
380
|
this.wsg84BoundingBox = internal_1.MapCartoRectangle.fromDegrees(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);
|
|
388
381
|
// If we could not initialized WSG84 bounding box, attempt to initialized it from Bounding Box
|
|
389
|
-
if (!this.wsg84BoundingBox && (
|
|
382
|
+
if (!this.wsg84BoundingBox && (this.boundingBox?.crs?.includes("EPSG:4326") || this.boundingBox?.crs?.includes("CRS:84"))) {
|
|
390
383
|
const range = this.boundingBox.range;
|
|
391
384
|
if (range)
|
|
392
385
|
this.wsg84BoundingBox = internal_1.MapCartoRectangle.fromDegrees(range.low.x, range.low.y, range.high.x, range.high.y);
|
|
@@ -413,11 +406,10 @@ var WmtsCapability;
|
|
|
413
406
|
/** @internal */
|
|
414
407
|
class WmtsCapabilities {
|
|
415
408
|
constructor(xmlDoc) {
|
|
416
|
-
var _a;
|
|
417
409
|
const capabilities = xmlDoc.getElementsByTagName("Capabilities");
|
|
418
410
|
if (capabilities.length !== 0) {
|
|
419
411
|
const capability = capabilities[0];
|
|
420
|
-
this.version =
|
|
412
|
+
this.version = capability.getAttribute("version") ?? undefined;
|
|
421
413
|
// Service Identification
|
|
422
414
|
const serviceIdentification = capability.getElementsByTagName(OwsConstants.SERVICEIDENTIFICATION_XMLTAG);
|
|
423
415
|
if (serviceIdentification.length > 0)
|