On Fri, 18 Feb 2022 at 02:22, C Hamilton <adenacult...@gmail.com> wrote:
>
> I am thinking of adding an algorithm that automates the creation of a density 
> heat map of a point vector layer by the following steps.
> 1. Call the "Create grid" algorithm.
> 2. Call the "Count points in polygon" algorithm.
> 3. Style it with "Graduated" style and choose a gradient from a selection of 
> heatmaps. This would need to be able to automatically scale to the min and 
> max values and allow the user to select the mode.
>
> All except for the last can be easily modeled in QGIS; however, there is no 
> color ramp QgsProcessingParameter for a heatmap.Is there a way to use 
> QgsProcessingParameterEnum to display a gradient image. Is there a QGIS API 
> call that would retrieve a set of gradients that could be added to the 
> QgsProcessingParameterEnum?

My approach would be:

1. Get a list of all color ramp names via
QgsStyle.defaultStyle().colorRampNames()
2. Use a QgsProcessingParameterString parameter for the color ramp
name instead of a QgsProcessingParameterEnum, and use the approach
described at 
https://qgis.org/pyqgis/master/core/QgsProcessingParameterString.html#qgis.core.QgsProcessingParameterString
to show the parameter as a combobox containing only the existing color
ramp names.

i.e.

ramp_names = QgsStyle.defaultStyle().colorRampNames()
ramp_name_param = QgsProcessingParameterString('RAMP_NAME', 'Color ramp name')
ramp_name_param.setMetadata( {'widget_wrapper': {'value_hints': ramp_names } } )
self.addParameter(ramp_name_param)

Why use a string parameter instead of an enum? Well, the enum
parameters are designed for a fixed set of choices which are
internally all referred to by their numerical index. It works well for
choices which are static, and which won't ever vary
installation-by-installation. But color ramps WILL vary install by
install, as users may have renamed/added/removed ramps. So the
numerical indexes of different ramps won't necessarily match across
different installs. Ultimately, if another script/process/model uses
your algorithm and has a hard coded value for this parameter, of say
"5", corresponding to a desired color ramp on the developers machine,
then different users will get totally different ramps corresponding to
this value!

With the string approach the parameter value would always be hardcoded
as a string value (the ramp name), so things remain nice and
predictable across different installations*.

Nyall

* of course, a user may still have deleted the desired color ramp, so
you should put a run-time check in your processAlgorithm step to test
whether the parameter value for RAMP_NAME is actually available in the
default style. Something like:

ramp_name = self.parameterAsString(parameters, 'RAMP_NAME', context)
ramp = QgsStyle.defaultStyle().colorRamp(ramp_name)
if ramp is None:
    raise QgsProcessingException('Color ramp {} is not
available'.format(ramp_name))






>
> Any ideas would be appreciated. This can be manually done in 3 steps by 
> separately running each of the algorithms and then styling the resulting 
> vector layer, but it would be nice if it could be done with one algorithm.
>
> Thanks!!!
>
> Calvin
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to