mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Version 4.12.2 Minor changes in TileImageLoader.
This commit is contained in:
parent
0c0a0ae511
commit
8491a4fc7c
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -63,71 +63,66 @@ namespace MapControl
|
||||||
|
|
||||||
if (tileSource != null && tiles.Any())
|
if (tileSource != null && tiles.Any())
|
||||||
{
|
{
|
||||||
|
if (Cache == null || tileSource.UriFormat == null || !tileSource.UriFormat.StartsWith("http"))
|
||||||
|
{
|
||||||
|
sourceName = null; // do not use cache
|
||||||
|
}
|
||||||
|
|
||||||
pendingTiles.PushRange(tiles.Reverse().ToArray());
|
pendingTiles.PushRange(tiles.Reverse().ToArray());
|
||||||
|
|
||||||
Func<Tile, Task> loadFunc;
|
|
||||||
|
|
||||||
if (Cache != null && !string.IsNullOrEmpty(sourceName) &&
|
|
||||||
tileSource.UriFormat != null && tileSource.UriFormat.StartsWith("http"))
|
|
||||||
{
|
|
||||||
loadFunc = tile => LoadCachedTileImageAsync(tile, tileSource, sourceName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
loadFunc = tile => LoadTileImageAsync(tile, tileSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
var newTasks = Math.Min(pendingTiles.Count, MaxLoadTasks) - taskCount;
|
var newTasks = Math.Min(pendingTiles.Count, MaxLoadTasks) - taskCount;
|
||||||
|
|
||||||
while (--newTasks >= 0)
|
while (--newTasks >= 0)
|
||||||
{
|
{
|
||||||
Interlocked.Increment(ref taskCount);
|
Interlocked.Increment(ref taskCount);
|
||||||
|
|
||||||
var task = Task.Run(() => LoadTilesAsync(loadFunc)); // do not await
|
Task.Run(async () => // do not await
|
||||||
}
|
{
|
||||||
|
Tile tile;
|
||||||
|
|
||||||
//Debug.WriteLine("{0}: {1} tasks", Environment.CurrentManagedThreadId, taskCount);
|
while (pendingTiles.TryPop(out tile))
|
||||||
|
{
|
||||||
|
tile.Pending = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await LoadTileImageAsync(tile, tileSource, sourceName);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("TileImageLoader: {0}/{1}/{2}: {3}", tile.ZoomLevel, tile.XIndex, tile.Y, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Interlocked.Decrement(ref taskCount);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadTilesAsync(Func<Tile, Task> loadTileImageFunc)
|
private async Task LoadTileImageAsync(Tile tile, TileSource tileSource, string sourceName)
|
||||||
{
|
{
|
||||||
Tile tile;
|
if (string.IsNullOrEmpty(sourceName))
|
||||||
|
|
||||||
while (pendingTiles.TryPop(out tile))
|
|
||||||
{
|
{
|
||||||
tile.Pending = false;
|
await LoadTileImageAsync(tile, tileSource);
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await loadTileImageFunc(tile);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Debug.WriteLine("TileImageLoader: {0}/{1}/{2}: {3}", tile.ZoomLevel, tile.XIndex, tile.Y, ex.Message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
Interlocked.Decrement(ref taskCount);
|
|
||||||
//Debug.WriteLine("{0}: {1} tasks", Environment.CurrentManagedThreadId, taskCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task LoadCachedTileImageAsync(Tile tile, TileSource tileSource, string sourceName)
|
|
||||||
{
|
|
||||||
var uri = tileSource.GetUri(tile.XIndex, tile.Y, tile.ZoomLevel);
|
|
||||||
|
|
||||||
if (uri != null)
|
|
||||||
{
|
{
|
||||||
var extension = Path.GetExtension(uri.LocalPath);
|
var uri = tileSource.GetUri(tile.XIndex, tile.Y, tile.ZoomLevel);
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(extension) || extension == ".jpeg")
|
if (uri != null)
|
||||||
{
|
{
|
||||||
extension = ".jpg";
|
var extension = Path.GetExtension(uri.LocalPath);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(extension) || extension == ".jpeg")
|
||||||
|
{
|
||||||
|
extension = ".jpg";
|
||||||
|
}
|
||||||
|
|
||||||
|
var cacheKey = string.Format(CacheKeyFormat, sourceName, tile.ZoomLevel, tile.XIndex, tile.Y, extension);
|
||||||
|
|
||||||
|
await LoadTileImageAsync(tile, uri, cacheKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
var cacheKey = string.Format(CacheKeyFormat, sourceName, tile.ZoomLevel, tile.XIndex, tile.Y, extension);
|
|
||||||
|
|
||||||
await LoadCachedTileImageAsync(tile, uri, cacheKey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,15 +110,9 @@ namespace MapControl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual async Task<ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
|
public virtual async Task<ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
|
||||||
{
|
{
|
||||||
ImageSource imageSource = null;
|
|
||||||
var uri = GetUri(x, y, zoomLevel);
|
var uri = GetUri(x, y, zoomLevel);
|
||||||
|
|
||||||
if (uri != null)
|
return uri != null ? await ImageLoader.LoadImageAsync(uri) : null;
|
||||||
{
|
|
||||||
imageSource = await ImageLoader.LoadImageAsync(uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageSource;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetDefaultUri(int x, int y, int zoomLevel)
|
private string GetDefaultUri(int x, int y, int zoomLevel)
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace MapControl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Caching.IImageCache Cache { get; set; }
|
public static Caching.IImageCache Cache { get; set; }
|
||||||
|
|
||||||
private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||||
{
|
{
|
||||||
var cacheItem = await Cache.GetAsync(cacheKey);
|
var cacheItem = await Cache.GetAsync(cacheKey);
|
||||||
var cacheBuffer = cacheItem?.Buffer;
|
var cacheBuffer = cacheItem?.Buffer;
|
||||||
|
|
@ -47,7 +47,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cacheBuffer != null)
|
if (cacheBuffer != null) // cached image not expired or download failed
|
||||||
{
|
{
|
||||||
await LoadTileImageAsync(tile, cacheBuffer);
|
await LoadTileImageAsync(tile, cacheBuffer);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ using System.Windows;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace MapControl
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static ObjectCache Cache { get; set; } = MemoryCache.Default;
|
public static ObjectCache Cache { get; set; } = MemoryCache.Default;
|
||||||
|
|
||||||
private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||||
{
|
{
|
||||||
DateTime expiration;
|
DateTime expiration;
|
||||||
var cacheBuffer = GetCachedImage(cacheKey, out expiration);
|
var cacheBuffer = GetCachedImage(cacheKey, out expiration);
|
||||||
|
|
@ -52,7 +52,7 @@ namespace MapControl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cacheBuffer != null)
|
if (cacheBuffer != null) // cached image not expired or download failed
|
||||||
{
|
{
|
||||||
using (var stream = new MemoryStream(cacheBuffer))
|
using (var stream = new MemoryStream(cacheBuffer))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCompany("Clemens Fischer")]
|
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyVersion("4.12.1")]
|
[assembly: AssemblyVersion("4.12.2")]
|
||||||
[assembly: AssemblyFileVersion("4.12.1")]
|
[assembly: AssemblyFileVersion("4.12.2")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue