public byte[] GetImage(int level, int row, int col)
{
var gRow = (int)((Math.Pow(2, level) - 1) - row);
var key = string.Format("{0}-{1}-{2}", gRow, col, level);
//var pos = gRow + "-" + col + "-" + level;
if (memoryCache.ContainsKey(key)) return memoryCache[key];
using (var command = new SQLiteCommand(connection))
{
command.CommandText = string.Format(CultureInfo.InvariantCulture, @"SELECT [tile_data] FROM [tiles] WHERE zoom_level = {0} AND tile_column = {1} AND tile_row = {2};", level, col, gRow);
//"SELECT [tile_data] FROM [tiles] WHERE zoom_level = " + level + " AND tile_column = " + col +
//" AND tile_row = " + gRow;
//"SELECT [tile_data] FROM [tiles] WHERE zoom_level = @zoom AND tile_column = @col AND tile_row = @row";
//command.Parameters.Add(new SQLiteParameter("zoom", level));
//command.Parameters.Add(new SQLiteParameter("col", col));
//command.Parameters.Add(new SQLiteParameter("row", gRow));
//Console.WriteLine(level + " , " + col + " , " + gRow);
var tileObj = command.ExecuteScalar();
if (tileObj == null)
{
return null;
}
memoryCache[key] = (byte[])tileObj;
if (memoryCache.Count > 3000) memoryCache.Remove(memoryCache.Keys.First());
return (byte[])tileObj;
//BitmapImage image = new BitmapImage();
//image.BeginInit();
//image.CacheOption = BitmapCacheOption.OnLoad;
//image.UriSource = null;
//image.StreamSource = new MemoryStream((byte[])tileObj);
//image.EndInit();
//return image;
}
}