Tim Keitt wrote:
How about:
Tim, I don't really like! I think instead it would be better to have a method/function to copy a variety of types of metadata - possibly taking some flags to control what should be copied. Perhaps something that works similar to the GDALPamDataset::CloneInfo() and GDALPamRasterBand::CloneInfo() methods? There is value in a helper to copy the various sorts of metadata (including georeferencing, color tables, etc) but there are also a wide variety of situations for use and it is hard to make something that serves most or all of them. I have, till now, tried to avoid baking anything into the standard api for this because I couldn't really wrap my head around a sufficiently general, yet not too complicated arrangement. BTW, why did you ignore GCPs, and RPCs in your ShallowCopy() suggestion? Best regards,
/************************************************************************/ /* 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; }
-- ---------------------------------------+-------------------------------------- I set the clouds in motion - turn up | Frank Warmerdam, warmer...@pobox.com light and sound - activate the windows | http://pobox.com/~warmerdam and watch the world go round - Rush | Geospatial Programmer for Rent _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev