calculateBaseTiles method

void calculateBaseTiles(
  1. Tile upperLeft,
  2. Tile lowerRight,
  3. SubFileParameter subFileParameter
)

Calculates the query parameters for a rectangular area of tiles.

Implementation

void calculateBaseTiles(Tile upperLeft, Tile lowerRight, SubFileParameter subFileParameter) {
if (upperLeft.zoomLevel < subFileParameter.baseZoomLevel) {
  // here we need to combine multiple base tiles
  int zoomLevelDifference = subFileParameter.baseZoomLevel - upperLeft.zoomLevel;
  fromBaseTileX = upperLeft.tileX << zoomLevelDifference;
  fromBaseTileY = upperLeft.tileY << zoomLevelDifference;
  toBaseTileX = (lowerRight.tileX << zoomLevelDifference) + (1 << zoomLevelDifference) - 1;
  toBaseTileY = (lowerRight.tileY << zoomLevelDifference) + (1 << zoomLevelDifference) - 1;
  useTileBitmask = false;
} else if (upperLeft.zoomLevel > subFileParameter.baseZoomLevel) {
  // we might have more than just one base tile as we might span boundaries
  int zoomLevelDifference = upperLeft.zoomLevel - subFileParameter.baseZoomLevel;
  fromBaseTileX = upperLeft.tileX >> zoomLevelDifference;
  fromBaseTileY = upperLeft.tileY >> zoomLevelDifference;
  toBaseTileX = lowerRight.tileX >> zoomLevelDifference;
  toBaseTileY = lowerRight.tileY >> zoomLevelDifference;
  // TODO understand what is going on here. The tileBitmask is used to extract just
  // the data from the base tiles that is relevant for the area, but how can this work
  // for a set of tiles, so not using tileBitmask for the moment.
  useTileBitmask = true;
  queryTileBitmask = QueryCalculations.calculateTileBitmask(upperLeft, lowerRight, zoomLevelDifference);
} else {
  // we are on the base zoom level, so we just need all tiles in range
  fromBaseTileX = upperLeft.tileX;
  fromBaseTileY = upperLeft.tileY;
  toBaseTileX = lowerRight.tileX;
  toBaseTileY = lowerRight.tileY;
  useTileBitmask = false;
}
  }