[processing] restore CreateConstantRaster algorithm (fix #14860)

This commit is contained in:
Alexander Bruy 2016-05-23 12:38:05 +03:00
parent 3809da60fd
commit 6207412bf7
2 changed files with 20 additions and 9 deletions

View File

@ -25,6 +25,8 @@ __copyright__ = '(C) 2012, Victor Olaya'
__revision__ = '$Format:%H$'
from osgeo import gdal
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterNumber
@ -46,7 +48,8 @@ class CreateConstantRaster(GeoAlgorithm):
self.addParameter(ParameterRaster(self.INPUT,
self.tr('Reference layer')))
self.addParameter(ParameterNumber(self.NUMBER,
self.tr('Constant value'), default=1.0))
self.tr('Constant value'),
default=1.0))
self.addOutput(OutputRaster(self.OUTPUT,
self.tr('Constant')))
@ -54,10 +57,13 @@ class CreateConstantRaster(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
value = self.getOutputValue(self.NUMBER)
value = self.getParameterValue(self.NUMBER)
output = self.getOutputFromName(self.OUTPUT)
raster = gdal.Open(layer.source(), gdal.GA_ReadOnly)
geoTransform = raster.GetGeoTransform()
cellsize = (layer.extent().xMaximum() - layer.extent().xMinimum()) \
/ layer.width()
@ -68,7 +74,8 @@ class CreateConstantRaster(GeoAlgorithm):
layer.extent().yMaximum(),
cellsize,
1,
self.crs,
layer.crs(),
geoTransform
)
w.matrix[:] = value
w.matrix.fill(value)
w.close()

View File

@ -85,17 +85,18 @@ class RasterWriter:
NODATA = -99999.0
def __init__(self, fileName, minx, miny, maxx, maxy, cellsize,
nbands, crs):
nbands, crs, geotransform=None):
self.fileName = fileName
self.nx = int((maxx - minx) / float(cellsize))
self.ny = int((maxy - miny) / float(cellsize))
self.nbands = nbands
self.matrix = numpy.ones(shape=(self.ny, self.nx), dtype=numpy.float32)
self.matrix[:] = self.NODATA
self.matrix = numpy.empty(shape=(self.ny, self.nx), dtype=numpy.float32)
self.matrix.fill(self.NODATA)
self.cellsize = cellsize
self.crs = crs
self.minx = minx
self.maxy = maxy
self.geotransform = geotransform
def setValue(self, value, x, y, band=0):
try:
@ -115,7 +116,10 @@ class RasterWriter:
dst_ds = driver.Create(self.fileName, self.nx, self.ny, 1,
gdal.GDT_Float32)
dst_ds.SetProjection(str(self.crs.toWkt()))
dst_ds.SetGeoTransform([self.minx, self.cellsize, 0,
self.maxy, self.cellsize, 0])
if self.geotransform is None:
dst_ds.SetGeoTransform([self.minx, self.cellsize, 0,
self.maxy, self.cellsize, 0])
else:
dst_ds.SetGeoTransform(self.geotransform)
dst_ds.GetRasterBand(1).WriteArray(self.matrix)
dst_ds = None