function getTilesEnclosingCircle(circle) {
const padding = 20;
const northWest = offsetLatLon(circle, { x: -circle.radius, y: circle.radius });
const southEast = offsetLatLon(circle, { x: circle.radius, y: -circle.radius });
for (let z = 22; z >= 0; z -= 1) {
const northWestTile = latlon2tile(northWest, z);
const southEastTile = latlon2tile(southEast, z);
if (northWestTile.x === southEastTile.x - 1 || northWestTile.y === southEastTile.y - 1) {
const extendX = northWestTile.x === southEastTile.x - 2;
const extendY = northWestTile.y === southEastTile.y - 2;
return [
offsetTile(northWestTile, { x: 0, y: 0 }),
offsetTile(northWestTile, { x: 1, y: 0 }),
extendX && offsetTile(northWestTile, { x: 2, y: 0 }),
offsetTile(northWestTile, { x: 0, y: 1 }),
offsetTile(northWestTile, { x: 1, y: 1 }),
extendX && offsetTile(northWestTile, { x: 2, y: 1 }),
extendY && offsetTile(northWestTile, { x: 0, y: 2 }),
extendY && offsetTile(northWestTile, { x: 1, y: 2 }),
].filter(Boolean);
}
}
return null;
}