[Qgis-developer] How to load a colour table on a raster,
programmatically (in python)?
Benoit de Cabissole
benoit at exigesa.com
Mon Aug 9 12:22:45 EDT 2010
Martin,
Solved GDAL 1.7 access on OSGeo4W thanks to Duarte and started again to test
thanks to the latest release (r14026) but still unable to produce the
colormap!
Here is the code I'm using:
# tell the layer to use a QgsColorRampShader function
theLayer.setColorShadingAlgorithm( QgsRasterLayer.ColorRampShader )
theLayer.rasterShader().setRasterShaderFunction( QgsColorRampShader() )
# get the raster shader function: should be a QgsColorRampShader
myColorRampShader = theLayer.rasterShader().rasterShaderFunction()
# set parameter for the QgsColorRampShader function
myColorRampShader.setColorRampItemList( theTBL )
myColorRampShader.setMaximumColorCacheSize( nColo )
myColorRampShader.setColorRampType( myColorRampShader.DISCRETE )
# feed my custom QgsColorRampShader back to the raster
theLayer.setRasterShaderFunction( myColorRampShader )
It does not produce an error but raster does not change to the given
colormap. Furthermore on quitting QGIS it bombs out (access violation, from
debug).
Do you have an idea of what I'm doing wrong? I've tried to base the code on
the 'Apply' C++ code on the qgsrasterlayerproperties.cpp file.
The original code below produced an "Access violation - no RTTI data" error
without doing anything. Do you know the meaning of that error? Is there a
wiki of the meaning of all errors in QGIS?
Thanks all for your help,
Benoit
> -----Original Message-----
> From: Martin Dobias [mailto:wonder.sk at gmail.com]
> Sent: Saturday, 07 August 2010 17:10
> To: benoit at exigesa.com
> Cc: qgis-developer at lists.osgeo.org
> Subject: Re: [Qgis-developer] How to load a colour table on a raster,
> programmatically (in python)?
>
>
> On Fri, Aug 6, 2010 at 2:43 PM, Benoit de Cabissole
> <benoit at exigesa.com> wrote:
> > I've tried many combinations around the following code:
> >.
> > [...]
> > 129 theLayer.rasterShader().setRasterShaderFunction(
> > QgsColorRampShader() )
> > 130 theLayer.setRasterShaderFunction( QgsColorRampShader() )
> > 131 myColorRampShader = QgsColorRampShader()
> > 132 myColorRampShader.setColorRampItemList( theTBL )
> > 133 myColorRampShader.setMaximumColorCacheSize( nColo )
> > 134 myColorRampShader.setColorRampType( myColorRampShader.DISCRETE )
> > 135 theLayer.rasterShader().setRasterShaderFunction(
> myColorRampShader )
> > 136 theLayer.setRasterShaderFunction( myColorRampShader )
>
> Hi Benoit,
>
> I've took a look at the problem at it turned out there were actually
> two problems with python wrappers. I've fixed that in svn - r14022.
> From that revision, things should werk correctly. You should be able
> to either:
> - create an instance of shader function and assign it to raster layer
> without a crash
> - retrieve current raster shader function and modify it (previously
> always the base class QgsRasterShaderFunction was returned)
>
> Regards
> Martin
More information about the Qgis-developer
mailing list