package com.android.lib.map.osm; import java.util.ArrayList; import java.util.List; import com.android.lib.map.osm.models.MapTile; import android.os.Handler; public class TilesDownloader { private RemoteTileLoader mRemoteTileLoader; public TilesDownloader(Handler handler) { mRemoteTileLoader = new RemoteTileLoader(handler, 0); } public static List<Tile> getTilesForBoundaryBox(int mapTypeId, int minZoom, int maxZoom, final double north, final double south, final double east, final double west) { List<Tile> tiles = new ArrayList<Tile>(); for(int z = minZoom; z <= maxZoom; z++){ final Tile upperLeft = Projection.getMapTileFromCoordinates(north, west, z); final Tile lowerRight = Projection.getMapTileFromCoordinates(south, east, z); for(int x = upperLeft.mapX; x <= lowerRight.mapX; x++){ for(int y = upperLeft.mapY; y <= lowerRight.mapY; y++){ tiles.add(new Tile(x, y, z, mapTypeId)); } } } return tiles; } public static int getNbTilesForBoundaryBox(int minZoom, int maxZoom, final double north, final double south, final double east, final double west) { int count = 0; for(int z = minZoom; z <= maxZoom; z++){ final Tile upperLeft = Projection.getMapTileFromCoordinates(north, west, z); final Tile lowerRight = Projection.getMapTileFromCoordinates(south, east, z); for(int x = upperLeft.mapX; x <= lowerRight.mapX; x++){ for(int y = upperLeft.mapY; y <= lowerRight.mapY; y++){ count++; } } } return count; } /** * Check if tiles are in Db, if not download them * @param Tiles list * @return number of tiles added for download */ public int download(List<Tile> tiles) { int tileAdded = 0; for (Tile tile : tiles) { if (!MapTile.hasTile(tile)) { mRemoteTileLoader.queueTileRequest(tile); tileAdded++; } } return tileAdded; } }