[gdal-dev] Create copy without any bands

Tim Keitt tkeitt at gmail.com
Sat Aug 21 13:24:11 EDT 2010


How about:

/************************************************************************/
/*                         ShallowCopy()                                */
/************************************************************************/

GDALDataset *GDALDriver::ShallowCopy( const char * pszFilename,
                                      GDALDataset * poSrcDS,
                                      GDALDataType etype, int nBands,
                                      int bStrict, char ** papszOptions,
                                      GDALProgressFunc pfnProgress )

{
    if( pfnProgress == NULL )
        pfnProgress = GDALDummyProgress;

/* -------------------------------------------------------------------- */
/*      Create destination dataset.                                     */
/* -------------------------------------------------------------------- */
    GDALDataset  *poDstDS;
    int          nXSize = poSrcDS->GetRasterXSize();
    int          nYSize = poSrcDS->GetRasterYSize();
    CPLErr       eErr;

    CPLDebug( "GDAL", "Using default GDALDriver::CreateCopy implementation." );

    if( !pfnProgress( 0.0, NULL, pProgressData ) )
    {
        CPLError( CE_Failure, CPLE_UserInterrupt, "User terminated" );
        return NULL;
    }

    poDstDS = Create( pszFilename, nXSize, nYSize, nBands, eType,
papszOptions );

    if( poDstDS == NULL )
        return NULL;

/* -------------------------------------------------------------------- */
/*      Try setting the projection and geotransform if it seems         */
/*      suitable.  For now we don't try and copy GCPs, though I         */
/*      suppose we should. Also copy metadata.                          */
/* -------------------------------------------------------------------- */
    double      adfGeoTransform[6];

    if( poSrcDS->GetGeoTransform( adfGeoTransform ) == CE_None
        && (adfGeoTransform[0] != 0.0
            || adfGeoTransform[1] != 1.0
            || adfGeoTransform[2] != 0.0
            || adfGeoTransform[3] != 0.0
            || adfGeoTransform[4] != 0.0
            || adfGeoTransform[5] != 1.0) )
    {
        poDstDS->SetGeoTransform( adfGeoTransform );
    }

    if( poSrcDS->GetProjectionRef() != NULL
        && strlen(poSrcDS->GetProjectionRef()) > 0 )
    {
        poDstDS->SetProjection( poSrcDS->GetProjectionRef() );
    }

    poDstDS->SetMetadata( poSrcDS->GetMetadata() );

    return poDstDS;
}


On Sat, Aug 21, 2010 at 7:14 PM, Tim Keitt <tkeitt at gmail.com> wrote:
> OK. I found the source. Yes, that is fairly straightforward to copy and modify.
>
> It seems making a copy without propagating the raster bands would be
> very common operation. Would it make sense to introduce a new function
> to GDAL? ShallowCopy?
>
> THK
>
> On Sat, Aug 21, 2010 at 7:05 PM, Tim Keitt <tkeitt at gmail.com> wrote:
>> I noticed DefaultCreateCopy, but appears not to be documented. At
>> least there is no click through link in the class reference. What does
>> it do? How is it modified? In the driver code?
>>
>> THK
>>
>> On Sat, Aug 21, 2010 at 7:00 PM, Chaitanya kumar CH
>> <chaitanya.ch at gmail.com> wrote:
>>> Tim,
>>>
>>> You can create it easily by modifying GDALDriver::DefaultCreateCopy()
>>>
>>> On Sat, Aug 21, 2010 at 9:51 PM, Tim Keitt <tkeitt at gmail.com> wrote:
>>>>
>>>> I am writing a utility that takes a raster as input and outputs a
>>>> raster with all attributes the same, except that I only want one
>>>> output band and I want to specify its type independent of the data
>>>> type in the input file. Is there a function that creates a copy of a
>>>> dataset (or creates a virtual dataset), but does not copy any raster
>>>> bands? This would really simplify things as all I would have to do is
>>>> add a band to the output dataset of the desired type.
>>>>
>>>> THK
>>>>
>>>> --
>>>> Timothy H. Keitt
>>>> http://www.keittlab.org/
>>>> _______________________________________________
>>>> gdal-dev mailing list
>>>> gdal-dev at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>>>
>>>
>>>
>>> --
>>> Best regards,
>>> Chaitanya kumar CH.
>>> /tʃaɪθənjə/ /kʊmɑr/
>>> +91-9494447584
>>> 17.2416N 80.1426E
>>>
>>
>>
>>
>> --
>> Timothy H. Keitt
>> http://www.keittlab.org/
>>
>
>
>
> --
> Timothy H. Keitt
> http://www.keittlab.org/
>



-- 
Timothy H. Keitt
http://www.keittlab.org/


More information about the gdal-dev mailing list