Skip to content

Commit 6207412

Browse files
committed
[processing] restore CreateConstantRaster algorithm (fix #14860)
1 parent 3809da6 commit 6207412

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

python/plugins/processing/algs/qgis/CreateConstantRaster.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
from osgeo import gdal
29+
2830
from processing.core.GeoAlgorithm import GeoAlgorithm
2931
from processing.core.parameters import ParameterRaster
3032
from processing.core.parameters import ParameterNumber
@@ -46,18 +48,22 @@ def defineCharacteristics(self):
4648
self.addParameter(ParameterRaster(self.INPUT,
4749
self.tr('Reference layer')))
4850
self.addParameter(ParameterNumber(self.NUMBER,
49-
self.tr('Constant value'), default=1.0))
51+
self.tr('Constant value'),
52+
default=1.0))
5053

5154
self.addOutput(OutputRaster(self.OUTPUT,
5255
self.tr('Constant')))
5356

5457
def processAlgorithm(self, progress):
5558
layer = dataobjects.getObjectFromUri(
5659
self.getParameterValue(self.INPUT))
57-
value = self.getOutputValue(self.NUMBER)
60+
value = self.getParameterValue(self.NUMBER)
5861

5962
output = self.getOutputFromName(self.OUTPUT)
6063

64+
raster = gdal.Open(layer.source(), gdal.GA_ReadOnly)
65+
geoTransform = raster.GetGeoTransform()
66+
6167
cellsize = (layer.extent().xMaximum() - layer.extent().xMinimum()) \
6268
/ layer.width()
6369

@@ -68,7 +74,8 @@ def processAlgorithm(self, progress):
6874
layer.extent().yMaximum(),
6975
cellsize,
7076
1,
71-
self.crs,
77+
layer.crs(),
78+
geoTransform
7279
)
73-
w.matrix[:] = value
80+
w.matrix.fill(value)
7481
w.close()

python/plugins/processing/tools/raster.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,18 @@ class RasterWriter:
8585
NODATA = -99999.0
8686

8787
def __init__(self, fileName, minx, miny, maxx, maxy, cellsize,
88-
nbands, crs):
88+
nbands, crs, geotransform=None):
8989
self.fileName = fileName
9090
self.nx = int((maxx - minx) / float(cellsize))
9191
self.ny = int((maxy - miny) / float(cellsize))
9292
self.nbands = nbands
93-
self.matrix = numpy.ones(shape=(self.ny, self.nx), dtype=numpy.float32)
94-
self.matrix[:] = self.NODATA
93+
self.matrix = numpy.empty(shape=(self.ny, self.nx), dtype=numpy.float32)
94+
self.matrix.fill(self.NODATA)
9595
self.cellsize = cellsize
9696
self.crs = crs
9797
self.minx = minx
9898
self.maxy = maxy
99+
self.geotransform = geotransform
99100

100101
def setValue(self, value, x, y, band=0):
101102
try:
@@ -115,7 +116,10 @@ def close(self):
115116
dst_ds = driver.Create(self.fileName, self.nx, self.ny, 1,
116117
gdal.GDT_Float32)
117118
dst_ds.SetProjection(str(self.crs.toWkt()))
118-
dst_ds.SetGeoTransform([self.minx, self.cellsize, 0,
119-
self.maxy, self.cellsize, 0])
119+
if self.geotransform is None:
120+
dst_ds.SetGeoTransform([self.minx, self.cellsize, 0,
121+
self.maxy, self.cellsize, 0])
122+
else:
123+
dst_ds.SetGeoTransform(self.geotransform)
120124
dst_ds.GetRasterBand(1).WriteArray(self.matrix)
121125
dst_ds = None

0 commit comments

Comments
 (0)