tileIDsInDeviceScreen static method

List<TileID> tileIDsInDeviceScreen(
  1. Geometry geometry,
  2. List<int> screenSize
)

Implementation

static List<TileID> tileIDsInDeviceScreen(
    Geometry geometry, List<int> screenSize) {
  final List<TileID> allTiles = [];
  try {
    final points = maxGeoPointsInDeviceScreen(geometry, screenSize);
    final tiles =
        points.map((point) => tileIDFor(point, geometry.zoom.toInt()));

    var minX = double.maxFinite.toInt();
    var minY = double.maxFinite.toInt();
    var maxX = 0;
    var maxY = 0;
    var zoom = 0;
    for (var tile in tiles) {
      minX = math.min(tile.x.toInt(), minX);
      minY = math.min(tile.y.toInt(), minY);
      maxX = math.max(tile.x.toInt(), maxX);
      maxY = math.max(tile.y.toInt(), maxY);
      zoom = math.max(tile.zoom.toInt(), zoom);
    }
    minX = clamp(minX.toDouble(), 0.0, double.maxFinite).toInt();
    minY = clamp(minY.toDouble(), 0.0, double.maxFinite).toInt();
    maxX = clamp(maxX.toDouble(), 0.0, double.maxFinite).toInt();
    maxY = clamp(maxY.toDouble(), 0.0, double.maxFinite).toInt();
    zoom = clamp(zoom.toDouble(), 0.0, _maxZoom).toInt();
    if (zoom == 0) return [];

    for (var x = minX; x <= maxX; x++) {
      for (var y = minY; y <= maxY; y++) {
        allTiles.add(TileID(x.toDouble(), y.toDouble(), zoom.toDouble()));
      }
    }
  } catch (e) {
    PMLogger.e(e);
  }
  return allTiles;
}