Version 1.3.10: Minor improvements in TileImageLoader. Removed SurfaceApplication from VS Solution.

This commit is contained in:
ClemensF 2013-08-29 15:49:48 +02:00
parent 09eeb11269
commit aa04fd0551
20 changed files with 53 additions and 58 deletions

View file

@ -15,8 +15,8 @@ using System.Windows;
[assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.3.9")]
[assembly: AssemblyFileVersion("1.3.9")]
[assembly: AssemblyVersion("1.3.10")]
[assembly: AssemblyFileVersion("1.3.10")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]

View file

@ -24,13 +24,16 @@ namespace MapControl
this.tileLayer = tileLayer;
}
internal void BeginGetTiles(IEnumerable<Tile> tiles)
internal void StartGetTiles(IEnumerable<Tile> tiles)
{
foreach (var tile in tiles.Where(t => !t.HasImage))
foreach (var tile in tiles)
{
var uri = tileLayer.TileSource.GetUri(tile.XIndex, tile.Y, tile.ZoomLevel);
tile.SetImageSource(new BitmapImage(uri), true);
if (uri != null)
{
tile.SetImageSource(new BitmapImage(uri), tileLayer.AnimateTileOpacity);
}
}
}

View file

@ -71,9 +71,12 @@ namespace MapControl
this.tileLayer = tileLayer;
}
internal void BeginGetTiles(IEnumerable<Tile> tiles)
internal void StartGetTiles(IEnumerable<Tile> tiles)
{
ThreadPool.QueueUserWorkItem(BeginGetTilesAsync, new List<Tile>(tiles.Where(t => !t.HasImage)));
if (tiles.Any())
{
ThreadPool.QueueUserWorkItem(GetTilesAsync, tiles.ToList());
}
}
internal void CancelGetTiles()
@ -87,15 +90,15 @@ namespace MapControl
return string.Format("{0}/{1}/{2}/{3}", tileLayer.SourceName, tile.ZoomLevel, tile.XIndex, tile.Y);
}
private void BeginGetTilesAsync(object newTilesList)
private void GetTilesAsync(object tileList)
{
var newTiles = (List<Tile>)newTilesList;
var tiles = (List<Tile>)tileList;
var imageTileSource = tileLayer.TileSource as ImageTileSource;
var animateOpacity = tileLayer.AnimateTileOpacity;
if (imageTileSource != null && !imageTileSource.CanLoadAsync)
{
foreach (var tile in newTiles)
foreach (var tile in tiles)
{
tileLayer.Dispatcher.BeginInvoke(
(Action<Tile, ImageTileSource>)((t, ts) => t.SetImageSource(ts.LoadImage(t.XIndex, t.Y, t.ZoomLevel), animateOpacity)),
@ -108,9 +111,9 @@ namespace MapControl
!tileLayer.TileSource.UriFormat.StartsWith("file://") &&
!string.IsNullOrWhiteSpace(tileLayer.SourceName))
{
var outdatedTiles = new List<Tile>(newTiles.Count);
var outdatedTiles = new List<Tile>(tiles.Count);
foreach (var tile in newTiles)
foreach (var tile in tiles)
{
var key = GetCacheKey(tile);
var buffer = Cache.Get(key) as byte[];
@ -136,10 +139,10 @@ namespace MapControl
}
}
newTiles = outdatedTiles; // enqueue outdated tiles at last
tiles = outdatedTiles; // enqueue outdated tiles at last
}
foreach (var tile in newTiles)
foreach (var tile in tiles)
{
pendingTiles.Enqueue(tile);
}

View file

@ -96,7 +96,7 @@ namespace MapControl
{
SelectTiles();
RenderTiles();
tileImageLoader.BeginGetTiles(tiles);
tileImageLoader.StartGetTiles(tiles.Where(t => !t.HasImage));
}
}

View file

@ -23,7 +23,6 @@ namespace MapControl
private Func<int, int, int, Uri> getUri;
private string uriFormat = string.Empty;
private int hostIndex = -1;
public TileSource()
{
@ -103,7 +102,7 @@ namespace MapControl
private Uri GetOpenStreetMapUri(int x, int y, int zoomLevel)
{
hostIndex = (hostIndex + 1) % 3;
var hostIndex = (x + y + zoomLevel) % 3;
return new Uri(UriFormat.
Replace("{c}", "abc".Substring(hostIndex, 1)).
@ -114,7 +113,7 @@ namespace MapControl
private Uri GetGoogleMapsUri(int x, int y, int zoomLevel)
{
hostIndex = (hostIndex + 1) % 4;
var hostIndex = (x + y + zoomLevel) % 4;
return new Uri(UriFormat.
Replace("{i}", hostIndex.ToString()).
@ -125,7 +124,7 @@ namespace MapControl
private Uri GetMapQuestUri(int x, int y, int zoomLevel)
{
hostIndex = (hostIndex % 4) + 1;
var hostIndex = (x + y + zoomLevel) % 4 + 1;
return new Uri(UriFormat.
Replace("{n}", hostIndex.ToString()).

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.3.9")]
[assembly: AssemblyFileVersion("1.3.9")]
[assembly: AssemblyVersion("1.3.10")]
[assembly: AssemblyFileVersion("1.3.10")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]