[Qgis-developer] Creating a new raster qith QgsRasterLayer?

Radim Blazek radim.blazek at gmail.com
Tue Dec 11 07:18:42 PST 2012


On Tue, Dec 11, 2012 at 2:23 PM, G. Allegri <giohappy at gmail.com> wrote:
>>
>> Yes, you are right. Any class inheriting from QgsRasterInterface may
>> be plugged into the QgsRasterPipe but all interfaces will be in a
>> single line, no forks.
>
>
> Ok, Radim, I'm sorry if I insist on this, it's just to understand it
> correctly.
> To add a QgsRasterInterface in a QgsRasterPipe I would use
> QgsRasterPipe.insert(idx,QgsRasterInterface), but what is the
> QgsRasterInterface.setInput(QgsRasterInterface ) for?

QgsRasterInterface.setInput(QgsRasterInterface ) is used to set input,
but you dont  have to call it if you are using QgsRasterPipe because
it is called by QgsRasterPipe.insert(idx,QgsRasterInterface).

> If I set a QgsRasterInterface, which will have its own input, as the input
> for another QgsRasterInterface, I'm creating a chain of
> QgsRasterInterfaces...

Yes, QgsRasterPipe just helps you to manage such chain. It will
automatically connect the interfaces. QgsRasterPipe represents a chain
of interfaces.

Radim

> Help me to understand it...
>
> giovanni
>
>>
>>
>> BTW, you should always test if QgsRasterPipe::insert() was successful,
>> because if connection of interfaces fails, the interface is not
>> inserted. Only compatible interfaces may be connected. For example, it
>> is not possible to connect QgsSingleBandGrayRenderer to an interface
>> of ARGB32 type, because it needs numerical data as input.
>> QgsRasterResampleFilter only works with ARGB32 as input etc.
>>
>> Radim
>>
>>
>> > [1]
>> >
>> > https://github.com/qgis/Quantum-GIS/blob/master/src/core/raster/qgsrasterinterface.h#L108
>> >
>> >>
>> >>
>> >> Radim
>> >>
>> >>
>> >> > giovanni
>> >> >
>> >> >
>> >> > 2012/12/11 Radim Blazek <radim.blazek at gmail.com>
>> >> >>
>> >> >> On Tue, Dec 11, 2012 at 10:52 AM, G. Allegri <giohappy at gmail.com>
>> >> >> wrote:
>> >> >> > Until now I've mostly created vector layers on QGIS, delegating
>> >> >> > raster
>> >> >> > creation to custom GDAL utilities.
>> >> >> > Recently I looked into QgsGdalProvider and I saw that it exposes
>> >> >> > the
>> >> >> > QgsRasterDataProvider::Create capability.
>> >> >> > I wonder if it's possible to create a brand new raster (geotiff or
>> >> >> > what
>> >> >> > else) using this provider and, in case, what is the right workflow
>> >> >> > to
>> >> >> > do
>> >> >> > that. I haven't found examples of doing it...
>> >> >>
>> >> >> Yes it is possible. You can use a provider directly
>> >> >>
>> >> >> QgsRasterDataProvider * provider = ( QgsRasterDataProvider*
>> >> >> )QgsProviderRegistry::instance()->provider( "gdal", dataSource );
>> >> >> provider->write( data, band, width, height, xOffset, yOffset )
>> >> >>
>> >> >> if you your algorithm implemented as QgsRasterInterface you can use
>> >> >> higher level QgsRasterFileWriter which will do the work splitting
>> >> >> raster into parts
>> >> >>
>> >> >> QgsRasterPipe* pipe = new QgsRasterPipe();
>> >> >> pipe->set( inputProvider->clone() );
>> >> >> pipe->insert( 1, yourInterface );
>> >> >> QgsRasterFileWriter fileWriter( fileName );
>> >> >> fileWriter.writeRaster( pipe, width, height, extent, crs );
>> >> >>
>> >> >> Radim
>> >> >>
>> >> >>
>> >> >> > giovanni
>> >> >> >
>> >> >> > _______________________________________________
>> >> >> > Qgis-developer mailing list
>> >> >> > Qgis-developer at lists.osgeo.org
>> >> >> > http://lists.osgeo.org/mailman/listinfo/qgis-developer
>> >> >> >
>> >> >
>> >> >
>> >
>> >
>
>


More information about the Qgis-developer mailing list