示例#1
0
文件: MBTiles.cs 项目: johnjore/hajk
        public static SQLiteConnection CreateDatabase(string db, metadataValues metadata)
        {
            if (!File.Exists(db))
            {
                //Create
                try
                {
                    var sqliteConnection = CreateDatabase(db);
                    InsertMetadata(sqliteConnection, metadata);
                    return(sqliteConnection);
                }
                catch (Exception ex)
                {
                    Log.Error($"CreateDatabase(...) crashed: {ex}");
                }
            }
            else
            {
                //Open database
                var sqliteConnection = new SQLiteConnection(db);
                return(sqliteConnection);
            }

            return(null);
        }
示例#2
0
        public static async Task DownloadMap(Models.Map map)
        {
            //Make sure the folder for the offline maps exists
            InitMBTilesFolder();

            //Calculate the the sqlite / mbtiles metadata
            Point          p        = Utils.Misc.CalculateCenter(map.BoundsRight, map.BoundsTop, map.BoundsLeft, map.BoundsBottom);
            metadataValues metadata = new metadataValues
            {
                name        = map.Name,
                description = "Created by hajk",
                version     = "1",
                minzoom     = map.ZoomMin.ToString(),
                maxzoom     = map.ZoomMax.ToString(),
                center      = p.X.ToString().Replace(",", ".") + "," + p.Y.ToString().Replace(",", "."),
                bounds      = map.BoundsTop.ToString().Replace(",", ".") + "," + map.BoundsLeft.ToString().Replace(",", ".") + "," + map.BoundsBottom.ToString().Replace(",", ".") + "," + map.BoundsRight.ToString().Replace(",", "."),
                format      = "png",
                type        = "png",
            };

            SQLiteConnection conn = MBTilesWriter.CreateDatabase(MainActivity.rootPath + "/MBTiles/" + map.Name + ".mbtiles", metadata);

            if (conn == null)
            {
                return;
            }

            for (int zoom = map.ZoomMin; zoom <= map.ZoomMax; zoom++)
            {
                var leftBottom = Tile.CreateAroundLocation(map.BoundsLeft, map.BoundsBottom, zoom);
                var topRight   = Tile.CreateAroundLocation(map.BoundsRight, map.BoundsTop, zoom);

                var minX = Math.Min(leftBottom.X, topRight.X);
                var maxX = Math.Max(leftBottom.X, topRight.X);
                var minY = Math.Min(leftBottom.Y, topRight.Y);
                var maxY = Math.Max(leftBottom.Y, topRight.Y);

                var tiles = new AwesomeTiles.TileRange(minX, minY, maxX, maxY, zoom);

                var tilesCount = tiles.Count;
                totalTilesCount += tilesCount;
                Log.Information($"Need to download {tilesCount} tiles for zoom level {zoom}");

                await DownloadTiles(tiles, zoom, conn);
            }
            conn.Close();
            Log.Information($"Done downloading map for {metadata.name}");
        }
示例#3
0
文件: MBTiles.cs 项目: johnjore/hajk
 private static void InsertMetadata(SQLiteConnection conn, metadataValues metadata)
 {
     try {
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('name', '{metadata.name}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('description', '{metadata.description}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('bounds', '{metadata.bounds}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('center', '{metadata.center}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('minzoom', '{metadata.minzoom}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('maxzoom', '{metadata.maxzoom}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('version', '{metadata.version}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('type', '{metadata.type}');");
         conn.Execute($"INSERT INTO metadata (name, value) VALUES ('format', 'pbf');");
     }
     catch (Exception ex)
     {
         Log.Error($"InsertMetadata(...) crashed: {ex}");
     }
 }