mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Update MapTileLayer.cs
This commit is contained in:
parent
68dbebcaac
commit
ae8cc0b030
|
|
@ -65,7 +65,7 @@ namespace MapControl
|
|||
|
||||
public TileMatrix TileMatrix { get; private set; }
|
||||
|
||||
public List<Tile> Tiles { get; } = new List<Tile>();
|
||||
public IReadOnlyCollection<Tile> Tiles { get; private set; } = new List<Tile>();
|
||||
|
||||
/// <summary>
|
||||
/// Minimum zoom level supported by the MapTileLayer. Default value is 0.
|
||||
|
|
@ -129,7 +129,7 @@ namespace MapControl
|
|||
{
|
||||
if (TileSource != TileImageLoader.TileSource)
|
||||
{
|
||||
Tiles.Clear();
|
||||
Tiles = new List<Tile>();
|
||||
update = true;
|
||||
}
|
||||
|
||||
|
|
@ -144,13 +144,6 @@ namespace MapControl
|
|||
{
|
||||
UpdateTiles();
|
||||
|
||||
Children.Clear();
|
||||
|
||||
foreach (var tile in Tiles)
|
||||
{
|
||||
Children.Add(tile.Image);
|
||||
}
|
||||
|
||||
return TileImageLoader.LoadTiles(Tiles, TileSource, SourceName);
|
||||
}
|
||||
|
||||
|
|
@ -201,25 +194,17 @@ namespace MapControl
|
|||
|
||||
private void UpdateTiles()
|
||||
{
|
||||
var newTiles = new List<Tile>();
|
||||
int maxZoomLevel;
|
||||
|
||||
if (TileSource == null ||
|
||||
TileMatrix == null ||
|
||||
(maxZoomLevel = Math.Min(TileMatrix.ZoomLevel, MaxZoomLevel)) < MinZoomLevel)
|
||||
{
|
||||
Tiles.Clear();
|
||||
}
|
||||
else
|
||||
if (TileSource != null &&
|
||||
TileMatrix != null &&
|
||||
(maxZoomLevel = Math.Min(TileMatrix.ZoomLevel, MaxZoomLevel)) >= MinZoomLevel)
|
||||
{
|
||||
var minZoomLevel = IsBaseMapLayer
|
||||
? Math.Max(TileMatrix.ZoomLevel - MaxBackgroundLevels, MinZoomLevel)
|
||||
: maxZoomLevel;
|
||||
|
||||
var oldTiles = Tiles.Where(t => t.ZoomLevel >= minZoomLevel && t.ZoomLevel <= maxZoomLevel).ToList();
|
||||
var newTiles = new List<Tile>();
|
||||
|
||||
Tiles.Clear();
|
||||
|
||||
for (var z = minZoomLevel; z <= maxZoomLevel; z++)
|
||||
{
|
||||
var tileSize = 1 << (TileMatrix.ZoomLevel - z);
|
||||
|
|
@ -232,13 +217,13 @@ namespace MapControl
|
|||
{
|
||||
for (var x = x1; x <= x2; x++)
|
||||
{
|
||||
var tile = oldTiles.FirstOrDefault(t => t.ZoomLevel == z && t.X == x && t.Y == y);
|
||||
var tile = Tiles.FirstOrDefault(t => t.ZoomLevel == z && t.X == x && t.Y == y);
|
||||
|
||||
if (tile == null)
|
||||
{
|
||||
tile = new Tile(z, x, y);
|
||||
|
||||
var equivalentTile = oldTiles.FirstOrDefault(
|
||||
var equivalentTile = Tiles.FirstOrDefault(
|
||||
t => t.ZoomLevel == z && t.XIndex == tile.XIndex && t.Y == y && !t.Pending);
|
||||
|
||||
if (equivalentTile != null)
|
||||
|
|
@ -247,11 +232,20 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
Tiles.Add(tile);
|
||||
newTiles.Add(tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Tiles = newTiles;
|
||||
|
||||
Children.Clear();
|
||||
|
||||
foreach (var tile in Tiles)
|
||||
{
|
||||
Children.Add(tile.Image);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue