MapTileLayer/WmtsTileLayer

This commit is contained in:
ClemensFischer 2025-10-30 19:49:06 +01:00
parent bec830c6ec
commit e7aaa2ba22
4 changed files with 25 additions and 30 deletions

View file

@ -115,37 +115,29 @@ namespace MapControl
return finalSize;
}
protected override void UpdateTiles(bool resetTiles)
protected override void UpdateTileCollection(bool reset)
{
if (ParentMap == null || !SupportedCrsIds.Contains(ParentMap.MapProjection.CrsId))
{
TileMatrix = null;
Children.Clear();
CancelLoadTiles();
}
else if (SetTileMatrix() || resetTiles)
else if (SetTileMatrix() || reset)
{
SetRenderTransform();
if (resetTiles)
{
Tiles.Clear();
}
UpdateTiles();
UpdateRenderTransform();
UpdateTiles(reset);
BeginLoadTiles(Tiles, SourceName);
}
}
protected override void SetRenderTransform()
protected override void UpdateRenderTransform()
{
if (TileMatrix != null)
{
// Tile matrix origin in pixels.
//
var tileMatrixOrigin = new Point(TileSize * TileMatrix.XMin, TileSize * TileMatrix.YMin);
var tileMatrixScale = MapBase.ZoomLevelToScale(TileMatrix.ZoomLevel);
((MatrixTransform)RenderTransform).Matrix =
@ -158,7 +150,6 @@ namespace MapControl
// Add 0.001 to avoid rounding issues.
//
var tileMatrixZoomLevel = (int)Math.Floor(ParentMap.ZoomLevel - ZoomLevelOffset + 0.001);
var tileMatrixScale = MapBase.ZoomLevelToScale(tileMatrixZoomLevel);
// Bounds in tile pixels from view size.
@ -185,12 +176,17 @@ namespace MapControl
return true;
}
private void UpdateTiles()
private void UpdateTiles(bool reset)
{
var tiles = new TileCollection();
if (TileSource != null && TileMatrix != null)
{
if (reset)
{
Tiles.Clear();
}
var maxZoomLevel = Math.Min(TileMatrix.ZoomLevel, MaxZoomLevel);
if (maxZoomLevel >= MinZoomLevel)

View file

@ -28,7 +28,7 @@ namespace MapControl
{
public static readonly DependencyProperty TileSourceProperty =
DependencyPropertyHelper.Register<MapTilePyramidLayer, TileSource>(nameof(TileSource), null,
(layer, oldValue, newValue) => layer.Update(true));
(layer, oldValue, newValue) => layer.UpdateTiles(true));
public static readonly DependencyProperty SourceNameProperty =
DependencyPropertyHelper.Register<MapTilePyramidLayer, string>(nameof(SourceName));
@ -67,7 +67,7 @@ namespace MapControl
loadingProgress = new Progress<double>(p => SetValue(LoadingProgressProperty, p));
updateTimer = new UpdateTimer { Interval = UpdateInterval };
updateTimer.Tick += (s, e) => Update(false);
updateTimer.Tick += (s, e) => UpdateTiles();
MapPanel.SetRenderTransform(this, new MatrixTransform());
#if WPF
@ -205,25 +205,25 @@ namespace MapControl
ClearValue(LoadingProgressProperty);
}
protected abstract void SetRenderTransform();
protected abstract void UpdateRenderTransform();
protected abstract void UpdateTiles(bool resetTiles);
protected abstract void UpdateTileCollection(bool reset);
private void Update(bool resetTiles)
private void UpdateTiles(bool reset = false)
{
updateTimer.Stop();
UpdateTiles(resetTiles);
UpdateTileCollection(reset);
}
private void OnViewportChanged(object sender, ViewportChangedEventArgs e)
{
if (e.TransformCenterChanged || e.ProjectionChanged || Children.Count == 0)
{
Update(false); // update immediately
UpdateTiles(); // update immediately
}
else
{
SetRenderTransform();
UpdateRenderTransform();
updateTimer.Run(!UpdateWhileViewportChanging);
}
}

View file

@ -100,15 +100,14 @@ namespace MapControl
return finalSize;
}
protected override void UpdateTiles(bool resetTiles)
protected override void UpdateTileCollection(bool reset)
{
// resetTiles is ignored here because it is always false.
// reset parameter is ignored here because it is always false.
if (ParentMap == null ||
!TileMatrixSets.TryGetValue(ParentMap.MapProjection.CrsId, out WmtsTileMatrixSet tileMatrixSet))
{
Children.Clear();
CancelLoadTiles();
}
else if (UpdateChildLayers(tileMatrixSet))
@ -134,11 +133,11 @@ namespace MapControl
}
}
protected override void SetRenderTransform()
protected override void UpdateRenderTransform()
{
foreach (var layer in ChildLayers)
{
layer.SetRenderTransform(ParentMap.ViewTransform);
layer.UpdateRenderTransform(ParentMap.ViewTransform);
}
}
@ -182,7 +181,7 @@ namespace MapControl
tilesChanged = true;
}
layer.SetRenderTransform(ParentMap.ViewTransform);
layer.UpdateRenderTransform(ParentMap.ViewTransform);
Children.Add(layer);
}

View file

@ -37,7 +37,7 @@ namespace MapControl
public TileCollection Tiles { get; private set; } = [];
public void SetRenderTransform(ViewTransform viewTransform)
public void UpdateRenderTransform(ViewTransform viewTransform)
{
// Tile matrix origin in pixels.
//