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 TileMatrix TileMatrix { get; private set; }
|
||||||
|
|
||||||
public List<Tile> Tiles { get; } = new List<Tile>();
|
public IReadOnlyCollection<Tile> Tiles { get; private set; } = new List<Tile>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Minimum zoom level supported by the MapTileLayer. Default value is 0.
|
/// Minimum zoom level supported by the MapTileLayer. Default value is 0.
|
||||||
|
|
@ -129,7 +129,7 @@ namespace MapControl
|
||||||
{
|
{
|
||||||
if (TileSource != TileImageLoader.TileSource)
|
if (TileSource != TileImageLoader.TileSource)
|
||||||
{
|
{
|
||||||
Tiles.Clear();
|
Tiles = new List<Tile>();
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -144,13 +144,6 @@ namespace MapControl
|
||||||
{
|
{
|
||||||
UpdateTiles();
|
UpdateTiles();
|
||||||
|
|
||||||
Children.Clear();
|
|
||||||
|
|
||||||
foreach (var tile in Tiles)
|
|
||||||
{
|
|
||||||
Children.Add(tile.Image);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TileImageLoader.LoadTiles(Tiles, TileSource, SourceName);
|
return TileImageLoader.LoadTiles(Tiles, TileSource, SourceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,25 +194,17 @@ namespace MapControl
|
||||||
|
|
||||||
private void UpdateTiles()
|
private void UpdateTiles()
|
||||||
{
|
{
|
||||||
|
var newTiles = new List<Tile>();
|
||||||
int maxZoomLevel;
|
int maxZoomLevel;
|
||||||
|
|
||||||
if (TileSource == null ||
|
if (TileSource != null &&
|
||||||
TileMatrix == null ||
|
TileMatrix != null &&
|
||||||
(maxZoomLevel = Math.Min(TileMatrix.ZoomLevel, MaxZoomLevel)) < MinZoomLevel)
|
(maxZoomLevel = Math.Min(TileMatrix.ZoomLevel, MaxZoomLevel)) >= MinZoomLevel)
|
||||||
{
|
|
||||||
Tiles.Clear();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
var minZoomLevel = IsBaseMapLayer
|
var minZoomLevel = IsBaseMapLayer
|
||||||
? Math.Max(TileMatrix.ZoomLevel - MaxBackgroundLevels, MinZoomLevel)
|
? Math.Max(TileMatrix.ZoomLevel - MaxBackgroundLevels, MinZoomLevel)
|
||||||
: maxZoomLevel;
|
: 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++)
|
for (var z = minZoomLevel; z <= maxZoomLevel; z++)
|
||||||
{
|
{
|
||||||
var tileSize = 1 << (TileMatrix.ZoomLevel - z);
|
var tileSize = 1 << (TileMatrix.ZoomLevel - z);
|
||||||
|
|
@ -232,13 +217,13 @@ namespace MapControl
|
||||||
{
|
{
|
||||||
for (var x = x1; x <= x2; x++)
|
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)
|
if (tile == null)
|
||||||
{
|
{
|
||||||
tile = new Tile(z, x, y);
|
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);
|
t => t.ZoomLevel == z && t.XIndex == tile.XIndex && t.Y == y && !t.Pending);
|
||||||
|
|
||||||
if (equivalentTile != null)
|
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