MapTileLayer implementation

This commit is contained in:
ClemensFischer 2025-08-18 22:23:19 +02:00
parent 933cb7f2ba
commit 407f786640
4 changed files with 17 additions and 26 deletions

View file

@ -109,33 +109,24 @@ namespace MapControl
return finalSize;
}
protected override async Task UpdateTileLayerAsync(bool tileSourceChanged)
protected override async Task UpdateTileLayerAsync(bool resetTiles)
{
var updateTiles = false;
if (ParentMap == null || ParentMap.MapProjection.Type != MapProjectionType.WebMercator)
{
updateTiles = TileMatrix != null;
TileMatrix = null;
}
else
{
if (tileSourceChanged)
{
Tiles = new TileCollection(); // clear all
updateTiles = true;
}
Children.Clear();
if (SetTileMatrix())
{
updateTiles = true;
await LoadTilesAsync(null, null); // stop TileImageLoader
}
else if (SetTileMatrix() || resetTiles)
{
SetRenderTransform();
if (resetTiles)
{
Tiles.Clear();
}
if (updateTiles)
{
UpdateTiles();
await LoadTilesAsync(Tiles, SourceName);

View file

@ -194,13 +194,13 @@ namespace MapControl
protected abstract void SetRenderTransform();
protected abstract Task UpdateTileLayerAsync(bool tileSourceChanged);
protected abstract Task UpdateTileLayerAsync(bool resetTiles);
private Task UpdateTileLayer(bool tileSourceChanged)
private Task UpdateTileLayer(bool resetTiles)
{
updateTimer.Stop();
return UpdateTileLayerAsync(tileSourceChanged);
return UpdateTileLayerAsync(resetTiles);
}
private async void OnViewportChanged(object sender, ViewportChangedEventArgs e)

View file

@ -79,9 +79,9 @@ namespace MapControl
{
pendingTiles?.Clear();
if (tiles != null && tileSource != null)
if (tileSource != null && tiles != null && (tiles = tiles.Where(tile => tile.IsPending)).Any())
{
pendingTiles = new ConcurrentStack<Tile>(tiles.Where(tile => tile.IsPending).Reverse());
pendingTiles = new ConcurrentStack<Tile>(tiles.Reverse());
var tileCount = pendingTiles.Count;
var taskCount = Math.Min(tileCount, MaxLoadTasks);

View file

@ -89,9 +89,9 @@ namespace MapControl
return finalSize;
}
protected override async Task UpdateTileLayerAsync(bool tileSourceChanged)
protected override async Task UpdateTileLayerAsync(bool resetTiles)
{
// tileSourceChanged is ignored here because it is always false.
// resetTiles is ignored here because it is always false.
if (ParentMap == null ||
!TileMatrixSets.TryGetValue(ParentMap.MapProjection.CrsId, out WmtsTileMatrixSet tileMatrixSet))