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

Radim Blazek radim.blazek at gmail.com
Tue Dec 11 04:49:17 PST 2012


On Tue, Dec 11, 2012 at 1:29 PM, G. Allegri <giohappy at gmail.com> wrote:
>>
>> Do you mean QgsRasterInterface with multiple inputs? This is not
>> currently supported. In theory you can write an interface with
>> multiple inputs, but for example QgsRasterFileWriter is using some
>> info from srcInput, i.e. the first interface (provider) in the pipe,
>> there is no support for multiple srcInput. Most probably it would
>> work, but there some problems may appear. You could also overwrite
>> srcInput in your  QgsRasterInterface subclass in which multiple
>> branches are connected.
>
>
> Ok, but I wonder what is QgsRasterInterface.setInput [1] meant for? Is the
> input supposed to be only a QgsRasterDataProvider? If I see that it requires
> a QgsRasterInterface I think it can be whatever else QgsRasterInterface...

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.

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