Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[processing] restore CreateConstantRaster algorithm (fix #14860)
(cherry picked from commit 6207412)
  • Loading branch information
alexbruy committed May 23, 2016
1 parent c260a77 commit ce9db2e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
15 changes: 11 additions & 4 deletions python/plugins/processing/algs/qgis/CreateConstantRaster.py
Expand Up @@ -25,6 +25,8 @@

__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
Expand All @@ -46,18 +48,22 @@ def defineCharacteristics(self):
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')))

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()

Expand All @@ -68,7 +74,8 @@ def processAlgorithm(self, progress):
layer.extent().yMaximum(),
cellsize,
1,
self.crs,
layer.crs(),
geoTransform
)
w.matrix[:] = value
w.matrix.fill(value)
w.close()
14 changes: 9 additions & 5 deletions python/plugins/processing/tools/raster.py
Expand Up @@ -84,17 +84,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:
Expand All @@ -114,7 +115,10 @@ def close(self):
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

0 comments on commit ce9db2e

Please sign in to comment.