WmtsTileSource factory method

This commit is contained in:
ClemensFischer 2025-01-17 08:25:10 +01:00
parent 7cb7d81f15
commit dd738c85a4
3 changed files with 25 additions and 29 deletions

View file

@ -24,7 +24,7 @@ namespace MapControl
private static readonly XNamespace xlink = "http://www.w3.org/1999/xlink"; private static readonly XNamespace xlink = "http://www.w3.org/1999/xlink";
public string Layer { get; private set; } public string Layer { get; private set; }
public WmtsTileSource TileSource { get; private set; } public string UriTemplate { get; private set; }
public List<WmtsTileMatrixSet> TileMatrixSets { get; private set; } public List<WmtsTileMatrixSet> TileMatrixSets { get; private set; }
public static async Task<WmtsCapabilities> ReadCapabilitiesAsync(Uri capabilitiesUri, string layer) public static async Task<WmtsCapabilities> ReadCapabilitiesAsync(Uri capabilitiesUri, string layer)
@ -117,7 +117,7 @@ namespace MapControl
return new WmtsCapabilities return new WmtsCapabilities
{ {
Layer = layer, Layer = layer,
TileSource = new WmtsTileSource { UriTemplate = urlTemplate }, UriTemplate = urlTemplate,
TileMatrixSets = tileMatrixSets TileMatrixSets = tileMatrixSets
}; };
} }

View file

@ -71,6 +71,8 @@ namespace MapControl
public Dictionary<string, WmtsTileMatrixSet> TileMatrixSets { get; } = new Dictionary<string, WmtsTileMatrixSet>(); public Dictionary<string, WmtsTileMatrixSet> TileMatrixSets { get; } = new Dictionary<string, WmtsTileMatrixSet>();
protected virtual WmtsTileSource CreateTileSource(string uriTemplate) => new WmtsTileSource { UriTemplate = uriTemplate };
protected override Size MeasureOverride(Size availableSize) protected override Size MeasureOverride(Size availableSize)
{ {
foreach (var layer in ChildLayers) foreach (var layer in ChildLayers)
@ -104,7 +106,26 @@ namespace MapControl
} }
else if (UpdateChildLayers(tileMatrixSet)) else if (UpdateChildLayers(tileMatrixSet))
{ {
await LoadTiles(tileMatrixSet); var cacheName = SourceName;
if (TileSource is WmtsTileSource tileSource)
{
tileSource.TileMatrixSet = tileMatrixSet;
if (!string.IsNullOrEmpty(cacheName))
{
if (!string.IsNullOrEmpty(Layer))
{
cacheName += "/" + Layer.Replace(':', '_');
}
cacheName += "/" + tileMatrixSet.Identifier.Replace(':', '_');
}
}
var tiles = ChildLayers.SelectMany(layer => layer.Tiles);
await LoadTiles(tiles, cacheName);
} }
} }
@ -164,30 +185,6 @@ namespace MapControl
return tilesChanged; return tilesChanged;
} }
private Task LoadTiles(WmtsTileMatrixSet tileMatrixSet)
{
var cacheName = SourceName;
if (TileSource is WmtsTileSource tileSource)
{
tileSource.TileMatrixSet = tileMatrixSet;
if (!string.IsNullOrEmpty(cacheName))
{
if (!string.IsNullOrEmpty(Layer))
{
cacheName += "/" + Layer.Replace(':', '_');
}
cacheName += "/" + tileMatrixSet.Identifier.Replace(':', '_');
}
}
var tiles = ChildLayers.SelectMany(layer => layer.Tiles);
return LoadTiles(tiles, cacheName);
}
private async void OnLoaded(object sender, RoutedEventArgs e) private async void OnLoaded(object sender, RoutedEventArgs e)
{ {
Loaded -= OnLoaded; Loaded -= OnLoaded;
@ -206,7 +203,7 @@ namespace MapControl
} }
Layer = capabilities.Layer; Layer = capabilities.Layer;
TileSource = capabilities.TileSource; TileSource = CreateTileSource(capabilities.UriTemplate);
} }
catch (Exception ex) catch (Exception ex)
{ {

View file

@ -2,7 +2,6 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0-windows10.0.17763.0</TargetFramework> <TargetFramework>net8.0-windows10.0.17763.0</TargetFramework>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers> <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<UseWinUI>true</UseWinUI> <UseWinUI>true</UseWinUI>
<DefineConstants>WINUI</DefineConstants> <DefineConstants>WINUI</DefineConstants>
<RootNamespace>MapControl</RootNamespace> <RootNamespace>MapControl</RootNamespace>