def create_grid_halo(crs): min_x = -180 min_y = -90 max_x = 180 max_y = 90 step = 2 coords = [] for y in range(min_y, max_y + step, step): coords.append((min_x, y)) for x in range(min_x + step, max_x + step, step): coords.append((x, max_y)) for y in reversed(range(min_y, max_y + step, step)): coords.append((max_x, y)) for x in reversed(range(min_x + step, max_x + step, step)): coords.append((x, min_y)) coords.append(coords[0]) # noinspection PyCallByClass,PyArgumentList geom = QgsGeometry.fromPolygonXY( [[QgsPointXY(pair[0], pair[1]) for pair in coords]]).asQPolygonF() # noinspection PyArgumentList transformer = QgsCoordinateTransform(WGS84, crs, QgsProject.instance()) transformer.transformPolygon(geom) # noinspection PyArgumentList return QgsGeometry.fromQPolygonF(geom)