public void Add(TileIndex index, byte[] tile) { tiles mbtile = new tiles { zoom_level = index.Level, tile_column = index.Col, tile_row = index.Row, tile_data = tile, createDate = DateTime.UtcNow }; mbtile.tile_row = OSMtoTMS(mbtile.zoom_level, mbtile.tile_row); lock (sqlConn) { tiles oldTile = sqlConn.Table <tiles>().Where(x => x.zoom_level == mbtile.zoom_level && x.tile_column == mbtile.tile_column && x.tile_row == mbtile.tile_row).FirstOrDefault(); if (oldTile != null) { mbtile.id = oldTile.id; sqlConn.Update(mbtile); } else { sqlConn.Insert(mbtile); } } }
public byte[] Find(TileIndex index) { int level = index.Level; int rowNum = OSMtoTMS(level, index.Row); lock (sqlConn) { tiles oldTile = sqlConn.Table <tiles>().Where(x => x.zoom_level == level && x.tile_column == index.Col && x.tile_row == rowNum).FirstOrDefault(); // You may also want to put a check here to 'age' the tile, i.e., if it is too old, return null so a new one is fetched. if (oldTile != null) { return(oldTile.tile_data); } } return(null); }
public static int WriteTile(SQLiteConnection sqliteConnection, Tile t, byte[] data) { try { // mbtiles uses tms format so reverse y-axis... int tmsY = (int)Math.Pow(2, t.Z) - 1 - t.Y; int rowsAffected = 0; //Create tile for DB tiles mbtile = new tiles { zoom_level = t.Z, tile_column = t.X, tile_row = tmsY, tile_data = data, createDate = DateTime.UtcNow }; tiles oldTile = sqliteConnection.Table <tiles>().Where(x => x.zoom_level == t.Z && x.tile_column == t.X && x.tile_row == tmsY).FirstOrDefault(); if (oldTile == null) { //rowsAffected = sqliteConnection.Execute($"INSERT INTO tiles (zoom_level, tile_column, tile_row, tile_data) VALUES ({t.Z}, {t.X}, {tmsY}, @bytes)", data); rowsAffected = sqliteConnection.Insert(mbtile); } else { mbtile.id = oldTile.id; rowsAffected = sqliteConnection.Update(mbtile); } return(rowsAffected); } catch (Exception ex) { Log.Error($"WriteTile(...) crashed: {ex}"); } return(0); }
public void uptadeTiles(int playerX, int playerY, ITileMap tileMap) { if (!inited) { Init(tileMap); } inited = true; map = tileMap; #if false moveTiles.Clear(); for (int y = 0; y < TileMap.TotalHeight; y++) { List <tiles> temp = new List <tiles>(); for (int x = 0; x < TileMap.TotalWidth; x++) { if (x == playerX && y == playerY) { temp.Add(new tiles() { x = x, y = y, tileState = states.goal }); } else { temp.Add(new tiles() { x = x, y = y, tileState = tileMap.GetTileAndObjectCollision(x, y) ? states.wall : states.unVisited }); /*GET WALL INFO*/ } } moveTiles.Add(temp); } #else for (int y = 0; y < tileMap.Height; y++) { for (int x = 0; x < tileMap.Width; x++) { moveTiles[y][x] = new tiles() { x = x, y = y, tileState = tileMap.GetTileCollision(x, y) ? states.wall : states.unVisited }; } } moveTiles[playerY][playerX] = new tiles() { x = playerX, y = playerY, tileState = states.goal }; #endif goalX = playerX; goalY = playerY; panther.Search(moveTiles, goalX, goalY, tileMap); //for(int y = 0; y < moveTiles.Count; y++) //{ // for (int x = 0; x < moveTiles.Count; x++) // { // if(moveTiles[y][x].tileState == states.wall) // { // tileMap.GetGameObjectFast(x, y).GetComponent<SpriteRenderer>().color = Color.clear; // } // } //} //Dictionary<tiles, int> toimii = new Dictionary<tiles, int>(); //Queue<tiles> hue = new Queue<tiles>(100); //hue.Enqueue(moveTiles[playerY][playerX]); //while (hue.Count != 0) //{ // tiles current = hue.Dequeue(); // if (current.x - 1 >= 0 && moveTiles[current.y][current.x - 1].tileState == states.unVisited) // { // tiles tile = moveTiles[current.y][current.x - 1]; // hue.Enqueue(tile); // tile.tileState = states.right; // } // if (current.x + 1 <= 59 && moveTiles[current.y][current.x + 1].tileState == states.unVisited) // { // tiles tile = moveTiles[current.y][current.x + 1]; // hue.Enqueue(tile); // tile.tileState = states.left; // } // if (current.y + 1 <= 59 && moveTiles[current.y + 1][current.x].tileState == states.unVisited) // { // tiles tile = moveTiles[current.y + 1][current.x]; // hue.Enqueue(tile); // tile.tileState = states.down; // } // if (current.y - 1 >= 0 && moveTiles[current.y - 1][current.x].tileState == states.unVisited) // { // tiles tile = moveTiles[current.y-1][current.x]; // hue.Enqueue(tile); // tile.tileState = states.up; // } //} }