[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