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

Radim Blazek radim.blazek at gmail.com
Tue Dec 11 04:22:39 PST 2012


On Tue, Dec 11, 2012 at 12:23 PM, G. Allegri <giohappy at gmail.com> wrote:
> Thanks Radim, I wasn't aware of all these news in trunk!
> The QgsRasterPipe is really powerful.
>
> Is there some doc about it?
> I've run through the code to understand the logic behind QgsRasterPipe (QRP)
> and QgsRasterInterface (QRI).
> I see that for a QRI must be set a an input QRI (setInput method). If I
> understand it correctly a QRP can have various "branches" made by sequences
> of QRI?

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.

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