Skip to content

Commit

Permalink
revive the GDAL 'rasterize over' tool that was available in the old l…
Browse files Browse the repository at this point in the history
…tr and for some reason not activated/added in QGIS 3
  • Loading branch information
gioman authored and alexbruy committed Nov 4, 2019
1 parent 1046f6f commit ee8151a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 26 deletions.
4 changes: 2 additions & 2 deletions python/plugins/processing/algs/gdal/GdalAlgorithmProvider.py
Expand Up @@ -69,7 +69,7 @@
from .pansharp import pansharp

from .extractprojection import ExtractProjection
# from .rasterize_over import rasterize_over
from .rasterize_over import rasterize_over

from .Buffer import Buffer
from .ClipVectorByExtent import ClipVectorByExtent
Expand Down Expand Up @@ -174,7 +174,7 @@ def loadAlgorithms(self):
pansharp(),
# rasterize(),
ExtractProjection(),
# rasterize_over(),
rasterize_over(),
# ----- OGR tools -----
Buffer(),
ClipVectorByExtent(),
Expand Down
73 changes: 49 additions & 24 deletions python/plugins/processing/algs/gdal/rasterize_over.py
Expand Up @@ -21,38 +21,59 @@
__date__ = 'September 2013'
__copyright__ = '(C) 2013, Alexander Bruy'

import os
# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'

from qgis.core import QgsProcessingUtils
import os

from qgis.PyQt.QtGui import QIcon

from qgis.core import (QgsRasterFileWriter,
QgsProcessingParameterDefinition,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterField,
QgsProcessingParameterRasterLayer,
QgsProcessingParameterNumber,
QgsProcessingParameterString,
QgsProcessingParameterEnum,
QgsProcessingParameterExtent,
QgsProcessingParameterBoolean,
QgsProcessingParameterRasterDestination)
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
from processing.algs.gdal.GdalUtils import GdalUtils

from processing.tools import dataobjects

pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]


class rasterize_over(GdalAlgorithm):

INPUT = 'INPUT'
INPUT_RASTER = 'INPUT_RASTER'
FIELD = 'FIELD'

def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'rasterize.png'))
INPUT_RASTER = 'INPUT_RASTER'
ADD = 'ADD'

def __init__(self):
super().__init__()

def initAlgorithm(self, config=None):
self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer')))
self.addParameter(ParameterTableField(self.FIELD,
self.tr('Attribute field'), self.INPUT))
self.addParameter(ParameterRaster(self.INPUT_RASTER,
self.tr('Existing raster layer'), False))
self.units = [self.tr("Pixels"),
self.tr("Georeferenced units")]

self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
self.tr('Input vector layer')))
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT_RASTER, self.tr('Input raster layer')))
self.addParameter(QgsProcessingParameterField(self.FIELD,
self.tr('Field to use for a burn-in value'),
None,
self.INPUT,
QgsProcessingParameterField.Numeric,
optional=False))
add_param = QgsProcessingParameterBoolean(self.ADD,
self.tr('Adds the new value to the existing raster'),
defaultValue=False)
add_param.setFlags(add_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(add_param)

def name(self):
return 'rasterize_over'
Expand All @@ -66,24 +87,28 @@ def group(self):
def groupId(self):
return 'vectorconversion'

def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'rasterize.png'))

def commandName(self):
return 'gdal_rasterize'

def getConsoleCommands(self, parameters, context, feedback, executing=True):
context = dataobjects.createContext()
inLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
inRasterLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT_RASTER), context)
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing)
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT_RASTER, context)

arguments = ['-l']
arguments.append(layerName)

ogrLayer = GdalUtils.ogrConnectionStringFromLayer(inLayer)
ogrRasterLayer = GdalUtils.ogrConnectionStringFromLayer(inRasterLayer)
fieldName = self.parameterAsString(parameters, self.FIELD, context)
if fieldName:
arguments.append('-a')
arguments.append(fieldName)

arguments = []
arguments.append('-a')
arguments.append(str(self.getParameterValue(self.FIELD)))
if self.parameterAsBool(parameters, self.ADD, context):
arguments.append('-add')

arguments.append('-l')
arguments.append(GdalUtils.ogrLayerName(inLayer))
arguments.append(ogrLayer)
arguments.append(ogrRasterLayer)
arguments.append(inLayer.source())

return [self.commandName(), GdalUtils.escapeAndJoin(arguments)]

0 comments on commit ee8151a

Please sign in to comment.