| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | 
							- using DevExpress.XtraMap;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Drawing;
 
- using System.Drawing.Imaging;
 
- using System.Linq;
 
- using System.Text;
 
- using System.IO;
 
- using System.Threading.Tasks;
 
- using System.Data.SQLite;
 
- using System.Data.Common;
 
- using System.Runtime.InteropServices;
 
- using System.Windows.Forms;
 
- using Ips.Library.Basic;
 
- namespace Ips.Library.DxpLib
 
- {
 
-     public class SqliteTileGenerator : IImageTileSource
 
-     {
 
-         public SqliteTileGenerator(string filename = null)
 
-         {
 
-             FileName = filename.IfNullOrWhitespace(DefaultDBTileFile);
 
-             ConnectionString = string.Format("Data Source=\"{0}\";Page Size=32768;Pooling=True", FileName);
 
-         }
 
-         public static string DefaultDBTileFile = Path.Combine(IpsPath.RootDir,"AppData","map","map.dat");
 
-         public string Name => nameof(SqliteTileGenerator);
 
-         public bool CanDisposeSourceImage => true;
 
-         public string FileName { get; set; }
 
-         public string ConnectionString { get; private set; }
 
-         public int MapType { get; set; } = 1818940751;//MapConsts.NormalMapNum;
 
-         public const string querySql = "SELECT Tile FROM TilesData WHERE id = (SELECT id FROM Tiles WHERE X={0} AND Y={1} AND Zoom={2} AND Type={3})";
 
-         //public const string querySql = "SELECT Tile FROM TilesData WHERE id = (SELECT id FROM Tiles WHERE X={0} AND Y={1} AND Zoom={2})";
 
-         public Image GetImage(int x, int y, int level, Size size)
 
-         {
 
-             Image ret = null;
 
-             using (var con = new SQLiteConnection())
 
-             {
 
-                 con.ConnectionString = ConnectionString;
 
-                 con.Open();
 
-                 using (var cmd = con.CreateCommand())
 
-                 {
 
-                     cmd.CommandText = string.Format(querySql, x, y, level, MapType);
 
-                     using (DbDataReader rd = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))
 
-                     {
 
-                         if (rd.Read())
 
-                         {
 
-                             long length = rd.GetBytes(0, 0, null, 0, 0);
 
-                             byte[] tile = new byte[length];
 
-                             rd.GetBytes(0, 0, tile, 0, tile.Length);
 
-                             using (MemoryStream ms = new MemoryStream(tile, 0, tile.Length, false, true))
 
-                             {
 
-                                 ret = Image.FromStream(ms);
 
-                             }
 
-                             tile = null;
 
-                         }
 
-                         rd.Close();
 
-                     }
 
-                 }
 
-             }
 
-             return ret;
 
-         }
 
-     }
 
- }
 
 
  |