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); }
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}"); }
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}"); } }