@Override public MapReadResult readPoiData(Tile upperLeft, Tile lowerRight) { switch (this.dataPolicy) { case RETURN_FIRST: for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(upperLeft)) { return mdb.readPoiData(upperLeft, lowerRight); } } return null; case RETURN_ALL: return readPoiData(upperLeft, lowerRight, false); case DEDUPLICATE: return readPoiData(upperLeft, lowerRight, true); } throw new IllegalStateException("Invalid data policy for multi map database"); }
@Override public MapReadResult readPoiData(Tile tile) { switch (this.dataPolicy) { case RETURN_FIRST: for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(tile)) { return mdb.readPoiData(tile); } } return null; case RETURN_ALL: return readPoiData(tile, false); case DEDUPLICATE: return readPoiData(tile, true); } throw new IllegalStateException("Invalid data policy for multi map database"); }
private MapReadResult readPoiData(Tile tile, boolean deduplicate) { MapReadResult mapReadResult = new MapReadResult(); for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(tile)) { MapReadResult result = mdb.readPoiData(tile); if (result == null) { continue; } boolean isWater = mapReadResult.isWater & result.isWater; mapReadResult.isWater = isWater; mapReadResult.add(result, deduplicate); } } return mapReadResult; }
/** * Reads POI data for an area defined by the tile in the upper left and the tile in * the lower right corner. The default implementation combines the results from * all tiles, a possibly inefficient solution. * Precondition: upperLeft.tileX <= lowerRight.tileX && upperLeft.tileY <= lowerRight.tileY * * @param upperLeft tile that defines the upper left corner of the requested area. * @param lowerRight tile that defines the lower right corner of the requested area. * @return map data for the tile. */ public MapReadResult readPoiData(Tile upperLeft, Tile lowerRight) { if (upperLeft.tileX > lowerRight.tileX || upperLeft.tileY > lowerRight.tileY) { new IllegalArgumentException("upperLeft tile must be above and left of lowerRight tile"); } MapReadResult result = new MapReadResult(); for (int x = upperLeft.tileX; x <= lowerRight.tileX; x++) { for (int y = upperLeft.tileY; y <= lowerRight.tileY; y++) { Tile current = new Tile(x, y, upperLeft.zoomLevel, upperLeft.tileSize); result.add(readPoiData(current), false); } } return result; }
private MapReadResult readPoiData(Tile upperLeft, Tile lowerRight, boolean deduplicate) { MapReadResult mapReadResult = new MapReadResult(); for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(upperLeft)) { MapReadResult result = mdb.readPoiData(upperLeft, lowerRight); if (result == null) { continue; } boolean isWater = mapReadResult.isWater & result.isWater; mapReadResult.isWater = isWater; mapReadResult.add(result, deduplicate); } } return mapReadResult; }
@Override public MapReadResult readPoiData(Tile upperLeft, Tile lowerRight) { switch (this.dataPolicy) { case RETURN_FIRST: for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(upperLeft)) { return mdb.readPoiData(upperLeft, lowerRight); } } return null; case RETURN_ALL: return readPoiData(upperLeft, lowerRight, false); case DEDUPLICATE: return readPoiData(upperLeft, lowerRight, true); } throw new IllegalStateException("Invalid data policy for multi map database"); }
@Override public MapReadResult readPoiData(Tile tile) { switch (this.dataPolicy) { case RETURN_FIRST: for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(tile)) { return mdb.readPoiData(tile); } } return null; case RETURN_ALL: return readPoiData(tile, false); case DEDUPLICATE: return readPoiData(tile, true); } throw new IllegalStateException("Invalid data policy for multi map database"); }
/** * Reads POI data for an area defined by the tile in the upper left and the tile in * the lower right corner. The default implementation combines the results from * all tiles, a possibly inefficient solution. * Precondition: upperLeft.tileX <= lowerRight.tileX && upperLeft.tileY <= lowerRight.tileY * * @param upperLeft tile that defines the upper left corner of the requested area. * @param lowerRight tile that defines the lower right corner of the requested area. * @return map data for the tile. */ public MapReadResult readPoiData(Tile upperLeft, Tile lowerRight) { if (upperLeft.tileX > lowerRight.tileX || upperLeft.tileY > lowerRight.tileY) { new IllegalArgumentException("upperLeft tile must be above and left of lowerRight tile"); } MapReadResult result = new MapReadResult(); for (int x = upperLeft.tileX; x <= lowerRight.tileX; x++) { for (int y = upperLeft.tileY; y <= lowerRight.tileY; y++) { Tile current = new Tile(x, y, upperLeft.zoomLevel, upperLeft.tileSize); result.add(readPoiData(current), false); } } return result; }
private MapReadResult readPoiData(Tile tile, boolean deduplicate) { MapReadResult mapReadResult = new MapReadResult(); for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(tile)) { MapReadResult result = mdb.readPoiData(tile); if (result == null) { continue; } boolean isWater = mapReadResult.isWater & result.isWater; mapReadResult.isWater = isWater; mapReadResult.add(result, deduplicate); } } return mapReadResult; }
private MapReadResult readPoiData(Tile upperLeft, Tile lowerRight, boolean deduplicate) { MapReadResult mapReadResult = new MapReadResult(); for (MapDataStore mdb : mapDatabases) { if (mdb.supportsTile(upperLeft)) { MapReadResult result = mdb.readPoiData(upperLeft, lowerRight); if (result == null) { continue; } boolean isWater = mapReadResult.isWater & result.isWater; mapReadResult.isWater = isWater; mapReadResult.add(result, deduplicate); } } return mapReadResult; }