// static function H5::H5File *KEADataset::CreateLL( const char * pszFilename, int nXSize, int nYSize, int nBands, GDALDataType eType, char ** papszParmList ) { GDALDriverH hDriver = GDALGetDriverByName( "KEA" ); if( ( hDriver == NULL ) || !GDALValidateCreationOptions( hDriver, papszParmList ) ) { CPLError( CE_Failure, CPLE_OpenFailed, "Attempt to create file `%s' failed. Invalid creation option(s)\n", pszFilename); return NULL; } // process any creation options in papszParmList // default value unsigned int nimageblockSize = kealib::KEA_IMAGE_CHUNK_SIZE; // see if they have provided a different value const char *pszValue = CSLFetchNameValue( papszParmList, "IMAGEBLOCKSIZE" ); if( pszValue != NULL ) nimageblockSize = (unsigned int) atol( pszValue ); unsigned int nattblockSize = kealib::KEA_ATT_CHUNK_SIZE; pszValue = CSLFetchNameValue( papszParmList, "ATTBLOCKSIZE" ); if( pszValue != NULL ) nattblockSize = (unsigned int) atol( pszValue ); unsigned int nmdcElmts = kealib::KEA_MDC_NELMTS; pszValue = CSLFetchNameValue( papszParmList, "MDC_NELMTS" ); if( pszValue != NULL ) nmdcElmts = (unsigned int) atol( pszValue ); hsize_t nrdccNElmts = kealib::KEA_RDCC_NELMTS; pszValue = CSLFetchNameValue( papszParmList, "RDCC_NELMTS" ); if( pszValue != NULL ) nrdccNElmts = (unsigned int) atol( pszValue ); hsize_t nrdccNBytes = kealib::KEA_RDCC_NBYTES; pszValue = CSLFetchNameValue( papszParmList, "RDCC_NBYTES" ); if( pszValue != NULL ) nrdccNBytes = (unsigned int) atol( pszValue ); double nrdccW0 = kealib::KEA_RDCC_W0; pszValue = CSLFetchNameValue( papszParmList, "RDCC_W0" ); if( pszValue != NULL ) nrdccW0 = CPLAtof( pszValue ); hsize_t nsieveBuf = kealib::KEA_SIEVE_BUF; pszValue = CSLFetchNameValue( papszParmList, "SIEVE_BUF" ); if( pszValue != NULL ) nsieveBuf = (unsigned int) atol( pszValue ); hsize_t nmetaBlockSize = kealib::KEA_META_BLOCKSIZE; pszValue = CSLFetchNameValue( papszParmList, "META_BLOCKSIZE" ); if( pszValue != NULL ) nmetaBlockSize = (unsigned int) atol( pszValue ); unsigned int ndeflate = kealib::KEA_DEFLATE; pszValue = CSLFetchNameValue( papszParmList, "DEFLATE" ); if( pszValue != NULL ) ndeflate = (unsigned int) atol( pszValue ); kealib::KEADataType keaDataType = GDAL_to_KEA_Type( eType ); if( nBands > 0 && keaDataType == kealib::kea_undefined ) { CPLError( CE_Failure, CPLE_NotSupported, "Data type %s not supported in KEA", GDALGetDataTypeName(eType) ); return NULL; } try { // now create it H5::H5File *keaImgH5File = kealib::KEAImageIO::createKEAImage( pszFilename, keaDataType, nXSize, nYSize, nBands, NULL, NULL, nimageblockSize, nattblockSize, nmdcElmts, nrdccNElmts, nrdccNBytes, nrdccW0, nsieveBuf, nmetaBlockSize, ndeflate ); return keaImgH5File; } catch (kealib::KEAIOException &e) { CPLError( CE_Failure, CPLE_OpenFailed, "Attempt to create file `%s' failed. Error: %s\n", pszFilename, e.what() ); return NULL; } }
CPLErr RasterliteDataset::IBuildOverviews( const char * pszResampling, int nOverviews, int * panOverviewList, int nBands, int * panBandList, GDALProgressFunc pfnProgress, void * pProgressData ) { CPLErr eErr = CE_None; if (nLevel != 0) { CPLError(CE_Failure, CPLE_AppDefined, "Overviews can only be computed on the base dataset"); return CE_Failure; } if (osTableName.size() == 0) return CE_Failure; /* -------------------------------------------------------------------- */ /* If we don't have read access, then create the overviews */ /* externally. */ /* -------------------------------------------------------------------- */ if( GetAccess() != GA_Update ) { CPLDebug( "Rasterlite", "File open for read-only accessing, " "creating overviews externally." ); if (nResolutions != 1) { CPLError(CE_Failure, CPLE_NotSupported, "Cannot add external overviews to a " "dataset with internal overviews"); return CE_Failure; } bCheckForExistingOverview = FALSE; eErr = GDALDataset::IBuildOverviews( pszResampling, nOverviews, panOverviewList, nBands, panBandList, pfnProgress, pProgressData ); bCheckForExistingOverview = TRUE; return eErr; } /* -------------------------------------------------------------------- */ /* If zero overviews were requested, we need to clear all */ /* existing overviews. */ /* -------------------------------------------------------------------- */ if (nOverviews == 0) { return CleanOverviews(); } if( nBands != GetRasterCount() ) { CPLError( CE_Failure, CPLE_NotSupported, "Generation of overviews in RASTERLITE only" " supported when operating on all bands.\n" "Operation failed.\n" ); return CE_Failure; } const char* pszOvrOptions = CPLGetConfigOption("RASTERLITE_OVR_OPTIONS", NULL); char** papszOptions = (pszOvrOptions) ? CSLTokenizeString2( pszOvrOptions, ",", 0) : NULL; GDALValidateCreationOptions( GetDriver(), papszOptions); int i; for(i=0;i<nOverviews && eErr == CE_None;i++) { if (panOverviewList[i] <= 1) continue; eErr = CleanOverviewLevel(panOverviewList[i]); if (eErr == CE_None) eErr = CreateOverviewLevel(pszResampling, panOverviewList[i], papszOptions, pfnProgress, pProgressData); ReloadOverviews(); } CSLDestroy(papszOptions); return eErr; }