def processAlgorithm(self, parameters, context, feedback): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) radius = self.parameterAsDouble(parameters, self.RADIUS, context) kernel_shape = self.parameterAsEnum(parameters, self.KERNEL, context) pixel_size = self.parameterAsDouble(parameters, self.PIXEL_SIZE, context) decay = self.parameterAsDouble(parameters, self.DECAY, context) output_values = self.parameterAsEnum(parameters, self.OUTPUT_VALUE, context) outputFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output_format = QgsRasterFileWriter.driverForExtension(os.path.splitext(outputFile)[1]) weight_field = self.parameterAsString(parameters, self.WEIGHT_FIELD, context) radius_field = self.parameterAsString(parameters, self.RADIUS_FIELD, context) attrs = [] kde_params = QgsKernelDensityEstimation.Parameters() kde_params.source = source kde_params.radius = radius kde_params.pixelSize = pixel_size # radius field if radius_field: kde_params.radiusField = radius_field attrs.append(source.fields().lookupField(radius_field)) # weight field if weight_field: kde_params.weightField = weight_field attrs.append(source.fields().lookupField(weight_field)) kde_params.shape = kernel_shape kde_params.decayRatio = decay kde_params.outputValues = output_values kde = QgsKernelDensityEstimation(kde_params, outputFile, output_format) if kde.prepare() != QgsKernelDensityEstimation.Success: raise QgsProcessingException( self.tr('Could not create destination layer')) request = QgsFeatureRequest() request.setSubsetOfAttributes(attrs) features = source.getFeatures(request) total = 100.0 / source.featureCount() if source.featureCount() else 0 for current, f in enumerate(features): if feedback.isCanceled(): break if kde.addFeature(f) != QgsKernelDensityEstimation.Success: feedback.reportError(self.tr('Error adding feature with ID {} to heatmap').format(f.id())) feedback.setProgress(int(current * total)) if kde.finalise() != QgsKernelDensityEstimation.Success: raise QgsProcessingException( self.tr('Could not save destination layer')) return {self.OUTPUT: outputFile}
def processAlgorithm(self, context, feedback): layer = QgsProcessingUtils.mapLayerFromString( self.getParameterValue(self.INPUT_LAYER), context) radius = self.getParameterValue(self.RADIUS) kernel_shape = self.getParameterValue(self.KERNEL) pixel_size = self.getParameterValue(self.PIXEL_SIZE) decay = self.getParameterValue(self.DECAY) output_values = self.getParameterValue(self.OUTPUT_VALUE) output = self.getOutputValue(self.OUTPUT_LAYER) output_format = raster.formatShortNameFromFileName(output) weight_field = self.getParameterValue(self.WEIGHT_FIELD) radius_field = self.getParameterValue(self.RADIUS_FIELD) attrs = [] kde_params = QgsKernelDensityEstimation.Parameters() kde_params.vectorLayer = layer kde_params.radius = radius kde_params.pixelSize = pixel_size # radius field if radius_field: kde_params.radiusField = radius_field attrs.append(layer.fields().lookupField(radius_field)) # weight field if weight_field: kde_params.weightField = weight_field attrs.append(layer.fields().lookupField(weight_field)) kde_params.shape = kernel_shape kde_params.decayRatio = decay kde_params.outputValues = output_values kde = QgsKernelDensityEstimation(kde_params, output, output_format) if kde.prepare() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not create destination layer')) request = QgsFeatureRequest() request.setSubsetOfAttributes(attrs) features = QgsProcessingUtils.getFeatures(layer, context, request) total = 100.0 / QgsProcessingUtils.featureCount(layer, context) for current, f in enumerate(features): if kde.addFeature(f) != QgsKernelDensityEstimation.Success: QgsMessageLog.logMessage( self.tr( 'Error adding feature with ID {} to heatmap').format( f.id()), self.tr('Processing'), QgsMessageLog.CRITICAL) feedback.setProgress(int(current * total)) if kde.finalise() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not save destination layer'))
def processAlgorithm(self, progress): layer = dataobjects.getObjectFromUri( self.getParameterValue(self.INPUT_LAYER)) radius = self.getParameterValue(self.RADIUS) kernel_shape = self.getParameterValue(self.KERNEL) pixel_size = self.getParameterValue(self.PIXEL_SIZE) decay = self.getParameterValue(self.DECAY) output_values = self.getParameterValue(self.OUTPUT_VALUE) output = self.getOutputValue(self.OUTPUT_LAYER) output_format = raster.formatShortNameFromFileName(output) weight_field = self.getParameterValue(self.WEIGHT_FIELD) radius_field = self.getParameterValue(self.RADIUS_FIELD) attrs = [] kde_params = QgsKernelDensityEstimation.Parameters() kde_params.vectorLayer = layer kde_params.radius = radius kde_params.pixelSize = pixel_size # radius field if radius_field: kde_params.radiusField = radius_field attrs.append(layer.fields().lookupField(radius_field)) # weight field if weight_field: kde_params.weightField = weight_field attrs.append(layer.fields().lookupField(weight_field)) kde_params.shape = kernel_shape kde_params.decayRatio = decay kde_params.outputValues = output_values kde = QgsKernelDensityEstimation(kde_params, output, output_format) if kde.prepare() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not create destination layer')) request = QgsFeatureRequest() request.setSubsetOfAttributes(attrs) features = vector.features(layer, request) total = 100.0 / len(features) for current, f in enumerate(features): if kde.addFeature(f) != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Error adding feature to heatmap')) progress.setPercentage(int(current * total)) if kde.finalise() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not save destination layer'))
def processAlgorithm(self, parameters, context, feedback): layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT_LAYER), context) radius = self.getParameterValue(self.RADIUS) kernel_shape = self.getParameterValue(self.KERNEL) pixel_size = self.getParameterValue(self.PIXEL_SIZE) decay = self.getParameterValue(self.DECAY) output_values = self.getParameterValue(self.OUTPUT_VALUE) output = self.getOutputValue(self.OUTPUT_LAYER) output_format = raster.formatShortNameFromFileName(output) weight_field = self.getParameterValue(self.WEIGHT_FIELD) radius_field = self.getParameterValue(self.RADIUS_FIELD) attrs = [] kde_params = QgsKernelDensityEstimation.Parameters() kde_params.vectorLayer = layer kde_params.radius = radius kde_params.pixelSize = pixel_size # radius field if radius_field: kde_params.radiusField = radius_field attrs.append(layer.fields().lookupField(radius_field)) # weight field if weight_field: kde_params.weightField = weight_field attrs.append(layer.fields().lookupField(weight_field)) kde_params.shape = kernel_shape kde_params.decayRatio = decay kde_params.outputValues = output_values kde = QgsKernelDensityEstimation(kde_params, output, output_format) if kde.prepare() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not create destination layer')) request = QgsFeatureRequest() request.setSubsetOfAttributes(attrs) features = QgsProcessingUtils.getFeatures(layer, context, request) total = 100.0 / QgsProcessingUtils.featureCount(layer, context) for current, f in enumerate(features): if kde.addFeature(f) != QgsKernelDensityEstimation.Success: QgsMessageLog.logMessage(self.tr('Error adding feature with ID {} to heatmap').format(f.id()), self.tr('Processing'), QgsMessageLog.CRITICAL) feedback.setProgress(int(current * total)) if kde.finalise() != QgsKernelDensityEstimation.Success: raise GeoAlgorithmExecutionException( self.tr('Could not save destination layer'))