Index: Core/Components/src/Core.Components.DotSpatial.Forms/Core.Components.DotSpatial.Forms.csproj =================================================================== diff -u -r13a7121f09c123fe08031a03d3aa598d9800b372 -reada3ba8d4d1b06b3039918f8d0ad9f9789ab374 --- Core/Components/src/Core.Components.DotSpatial.Forms/Core.Components.DotSpatial.Forms.csproj (.../Core.Components.DotSpatial.Forms.csproj) (revision 13a7121f09c123fe08031a03d3aa598d9800b372) +++ Core/Components/src/Core.Components.DotSpatial.Forms/Core.Components.DotSpatial.Forms.csproj (.../Core.Components.DotSpatial.Forms.csproj) (revision eada3ba8d4d1b06b3039918f8d0ad9f9789ab374) @@ -34,6 +34,7 @@ AllRules.ruleset + False ..\..\..\..\lib\DotSpatial.1.8\DotSpatial.Controls.dll @@ -66,7 +67,6 @@ - Index: Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs =================================================================== diff -u -rb519fc798c63691f04bb8008b562a94ed9232d51 -reada3ba8d4d1b06b3039918f8d0ad9f9789ab374 --- Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) +++ Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision eada3ba8d4d1b06b3039918f8d0ad9f9789ab374) @@ -50,15 +50,15 @@ private readonly RecursiveObserver mapDataCollectionObserver; private readonly Observer backGroundMapDataObserver; private readonly IList drawnMapDataList = new List(); - private readonly WmtsBackgroundLayerStatus backgroundLayerStatus = new WmtsBackgroundLayerStatus(); private Map map; private MapFunctionPan mapFunctionPan; private MapFunctionSelectionZoom mapFunctionSelectionZoom; private RdNewMouseCoordinatesMapExtension mouseCoordinatesMapExtension; private MapDataCollection data; - private WmtsMapData backgroundMapData; + private IBackgroundLayerStatus backgroundLayerStatus; + private ImageBasedMapData backgroundMapData; /// /// Creates a new instance of . @@ -102,7 +102,7 @@ } } - public WmtsMapData BackgroundMapData + public ImageBasedMapData BackgroundMapData { get { @@ -117,6 +117,7 @@ backgroundMapData = value; backGroundMapDataObserver.Observable = backgroundMapData; + backgroundLayerStatus = BackgroundLayerStatusFactory.CreateBackgroundLayerStatus(backgroundMapData); if (HasMapData) { @@ -195,7 +196,7 @@ { if (backgroundLayerStatus.BackgroundLayer != null) { - if (HasBackgroundMapDataConfigurationChanged()) + if (HasBackgroundMapDataConfigurationChanged(backgroundMapData)) { map.Layers.Remove(backgroundLayerStatus.BackgroundLayer); backgroundLayerStatus.ClearConfiguration(); @@ -214,18 +215,19 @@ } } - private bool HasBackgroundMapDataConfigurationChanged() + private bool HasBackgroundMapDataConfigurationChanged(ImageBasedMapData wmtsMapDataBackgroundMapData) { - return !backgroundLayerStatus.HasSameConfiguration(backgroundMapData); + return !backgroundLayerStatus.HasSameConfiguration(wmtsMapDataBackgroundMapData); } private void InsertBackgroundLayer() { if (backgroundMapData.IsConfigured) { - InitializeBackgroundLayer(); - - InsertBackgroundLayerAndReprojectExistingLayers(); + if (InitializeBackgroundLayer()) + { + InsertBackgroundLayerAndReprojectExistingLayers(); + } } else { @@ -234,25 +236,40 @@ } } + private bool InitializeBackgroundLayer() + { + var wmtsBackgroundMapData = backgroundMapData as WmtsMapData; + var wellKnownMapDataBackgroundMapData = backgroundMapData as WellKnownTileSourceMapData; + if (wmtsBackgroundMapData != null) + { + return InitializeBackgroundLayer(wmtsBackgroundMapData); + } + if (wellKnownMapDataBackgroundMapData != null) + { + return InitializeBackgroundLayer(wellKnownMapDataBackgroundMapData); + } + return false; + } + /// /// Attempts to initialize the background layer. /// /// true if initialization of the background layer was successful, /// false otherwise. /// - private bool InitializeBackgroundLayer() + private bool InitializeBackgroundLayer(WmtsMapData wmtsMapDataBackgroundMapData) { try { - WmtsLayerConfiguration configuration = WmtsLayerConfiguration.CreateInitializedConfiguration(backgroundMapData.SourceCapabilitiesUrl, - backgroundMapData.SelectedCapabilityIdentifier, - backgroundMapData.PreferredFormat); + WmtsLayerConfiguration configuration = WmtsLayerConfiguration.CreateInitializedConfiguration(wmtsMapDataBackgroundMapData.SourceCapabilitiesUrl, + wmtsMapDataBackgroundMapData.SelectedCapabilityIdentifier, + wmtsMapDataBackgroundMapData.PreferredFormat); var backgroundLayer = new BruTileLayer(configuration) { IsVisible = backgroundMapData.IsVisible, Transparency = Convert.ToSingle(backgroundMapData.Transparency) }; - backgroundLayerStatus.SuccessfullyInitializedLayer(backgroundLayer, backgroundMapData); + backgroundLayerStatus.SuccessfullyInitializedLayer(backgroundLayer, wmtsMapDataBackgroundMapData); return true; } catch (Exception e) when (e is CannotFindTileSourceException || e is CannotReceiveTilesException) @@ -269,6 +286,36 @@ } } + private bool InitializeBackgroundLayer(WellKnownTileSourceMapData wellKnownMapDataBackgroundMapData) + { + try + { + WellKnownTileSourceLayerConfiguration configuration = WellKnownTileSourceLayerConfiguration.CreateInitializedConfiguration( + wellKnownMapDataBackgroundMapData.TileSource); + + var backgroundLayer = new BruTileLayer(configuration) + { + IsVisible = backgroundMapData.IsVisible, + Transparency = Convert.ToSingle(backgroundMapData.Transparency) + }; + backgroundLayerStatus.SuccessfullyInitializedLayer(backgroundLayer, wellKnownMapDataBackgroundMapData); + + return true; + } + catch (Exception e) when (e is CannotFindTileSourceException || e is CannotReceiveTilesException) + { + HandleBruTileInitializationException(e, $"Verbinden met '{nameof(wellKnownMapDataBackgroundMapData.TileSource)}' is mislukt waardoor geen kaartgegevens ingeladen kunnen worden."); + + return false; + } + catch (CannotCreateTileCacheException e) + { + HandleBruTileInitializationException(e, Resources.MapControl_InitializeBackgroundLayer_Persistent_cache_creation_failed); + + return false; + } + } + private void HandleBruTileInitializationException(Exception e, string message) { if (!backgroundLayerStatus.PreviousBackgroundLayerCreationFailed) @@ -283,15 +330,12 @@ private void InsertBackgroundLayerAndReprojectExistingLayers() { - if (backgroundLayerStatus.BackgroundLayer != null) - { - IMapLayer[] existingMapLayers = map.Layers.ToArray(); + IMapLayer[] existingMapLayers = map.Layers.ToArray(); - map.Projection = backgroundLayerStatus.BackgroundLayer.Projection; - map.Layers.Insert(0, backgroundLayerStatus.BackgroundLayer); + map.Projection = backgroundLayerStatus.BackgroundLayer.Projection; + map.Layers.Insert(0, backgroundLayerStatus.BackgroundLayer); - ReprojectLayers(existingMapLayers); - } + ReprojectLayers(existingMapLayers); } private void ReprojectLayers(IEnumerable layersToReproject) @@ -435,7 +479,7 @@ map.ClearLayers(); map.Projection = MapDataConstants.FeatureBasedMapDataCoordinateSystem; - backgroundLayerStatus.ClearConfiguration(expectedRecreationOfBackgroundLayer); + backgroundLayerStatus?.ClearConfiguration(expectedRecreationOfBackgroundLayer); } private void HandleMapDataCollectionChange() Index: Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs =================================================================== diff -u -rb519fc798c63691f04bb8008b562a94ed9232d51 -reada3ba8d4d1b06b3039918f8d0ad9f9789ab374 --- Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs (.../IMapControl.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) +++ Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs (.../IMapControl.cs) (revision eada3ba8d4d1b06b3039918f8d0ad9f9789ab374) @@ -52,7 +52,7 @@ /// /// Gets or sets the data to show in the background of the . /// - WmtsMapData BackgroundMapData { get; set; } + ImageBasedMapData BackgroundMapData { get; set; } /// /// Zooms to a level so that all visible layers are in view.