这篇教程C++ GDALCheckDatasetDimensions函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中GDALCheckDatasetDimensions函数的典型用法代码示例。如果您正苦于以下问题:C++ GDALCheckDatasetDimensions函数的具体用法?C++ GDALCheckDatasetDimensions怎么用?C++ GDALCheckDatasetDimensions使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了GDALCheckDatasetDimensions函数的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: NWT_GRDDatasetGDALDataset *NWT_GRDDataset::Open( GDALOpenInfo * poOpenInfo ){ if( !Identify(poOpenInfo) ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ NWT_GRDDataset *poDS; poDS = new NWT_GRDDataset(); poDS->fp = VSIFOpenL(poOpenInfo->pszFilename, "rb"); if (poDS->fp == NULL) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ VSIFSeekL( poDS->fp, 0, SEEK_SET ); VSIFReadL( poDS->abyHeader, 1, 1024, poDS->fp ); poDS->pGrd = (NWT_GRID *) malloc(sizeof(NWT_GRID)); if (!nwt_ParseHeader( poDS->pGrd, (char *) poDS->abyHeader ) || !GDALCheckDatasetDimensions(poDS->pGrd->nXSide, poDS->pGrd->nYSide) ) { delete poDS; return NULL; } poDS->nRasterXSize = poDS->pGrd->nXSide; poDS->nRasterYSize = poDS->pGrd->nYSide;// create a colorTable // if( poDS->pGrd->iNumColorInflections > 0 ) // poDS->CreateColorTable(); nwt_LoadColors( poDS->ColorMap, 4096, poDS->pGrd );/* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->SetBand( 1, new NWT_GRDRasterBand( poDS, 1 ) ); //r poDS->SetBand( 2, new NWT_GRDRasterBand( poDS, 2 ) ); //g poDS->SetBand( 3, new NWT_GRDRasterBand( poDS, 3 ) ); //b poDS->SetBand( 4, new NWT_GRDRasterBand( poDS, 4 ) ); //z/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for external overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename, poOpenInfo->papszSiblingFiles ); return (poDS);}
开发者ID:AsherBond,项目名称:MondocosmOS,代码行数:60,
示例2: NWT_GRDDatasetGDALDataset *NWT_GRDDataset::Open( GDALOpenInfo * poOpenInfo ){/* -------------------------------------------------------------------- *//* Look for the header *//* -------------------------------------------------------------------- */ if( poOpenInfo->fp == NULL || poOpenInfo->nHeaderBytes < 50 ) return NULL; if( poOpenInfo->pabyHeader[0] != 'H' || poOpenInfo->pabyHeader[1] != 'G' || poOpenInfo->pabyHeader[2] != 'P' || poOpenInfo->pabyHeader[3] != 'C' || poOpenInfo->pabyHeader[4] != '1' ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ NWT_GRDDataset *poDS; poDS = new NWT_GRDDataset(); poDS->fp = poOpenInfo->fp; poOpenInfo->fp = NULL;/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ VSIFSeek( poDS->fp, 0, SEEK_SET ); VSIFRead( poDS->abyHeader, 1, 1024, poDS->fp ); poDS->pGrd = (NWT_GRID *) malloc(sizeof(NWT_GRID)); if (!nwt_ParseHeader( poDS->pGrd, (char *) poDS->abyHeader ) || !GDALCheckDatasetDimensions(poDS->pGrd->nXSide, poDS->pGrd->nYSide) ) { delete poDS; return NULL; } poDS->nRasterXSize = poDS->pGrd->nXSide; poDS->nRasterYSize = poDS->pGrd->nYSide;// create a colorTable // if( poDS->pGrd->iNumColorInflections > 0 ) // poDS->CreateColorTable(); nwt_LoadColors( poDS->ColorMap, 4096, poDS->pGrd );/* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->SetBand( 1, new NWT_GRDRasterBand( poDS, 1 ) ); //r poDS->SetBand( 2, new NWT_GRDRasterBand( poDS, 2 ) ); //g poDS->SetBand( 3, new NWT_GRDRasterBand( poDS, 3 ) ); //b poDS->SetBand( 4, new NWT_GRDRasterBand( poDS, 4 ) ); //z/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML(); return (poDS);}
开发者ID:actian-geospatial,项目名称:ogr-ingres,代码行数:60,
示例3: NWT_GRCDatasetGDALDataset *NWT_GRCDataset::Open( GDALOpenInfo * poOpenInfo ){/* -------------------------------------------------------------------- *//* Look for the header *//* -------------------------------------------------------------------- */ if( poOpenInfo->fp == NULL || poOpenInfo->nHeaderBytes < 50 ) return NULL; if( poOpenInfo->pabyHeader[0] != 'H' || poOpenInfo->pabyHeader[1] != 'G' || poOpenInfo->pabyHeader[2] != 'P' || poOpenInfo->pabyHeader[3] != 'C' || poOpenInfo->pabyHeader[4] != '8' ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ NWT_GRCDataset *poDS; poDS = new NWT_GRCDataset(); poDS->fp = poOpenInfo->fp; poOpenInfo->fp = NULL;/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ VSIFSeek( poDS->fp, 0, SEEK_SET ); VSIFRead( poDS->abyHeader, 1, 1024, poDS->fp ); poDS->pGrd = (NWT_GRID *) malloc( sizeof (NWT_GRID) ); poDS->pGrd->fp = poDS->fp; if (!nwt_ParseHeader( poDS->pGrd, (char *) poDS->abyHeader ) || !GDALCheckDatasetDimensions(poDS->pGrd->nXSide, poDS->pGrd->nYSide) || poDS->pGrd->stClassDict == NULL) { delete poDS; return NULL; } poDS->nRasterXSize = poDS->pGrd->nXSide; poDS->nRasterYSize = poDS->pGrd->nYSide;/* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->SetBand( 1, new NWT_GRCRasterBand( poDS, 1) ); //Class Indexes/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML(); return (poDS);}
开发者ID:actian-geospatial,项目名称:ogr-ingres,代码行数:58,
示例4: NWT_GRCDatasetGDALDataset *NWT_GRCDataset::Open( GDALOpenInfo * poOpenInfo ){ if( !Identify(poOpenInfo) ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ NWT_GRCDataset *poDS; poDS = new NWT_GRCDataset(); poDS->fp = VSIFOpenL(poOpenInfo->pszFilename, "rb"); if (poDS->fp == NULL) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ VSIFSeekL( poDS->fp, 0, SEEK_SET ); VSIFReadL( poDS->abyHeader, 1, 1024, poDS->fp ); poDS->pGrd = (NWT_GRID *) malloc( sizeof (NWT_GRID) ); poDS->pGrd->fp = poDS->fp; if (!nwt_ParseHeader( poDS->pGrd, (char *) poDS->abyHeader ) || !GDALCheckDatasetDimensions(poDS->pGrd->nXSide, poDS->pGrd->nYSide) || poDS->pGrd->stClassDict == NULL) { delete poDS; return NULL; } poDS->nRasterXSize = poDS->pGrd->nXSide; poDS->nRasterYSize = poDS->pGrd->nYSide;/* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->SetBand( 1, new NWT_GRCRasterBand( poDS, 1) ); //Class Indexes/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for external overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename, poOpenInfo->GetSiblingFiles() ); return (poDS);}
开发者ID:rashadkm,项目名称:lib_gdal,代码行数:57,
示例5: CPLErrorGDALDataset* EpsilonDataset::Open(GDALOpenInfo* poOpenInfo){ if (!Identify(poOpenInfo)) return NULL; if( poOpenInfo->eAccess == GA_Update ) { CPLError( CE_Failure, CPLE_NotSupported, "The EPSILON driver does not support update access to existing" " files./n" ); return NULL; } VSILFILE* fp = VSIFOpenL(poOpenInfo->pszFilename, "rb"); if (fp == NULL) return NULL; EpsilonDataset* poDS = new EpsilonDataset(); poDS->fp = fp; poDS->nRasterXSize = 0; poDS->nRasterYSize = 0; int nBandsToAdd = 0; if (!poDS->ScanBlocks(&nBandsToAdd)) { delete poDS; return NULL; } if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) || !GDALCheckBandCount(nBandsToAdd, FALSE)) { delete poDS; return NULL; } if (!poDS->bRegularTiling) { CPLError( CE_Failure, CPLE_NotSupported, "The EPSILON driver does not support reading " "not regularly blocked files./n" ); delete poDS; return NULL; } int i; for(i=1;i<=nBandsToAdd;i++) poDS->SetBand(i, new EpsilonRasterBand(poDS, i)); if (nBandsToAdd > 1) poDS->SetMetadataItem("INTERLEAVE", "PIXEL", "IMAGE_STRUCTURE"); return poDS;}
开发者ID:ryandavid,项目名称:rotobox,代码行数:54,
示例6: CPLDebugRawRasterBand::RawRasterBand( void * fpRaw, vsi_l_offset nImgOffset, int nPixelOffset, int nLineOffset, GDALDataType eDataType, int bNativeOrder, int nXSize, int nYSize, int bIsVSIL, int bOwnsFP ){ this->poDS = NULL; this->nBand = 1; this->eDataType = eDataType; this->bIsVSIL = bIsVSIL; this->bOwnsFP =bOwnsFP; if (bIsVSIL) { this->fpRaw = NULL; this->fpRawL = (VSILFILE*) fpRaw; } else { this->fpRaw = (FILE*) fpRaw; this->fpRawL = NULL; } this->nImgOffset = nImgOffset; this->nPixelOffset = nPixelOffset; this->nLineOffset = nLineOffset; this->bNativeOrder = bNativeOrder; CPLDebug( "GDALRaw", "RawRasterBand(floating,Off=%d,PixOff=%d,LineOff=%d,%s,%d)/n", (unsigned int) nImgOffset, nPixelOffset, nLineOffset, GDALGetDataTypeName(eDataType), bNativeOrder );/* -------------------------------------------------------------------- *//* Treat one scanline as the block size. *//* -------------------------------------------------------------------- */ nBlockXSize = nXSize; nBlockYSize = 1; nRasterXSize = nXSize; nRasterYSize = nYSize; if (!GDALCheckDatasetDimensions(nXSize, nYSize)) { pLineBuffer = NULL; return; }/* -------------------------------------------------------------------- *//* Initialize other fields, and setup the line buffer. *//* -------------------------------------------------------------------- */ Initialize();}
开发者ID:AsherBond,项目名称:MondocosmOS,代码行数:51,
示例7: CPLGetPathGDALDataset *SAGADataset::Open( GDALOpenInfo * poOpenInfo ){ /* -------------------------------------------------------------------- */ /* We assume the user is pointing to the binary (ie. .sdat) file. */ /* -------------------------------------------------------------------- */ if( !EQUAL(CPLGetExtension( poOpenInfo->pszFilename ), "sdat")) { return NULL; } CPLString osPath = CPLGetPath( poOpenInfo->pszFilename ); CPLString osName = CPLGetBasename( poOpenInfo->pszFilename ); CPLString osHDRFilename; osHDRFilename = CPLFormCIFilename( osPath, osName, ".sgrd" ); VSILFILE *fp; fp = VSIFOpenL( osHDRFilename, "r" ); if( fp == NULL ) { return NULL; } /* -------------------------------------------------------------------- */ /* Is this file a SAGA header file? Read a few lines of text */ /* searching for something starting with nrows or ncols. */ /* -------------------------------------------------------------------- */ const char *pszLine; int nRows = -1, nCols = -1; double dXmin = 0.0, dYmin = 0.0, dCellsize = 0.0, dNoData = 0.0, dZFactor = 0.0; int nLineCount = 0; char szDataFormat[20] = "DOUBLE"; char szByteOrderBig[10] = "FALSE"; char szTopToBottom[10] = "FALSE"; char **papszHDR = NULL; while( (pszLine = CPLReadLineL( fp )) != NULL ) { char **papszTokens; nLineCount++; if( nLineCount > 50 || strlen(pszLine) > 1000 ) break; papszHDR = CSLAddString( papszHDR, pszLine ); papszTokens = CSLTokenizeStringComplex( pszLine, " =", TRUE, FALSE ); if( CSLCount( papszTokens ) < 2 ) { CSLDestroy( papszTokens ); continue; } if( EQUALN(papszTokens[0],"CELLCOUNT_X",strlen("CELLCOUNT_X")) ) nCols = atoi(papszTokens[1]); else if( EQUALN(papszTokens[0],"CELLCOUNT_Y",strlen("CELLCOUNT_Y")) ) nRows = atoi(papszTokens[1]); else if( EQUALN(papszTokens[0],"POSITION_XMIN",strlen("POSITION_XMIN")) ) dXmin = CPLAtofM(papszTokens[1]); else if( EQUALN(papszTokens[0],"POSITION_YMIN",strlen("POSITION_YMIN")) ) dYmin = CPLAtofM(papszTokens[1]); else if( EQUALN(papszTokens[0],"CELLSIZE",strlen("CELLSIZE")) ) dCellsize = CPLAtofM(papszTokens[1]); else if( EQUALN(papszTokens[0],"NODATA_VALUE",strlen("NODATA_VALUE")) ) dNoData = CPLAtofM(papszTokens[1]); else if( EQUALN(papszTokens[0],"DATAFORMAT",strlen("DATAFORMAT")) ) strncpy( szDataFormat, papszTokens[1], sizeof(szDataFormat)-1 ); else if( EQUALN(papszTokens[0],"BYTEORDER_BIG",strlen("BYTEORDER_BIG")) ) strncpy( szByteOrderBig, papszTokens[1], sizeof(szByteOrderBig)-1 ); else if( EQUALN(papszTokens[0],"TOPTOBOTTOM",strlen("TOPTOBOTTOM")) ) strncpy( szTopToBottom, papszTokens[1], sizeof(szTopToBottom)-1 ); else if( EQUALN(papszTokens[0],"Z_FACTOR",strlen("Z_FACTOR")) ) dZFactor = CPLAtofM(papszTokens[1]); CSLDestroy( papszTokens ); } VSIFCloseL( fp ); CSLDestroy( papszHDR ); /* -------------------------------------------------------------------- */ /* Did we get the required keywords? If not we return with */ /* this never having been considered to be a match. This isn't */ /* an error! */ /* -------------------------------------------------------------------- */ if( nRows == -1 || nCols == -1 ) { return NULL; } if (!GDALCheckDatasetDimensions(nCols, nRows)) { return NULL;//.........这里部分代码省略.........
开发者ID:Mofangbao,项目名称:node-gdal,代码行数:101,
示例8: osOriginalFilenameGDALDataset *HF2Dataset::Open( GDALOpenInfo * poOpenInfo ){ CPLString osOriginalFilename(poOpenInfo->pszFilename); if (!Identify(poOpenInfo)) return NULL; GDALOpenInfo* poOpenInfoToDelete = NULL; /* GZipped .hf2 files are common, so automagically open them */ /* if the /vsigzip/ has not been explicitly passed */ CPLString osFilename(poOpenInfo->pszFilename); if ((EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "hfz") || (strlen(poOpenInfo->pszFilename) > 6 && EQUAL(poOpenInfo->pszFilename + strlen(poOpenInfo->pszFilename) - 6, "hf2.gz"))) && !EQUALN(poOpenInfo->pszFilename, "/vsigzip/", 9)) { osFilename = "/vsigzip/"; osFilename += poOpenInfo->pszFilename; poOpenInfo = poOpenInfoToDelete = new GDALOpenInfo(osFilename.c_str(), GA_ReadOnly, poOpenInfo->GetSiblingFiles()); }/* -------------------------------------------------------------------- *//* Parse header *//* -------------------------------------------------------------------- */ int nXSize, nYSize; memcpy(&nXSize, poOpenInfo->pabyHeader + 6, 4); CPL_LSBPTR32(&nXSize); memcpy(&nYSize, poOpenInfo->pabyHeader + 10, 4); CPL_LSBPTR32(&nYSize); GUInt16 nTileSize; memcpy(&nTileSize, poOpenInfo->pabyHeader + 14, 2); CPL_LSBPTR16(&nTileSize); float fVertPres, fHorizScale; memcpy(&fVertPres, poOpenInfo->pabyHeader + 16, 4); CPL_LSBPTR32(&fVertPres); memcpy(&fHorizScale, poOpenInfo->pabyHeader + 20, 4); CPL_LSBPTR32(&fHorizScale); GUInt32 nExtendedHeaderLen; memcpy(&nExtendedHeaderLen, poOpenInfo->pabyHeader + 24, 4); CPL_LSBPTR32(&nExtendedHeaderLen); delete poOpenInfoToDelete; poOpenInfoToDelete = NULL; if (nTileSize < 8) return NULL; if (nXSize <= 0 || nXSize > INT_MAX - nTileSize || nYSize <= 0 || nYSize > INT_MAX - nTileSize) return NULL; /* To avoid later potential int overflows */ if (nExtendedHeaderLen > 1024 * 65536) return NULL; if (!GDALCheckDatasetDimensions(nXSize, nYSize)) { return NULL; }/* -------------------------------------------------------------------- *//* Parse extended blocks *//* -------------------------------------------------------------------- */ VSILFILE* fp = VSIFOpenL(osFilename.c_str(), "rb"); if (fp == NULL) return NULL; VSIFSeekL(fp, 28, SEEK_SET); int bHasExtent = FALSE; double dfMinX = 0, dfMaxX = 0, dfMinY = 0, dfMaxY = 0; int bHasUTMZone = FALSE; GInt16 nUTMZone = 0; int bHasEPSGDatumCode = FALSE; GInt16 nEPSGDatumCode = 0; int bHasEPSGCode = FALSE; GInt16 nEPSGCode = 0; int bHasRelativePrecision = FALSE; float fRelativePrecision = 0; char szApplicationName[256]; szApplicationName[0] = 0; GUInt32 nExtendedHeaderOff = 0; while(nExtendedHeaderOff < nExtendedHeaderLen) { char pabyBlockHeader[24]; VSIFReadL(pabyBlockHeader, 24, 1, fp); char szBlockName[16 + 1]; memcpy(szBlockName, pabyBlockHeader + 4, 16); szBlockName[16] = 0; GUInt32 nBlockSize; memcpy(&nBlockSize, pabyBlockHeader + 20, 4); CPL_LSBPTR32(&nBlockSize);//.........这里部分代码省略.........
开发者ID:MattLatt,项目名称:GDAL_2.0.x_VC,代码行数:101,
示例9: GTXDatasetGDALDataset *GTXDataset::Open( GDALOpenInfo * poOpenInfo ){ if( !Identify( poOpenInfo ) ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ GTXDataset *poDS = new GTXDataset(); poDS->eAccess = poOpenInfo->eAccess;/* -------------------------------------------------------------------- *//* Open the file. *//* -------------------------------------------------------------------- */ if( poOpenInfo->eAccess == GA_ReadOnly ) poDS->fpImage = VSIFOpenL( poOpenInfo->pszFilename, "rb" ); else poDS->fpImage = VSIFOpenL( poOpenInfo->pszFilename, "rb+" ); if( poDS->fpImage == NULL ) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ poDS->adfGeoTransform[2] = 0.0; poDS->adfGeoTransform[4] = 0.0; CPL_IGNORE_RET_VAL(VSIFReadL( poDS->adfGeoTransform+3, 8, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( poDS->adfGeoTransform+0, 8, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( poDS->adfGeoTransform+5, 8, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( poDS->adfGeoTransform+1, 8, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &(poDS->nRasterYSize), 4, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &(poDS->nRasterXSize), 4, 1, poDS->fpImage )); CPL_MSBPTR32( &(poDS->nRasterYSize) ); CPL_MSBPTR32( &(poDS->nRasterXSize) ); CPL_MSBPTR64( poDS->adfGeoTransform + 0 ); CPL_MSBPTR64( poDS->adfGeoTransform + 1 ); CPL_MSBPTR64( poDS->adfGeoTransform + 3 ); CPL_MSBPTR64( poDS->adfGeoTransform + 5 ); poDS->adfGeoTransform[3] += poDS->adfGeoTransform[5] * (poDS->nRasterYSize-1); poDS->adfGeoTransform[0] -= poDS->adfGeoTransform[1] * 0.5; poDS->adfGeoTransform[3] += poDS->adfGeoTransform[5] * 0.5; poDS->adfGeoTransform[5] *= -1; if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Guess the data type. Since October 1, 2009, it should be *//* Float32. Before it was double. *//* -------------------------------------------------------------------- */ CPL_IGNORE_RET_VAL(VSIFSeekL(poDS->fpImage, 0, SEEK_END)); const vsi_l_offset nSize = VSIFTellL(poDS->fpImage); GDALDataType eDT = GDT_Float32; if( nSize == 40 + 8 * static_cast<vsi_l_offset>(poDS->nRasterXSize) * poDS->nRasterYSize ) eDT = GDT_Float64; const int nDTSize = GDALGetDataTypeSizeBytes(eDT);/* -------------------------------------------------------------------- *//* Create band information object. *//* -------------------------------------------------------------------- */ RawRasterBand *poBand = new RawRasterBand( poDS, 1, poDS->fpImage, (poDS->nRasterYSize-1) * poDS->nRasterXSize*nDTSize + 40, nDTSize, poDS->nRasterXSize * -nDTSize, eDT, !CPL_IS_LSB, TRUE, FALSE ); poBand->SetNoDataValue( -88.8888 ); poDS->SetBand( 1, poBand );/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for overviews. *///.........这里部分代码省略.........
开发者ID:ryandavid,项目名称:rotobox,代码行数:101,
示例10: VSIFOpenL//.........这里部分代码省略......... { CSLDestroy( papszHeader ); CPLError( CE_Failure, CPLE_NotSupported, "The NDF driver does not support update access to existing" " datasets./n" ); return NULL; } /* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ NDFDataset *poDS; poDS = new NDFDataset(); poDS->papszHeader = papszHeader; poDS->nRasterXSize = atoi(poDS->Get("PIXELS_PER_LINE","")); poDS->nRasterYSize = atoi(poDS->Get("LINES_PER_DATA_FILE",""));/* -------------------------------------------------------------------- *//* Create a raw raster band for each file. *//* -------------------------------------------------------------------- */ int iBand; const char* pszBand = CSLFetchNameValue(papszHeader, "NUMBER_OF_BANDS_IN_VOLUME"); if (pszBand == NULL) { CPLError(CE_Failure, CPLE_AppDefined, "Cannot find band count"); delete poDS; return NULL; } int nBands = atoi(pszBand); if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) || !GDALCheckBandCount(nBands, FALSE)) { delete poDS; return NULL; } for( iBand = 0; iBand < nBands; iBand++ ) { char szKey[100]; CPLString osFilename; sprintf( szKey, "BAND%d_FILENAME", iBand+1 ); osFilename = poDS->Get(szKey,""); // NDF1 file do not include the band filenames. if( osFilename.size() == 0 ) { char szBandExtension[15]; sprintf( szBandExtension, "I%d", iBand+1 ); osFilename = CPLResetExtension( poOpenInfo->pszFilename, szBandExtension ); } else { CPLString osBasePath = CPLGetPath(poOpenInfo->pszFilename); osFilename = CPLFormFilename( osBasePath, osFilename, NULL); } VSILFILE *fpRaw = VSIFOpenL( osFilename, "rb" ); if( fpRaw == NULL ) { CPLError( CE_Failure, CPLE_AppDefined,
开发者ID:rashadkm,项目名称:lib_gdal,代码行数:67,
示例11: DTEDOpenExGDALDataset *DTEDDataset::Open( GDALOpenInfo * poOpenInfo ){ int i; DTEDInfo *psDTED; if (!Identify(poOpenInfo) || poOpenInfo->fpL == NULL ) return NULL;/* -------------------------------------------------------------------- *//* Try opening the dataset. *//* -------------------------------------------------------------------- */ VSILFILE* fp = poOpenInfo->fpL; poOpenInfo->fpL = NULL; psDTED = DTEDOpenEx( fp, poOpenInfo->pszFilename, (poOpenInfo->eAccess == GA_Update) ? "rb+" : "rb", TRUE ); if( psDTED == NULL ) return( NULL );/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ DTEDDataset *poDS; poDS = new DTEDDataset(); poDS->SetFileName(poOpenInfo->pszFilename); poDS->eAccess = poOpenInfo->eAccess; poDS->psDTED = psDTED;/* -------------------------------------------------------------------- *//* Capture some information from the file that is of interest. *//* -------------------------------------------------------------------- */ poDS->nRasterXSize = psDTED->nXSize; poDS->nRasterYSize = psDTED->nYSize; if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { delete poDS; return NULL; } /* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->nBands = 1; for( i = 0; i < poDS->nBands; i++ ) poDS->SetBand( i+1, new DTEDRasterBand( poDS, i+1 ) );/* -------------------------------------------------------------------- *//* Collect any metadata available. *//* -------------------------------------------------------------------- */ char *pszValue; pszValue = DTEDGetMetadata( psDTED, DTEDMD_VERTACCURACY_UHL ); poDS->SetMetadataItem( "DTED_VerticalAccuracy_UHL", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_VERTACCURACY_ACC ); poDS->SetMetadataItem( "DTED_VerticalAccuracy_ACC", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_SECURITYCODE_UHL ); poDS->SetMetadataItem( "DTED_SecurityCode_UHL", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_SECURITYCODE_DSI ); poDS->SetMetadataItem( "DTED_SecurityCode_DSI", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_UNIQUEREF_UHL ); poDS->SetMetadataItem( "DTED_UniqueRef_UHL", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_UNIQUEREF_DSI ); poDS->SetMetadataItem( "DTED_UniqueRef_DSI", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_DATA_EDITION ); poDS->SetMetadataItem( "DTED_DataEdition", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_MATCHMERGE_VERSION ); poDS->SetMetadataItem( "DTED_MatchMergeVersion", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_MAINT_DATE ); poDS->SetMetadataItem( "DTED_MaintenanceDate", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_MATCHMERGE_DATE ); poDS->SetMetadataItem( "DTED_MatchMergeDate", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_MAINT_DESCRIPTION ); poDS->SetMetadataItem( "DTED_MaintenanceDescription", pszValue ); CPLFree( pszValue ); pszValue = DTEDGetMetadata( psDTED, DTEDMD_PRODUCER );//.........这里部分代码省略.........
开发者ID:drownedout,项目名称:datamap,代码行数:101,
示例12: VSIFOpenL//.........这里部分代码省略......... CSLDestroy( papszTokens ); CSLDestroy( papszHDR ); VSIFCloseL( fp ); return NULL; } } else if( EQUAL(papszTokens[0],"BYTE_ORDER") ) { // M for MSB, L for LSB chByteOrder = (char) toupper(papszTokens[1][0]); } else if( EQUAL(papszTokens[0],"DATA_OFFSET") ) { nSkipBytes = atoi(papszTokens[1]); // TBD: is this mapping right? } CSLDestroy( papszTokens ); } VSIFCloseL( fp ); /* -------------------------------------------------------------------- *//* Did we get the required keywords? If not we return with *//* this never having been considered to be a match. This isn't *//* an error! *//* -------------------------------------------------------------------- */ if( nRows == -1 || nCols == -1 ) { CSLDestroy( papszHDR ); return NULL; } if (!GDALCheckDatasetDimensions(nCols, nRows) || !GDALCheckBandCount(nBands, FALSE)) { CSLDestroy( papszHDR ); return NULL; } /* -------------------------------------------------------------------- *//* Confirm the requested access is supported. *//* -------------------------------------------------------------------- */ if( poOpenInfo->eAccess == GA_Update ) { CSLDestroy( papszHDR ); CPLError( CE_Failure, CPLE_NotSupported, "The EIR driver does not support update access to existing" " datasets./n" ); return NULL; }/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ EIRDataset *poDS; poDS = new EIRDataset();/* -------------------------------------------------------------------- *//* Capture some information from the file that is of interest. *//* -------------------------------------------------------------------- */ poDS->nRasterXSize = nCols; poDS->nRasterYSize = nRows; poDS->papszHDR = papszHDR;
开发者ID:AsherBond,项目名称:MondocosmOS,代码行数:65,
示例13: CSLTokenizeStringComplexGDALDataset *MEMDataset::Open( GDALOpenInfo * poOpenInfo ){ char **papszOptions;/* -------------------------------------------------------------------- *//* Do we have the special filename signature for MEM format *//* description strings? *//* -------------------------------------------------------------------- */ if( !EQUALN(poOpenInfo->pszFilename,"MEM:::",6) || poOpenInfo->fp != NULL ) return NULL; papszOptions = CSLTokenizeStringComplex(poOpenInfo->pszFilename+6, ",", TRUE, FALSE );/* -------------------------------------------------------------------- *//* Verify we have all required fields *//* -------------------------------------------------------------------- */ if( CSLFetchNameValue( papszOptions, "PIXELS" ) == NULL || CSLFetchNameValue( papszOptions, "LINES" ) == NULL || CSLFetchNameValue( papszOptions, "DATAPOINTER" ) == NULL ) { CPLError( CE_Failure, CPLE_AppDefined, "Missing required field (one of PIXELS, LINES or DATAPOINTER)/n" "Unable to access in-memory array." ); CSLDestroy( papszOptions ); return NULL; }/* -------------------------------------------------------------------- *//* Create the new MEMDataset object. *//* -------------------------------------------------------------------- */ MEMDataset *poDS; poDS = new MEMDataset(); poDS->nRasterXSize = atoi(CSLFetchNameValue(papszOptions,"PIXELS")); poDS->nRasterYSize = atoi(CSLFetchNameValue(papszOptions,"LINES")); poDS->eAccess = GA_Update;/* -------------------------------------------------------------------- *//* Extract other information. *//* -------------------------------------------------------------------- */ const char *pszOption; GDALDataType eType; int nBands, nPixelOffset, nLineOffset; size_t nBandOffset; const char *pszDataPointer; GByte *pabyData; pszOption = CSLFetchNameValue(papszOptions,"BANDS"); if( pszOption == NULL ) nBands = 1; else { nBands = atoi(pszOption); } if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) || !GDALCheckBandCount(nBands, TRUE)) { CSLDestroy( papszOptions ); delete poDS; return NULL; } pszOption = CSLFetchNameValue(papszOptions,"DATATYPE"); if( pszOption == NULL ) eType = GDT_Byte; else { if( atoi(pszOption) > 0 && atoi(pszOption) < GDT_TypeCount ) eType = (GDALDataType) atoi(pszOption); else { int iType; eType = GDT_Unknown; for( iType = 0; iType < GDT_TypeCount; iType++ ) { if( EQUAL(GDALGetDataTypeName((GDALDataType) iType), pszOption) ) { eType = (GDALDataType) iType; break; } } if( eType == GDT_Unknown ) { CPLError( CE_Failure, CPLE_AppDefined, "DATATYPE=%s not recognised.", pszOption ); CSLDestroy( papszOptions ); delete poDS; return NULL; } }//.........这里部分代码省略.........
开发者ID:actian-geospatial,项目名称:ogr-ingres,代码行数:101,
示例14: CPLParseXMLStringGDALDataset *VRTDataset::OpenXML( const char *pszXML, const char *pszVRTPath, GDALAccess eAccess){ /* -------------------------------------------------------------------- */ /* Parse the XML. */ /* -------------------------------------------------------------------- */ CPLXMLNode *psTree; psTree = CPLParseXMLString( pszXML ); if( psTree == NULL ) return NULL; CPLXMLNode *psRoot = CPLGetXMLNode( psTree, "=VRTDataset" ); if (psRoot == NULL) { CPLError( CE_Failure, CPLE_AppDefined, "Missing VRTDataset element." ); CPLDestroyXMLNode( psTree ); return NULL; } if( CPLGetXMLNode( psRoot, "rasterXSize" ) == NULL || CPLGetXMLNode( psRoot, "rasterYSize" ) == NULL || CPLGetXMLNode( psRoot, "VRTRasterBand" ) == NULL ) { CPLError( CE_Failure, CPLE_AppDefined, "Missing one of rasterXSize, rasterYSize or bands on" " VRTDataset." ); CPLDestroyXMLNode( psTree ); return NULL; }/* -------------------------------------------------------------------- *//* Create the new virtual dataset object. *//* -------------------------------------------------------------------- */ VRTDataset *poDS; int nXSize = atoi(CPLGetXMLValue(psRoot,"rasterXSize","0")); int nYSize = atoi(CPLGetXMLValue(psRoot,"rasterYSize","0")); if ( !GDALCheckDatasetDimensions(nXSize, nYSize) ) { CPLDestroyXMLNode( psTree ); return NULL; } if( strstr(pszXML,"VRTWarpedDataset") != NULL ) poDS = new VRTWarpedDataset( nXSize, nYSize ); else { poDS = new VRTDataset( nXSize, nYSize ); poDS->eAccess = eAccess; } if( poDS->XMLInit( psRoot, pszVRTPath ) != CE_None ) { delete poDS; poDS = NULL; }/* -------------------------------------------------------------------- *//* Try to return a regular handle on the file. *//* -------------------------------------------------------------------- */ CPLDestroyXMLNode( psTree ); return poDS;}
开发者ID:Joe-xXx,项目名称:gdal,代码行数:68,
示例15: CSLTokenizeString2int AAIGDataset::ParseHeader(const char *pszHeader, const char *pszDataType){ char **papszTokens = CSLTokenizeString2(pszHeader, " /n/r/t", 0); const int nTokens = CSLCount(papszTokens); int i = 0; if ( (i = CSLFindString(papszTokens, "ncols")) < 0 || i + 1 >= nTokens) { CSLDestroy(papszTokens); return FALSE; } nRasterXSize = atoi(papszTokens[i + 1]); if ( (i = CSLFindString(papszTokens, "nrows")) < 0 || i + 1 >= nTokens) { CSLDestroy(papszTokens); return FALSE; } nRasterYSize = atoi(papszTokens[i + 1]); if (!GDALCheckDatasetDimensions(nRasterXSize, nRasterYSize)) { CSLDestroy(papszTokens); return FALSE; } // TODO(schwehr): Would be good to also factor the file size into the max. // TODO(schwehr): Allow the user to disable this check. // The driver allocates a panLineOffset array based on nRasterYSize constexpr int kMaxDimSize = 10000000; // 1e7 cells. if (nRasterXSize > kMaxDimSize || nRasterYSize > kMaxDimSize) { CSLDestroy(papszTokens); return FALSE; } double dfCellDX = 0.0; double dfCellDY = 0.0; if ( (i = CSLFindString(papszTokens, "cellsize")) < 0 ) { int iDX, iDY; if( (iDX = CSLFindString(papszTokens, "dx")) < 0 || (iDY = CSLFindString(papszTokens, "dy")) < 0 || iDX + 1 >= nTokens || iDY + 1 >= nTokens ) { CSLDestroy(papszTokens); return FALSE; } dfCellDX = CPLAtofM(papszTokens[iDX + 1]); dfCellDY = CPLAtofM(papszTokens[iDY + 1]); } else { if (i + 1 >= nTokens) { CSLDestroy(papszTokens); return FALSE; } dfCellDY = CPLAtofM(papszTokens[i + 1]); dfCellDX = dfCellDY; } int j = 0; if ((i = CSLFindString(papszTokens, "xllcorner")) >= 0 && (j = CSLFindString(papszTokens, "yllcorner")) >= 0 && i + 1 < nTokens && j + 1 < nTokens) { adfGeoTransform[0] = CPLAtofM(papszTokens[i + 1]); // Small hack to compensate from insufficient precision in cellsize // parameter in datasets of // http://ccafs-climate.org/data/A2a_2020s/hccpr_hadcm3 if ((nRasterXSize % 360) == 0 && fabs(adfGeoTransform[0] - (-180.0)) < 1e-12 && dfCellDX == dfCellDY && fabs(dfCellDX - (360.0 / nRasterXSize)) < 1e-9) { dfCellDY = 360.0 / nRasterXSize; dfCellDX = dfCellDY; } adfGeoTransform[1] = dfCellDX; adfGeoTransform[2] = 0.0; adfGeoTransform[3] = CPLAtofM(papszTokens[j + 1]) + nRasterYSize * dfCellDY; adfGeoTransform[4] = 0.0; adfGeoTransform[5] = -dfCellDY; } else if ((i = CSLFindString(papszTokens, "xllcenter")) >= 0 && (j = CSLFindString(papszTokens, "yllcenter")) >= 0 && i + 1 < nTokens && j + 1 < nTokens) { SetMetadataItem(GDALMD_AREA_OR_POINT, GDALMD_AOP_POINT); adfGeoTransform[0] = CPLAtofM(papszTokens[i + 1]) - 0.5 * dfCellDX; adfGeoTransform[1] = dfCellDX; adfGeoTransform[2] = 0.0;//.........这里部分代码省略.........
开发者ID:hdfeos,项目名称:gdal,代码行数:101,
示例16: CEOSOpenGDALDataset *CEOSDataset::Open( GDALOpenInfo * poOpenInfo ){ CEOSImage *psCEOS; int i; /* -------------------------------------------------------------------- *//* Before trying CEOSOpen() we first verify that the first *//* record is in fact a CEOS file descriptor record. *//* -------------------------------------------------------------------- */ if( poOpenInfo->nHeaderBytes < 100 ) return NULL; if( poOpenInfo->pabyHeader[4] != 0x3f || poOpenInfo->pabyHeader[5] != 0xc0 || poOpenInfo->pabyHeader[6] != 0x12 || poOpenInfo->pabyHeader[7] != 0x12 ) return NULL;/* -------------------------------------------------------------------- *//* Try opening the dataset. *//* -------------------------------------------------------------------- */ psCEOS = CEOSOpen( poOpenInfo->pszFilename, "rb" ); if( psCEOS == NULL ) return( NULL ); if( psCEOS->nBitsPerPixel != 8 ) { CPLError( CE_Failure, CPLE_NotSupported, "The CEOS driver cannot handle nBitsPerPixel = %d", psCEOS->nBitsPerPixel ); CEOSClose(psCEOS); return NULL; } if( !GDALCheckDatasetDimensions(psCEOS->nPixels, psCEOS->nBands) || !GDALCheckBandCount(psCEOS->nBands, FALSE) ) { CEOSClose( psCEOS ); return NULL; }/* -------------------------------------------------------------------- *//* Confirm the requested access is supported. *//* -------------------------------------------------------------------- */ if( poOpenInfo->eAccess == GA_Update ) { CEOSClose(psCEOS); CPLError( CE_Failure, CPLE_NotSupported, "The CEOS driver does not support update access to existing" " datasets./n" ); return NULL; }/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ CEOSDataset *poDS; poDS = new CEOSDataset(); poDS->psCEOS = psCEOS; /* -------------------------------------------------------------------- *//* Capture some information from the file that is of interest. *//* -------------------------------------------------------------------- */ poDS->nRasterXSize = psCEOS->nPixels; poDS->nRasterYSize = psCEOS->nLines; /* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->nBands = psCEOS->nBands;; for( i = 0; i < poDS->nBands; i++ ) poDS->SetBand( i+1, new CEOSRasterBand( poDS, i+1 ) );/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename ); return( poDS );}
开发者ID:Joe-xXx,项目名称:gdal,代码行数:90,
示例17: BTDatasetGDALDataset *BTDataset::Open( GDALOpenInfo * poOpenInfo ){/* -------------------------------------------------------------------- *//* Verify that this is some form of binterr file. *//* -------------------------------------------------------------------- */ if( poOpenInfo->nHeaderBytes < 256) return NULL; if( !STARTS_WITH((const char *) poOpenInfo->pabyHeader, "binterr") ) return NULL;/* -------------------------------------------------------------------- *//* Create the dataset. *//* -------------------------------------------------------------------- */ BTDataset *poDS = new BTDataset(); memcpy( poDS->abyHeader, poOpenInfo->pabyHeader, 256 );/* -------------------------------------------------------------------- *//* Get the version. *//* -------------------------------------------------------------------- */ char szVersion[4] = {}; strncpy( szVersion, (char *) (poDS->abyHeader + 7), 3 ); szVersion[3] = '/0'; poDS->nVersionCode = static_cast<int>(CPLAtof(szVersion) * 10);/* -------------------------------------------------------------------- *//* Extract core header information, being careful about the *//* version. *//* -------------------------------------------------------------------- */ GInt32 nIntTemp = 0; memcpy( &nIntTemp, poDS->abyHeader + 10, 4 ); poDS->nRasterXSize = CPL_LSBWORD32( nIntTemp ); memcpy( &nIntTemp, poDS->abyHeader + 14, 4 ); poDS->nRasterYSize = CPL_LSBWORD32( nIntTemp ); if( !GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) ) { delete poDS; return NULL; } GInt16 nDataSize = 0; memcpy( &nDataSize, poDS->abyHeader+18, 2 ); nDataSize = CPL_LSBWORD16( nDataSize ); GDALDataType eType = GDT_Unknown; if( poDS->abyHeader[20] != 0 && nDataSize == 4 ) eType = GDT_Float32; else if( poDS->abyHeader[20] == 0 && nDataSize == 4 ) eType = GDT_Int32; else if( poDS->abyHeader[20] == 0 && nDataSize == 2 ) eType = GDT_Int16; else { CPLError( CE_Failure, CPLE_AppDefined, ".bt file data type unknown, got datasize=%d.", nDataSize ); delete poDS; return NULL; } /* rcg, apr 7/06: read offset 62 for vert. units. If zero, assume 1.0 as per spec. */ memcpy( &poDS->m_fVscale, poDS->abyHeader + 62, 4 ); CPL_LSBPTR32(&poDS->m_fVscale); if(poDS->m_fVscale == 0.0f) poDS->m_fVscale = 1.0f;/* -------------------------------------------------------------------- *//* Try to read a .prj file if it is indicated. *//* -------------------------------------------------------------------- */ OGRSpatialReference oSRS; if( poDS->nVersionCode >= 12 && poDS->abyHeader[60] != 0 ) { const char *pszPrjFile = CPLResetExtension( poOpenInfo->pszFilename, "prj" ); VSILFILE *fp = VSIFOpenL( pszPrjFile, "rt" ); if( fp != NULL ) { const int nBufMax = 10000; char *pszBuffer = static_cast<char *>(CPLMalloc(nBufMax)); const int nBytes = static_cast<int>(VSIFReadL( pszBuffer, 1, nBufMax-1, fp )); CPL_IGNORE_RET_VAL(VSIFCloseL( fp )); pszBuffer[nBytes] = '/0'; char *pszBufPtr = pszBuffer; if( oSRS.importFromWkt( &pszBufPtr ) != OGRERR_NONE ) {//.........这里部分代码省略.........
开发者ID:Mavrx-inc,项目名称:gdal,代码行数:101,
示例18: CPL_IGNORE_RET_VAL//.........这里部分代码省略......... sr.SetWellKnownGeogCS( "NAD83" ); break; case -9: break; default: sr.SetWellKnownGeogCS( "NAD27" ); break; } } else { sr.SetWellKnownGeogCS( "NAD27" ); bNAD83 = false; } if (nCoordSystem == 1) // UTM { if( iUTMZone >= -60 && iUTMZone <= 60 ) { sr.SetUTM( abs(iUTMZone), iUTMZone >= 0 ); if( nGUnit == 1 ) { sr.SetLinearUnitsAndUpdateParameters( SRS_UL_US_FOOT, CPLAtof(SRS_UL_US_FOOT_CONV) ); char szUTMName[128]; snprintf( szUTMName, sizeof(szUTMName), "UTM Zone %d, Northern Hemisphere, us-ft", iUTMZone ); sr.SetNode( "PROJCS", szUTMName ); } } } else if (nCoordSystem == 2) // state plane { if( nGUnit == 1 ) sr.SetStatePlane( iUTMZone, bNAD83, "Foot", CPLAtof(SRS_UL_US_FOOT_CONV) ); else sr.SetStatePlane( iUTMZone, bNAD83 ); } sr.exportToWkt( &pszProjection );/* -------------------------------------------------------------------- *//* For UTM we use the extents (really the UTM coordinates of *//* the lat/long corners of the quad) to determine the size in *//* pixels and lines, but we have to make the anchors be modulus *//* the pixel size which what really gets used. *//* -------------------------------------------------------------------- */ if (nCoordSystem == 1 // UTM || nCoordSystem == 2 // State Plane || nCoordSystem == -9999 ) // unknown { // expand extents modulus the pixel size. extent_min.y = floor(extent_min.y/dydelta) * dydelta; extent_max.y = ceil(extent_max.y/dydelta) * dydelta; // Forcibly compute X extents based on first profile and pixelsize. CPL_IGNORE_RET_VAL(VSIFSeekL(InDem, nDataStartOffset, 0)); /* njunk = */ ReadInt(InDem); /* njunk = */ ReadInt(InDem); /* njunk = */ ReadInt(InDem); /* njunk = */ ReadInt(InDem); const double dxStart = DConvert(InDem, 24); nRasterYSize = static_cast<int>( ( extent_max.y - extent_min.y ) / dydelta + 1.5 ); nRasterXSize = nProfiles; adfGeoTransform[0] = dxStart - dxdelta/2.0; adfGeoTransform[1] = dxdelta; adfGeoTransform[2] = 0.0; adfGeoTransform[3] = extent_max.y + dydelta/2.0; adfGeoTransform[4] = 0.0; adfGeoTransform[5] = -dydelta; }/* -------------------------------------------------------------------- *//* Geographic -- use corners directly. *//* -------------------------------------------------------------------- */ else { nRasterYSize = static_cast<int>( ( extent_max.y - extent_min.y ) / dydelta + 1.5 ); nRasterXSize = nProfiles; // Translate extents from arc-seconds to decimal degrees. adfGeoTransform[0] = (extent_min.x - dxdelta/2.0) / 3600.0; adfGeoTransform[1] = dxdelta / 3600.0; adfGeoTransform[2] = 0.0; adfGeoTransform[3] = (extent_max.y + dydelta/2.0) / 3600.0; adfGeoTransform[4] = 0.0; adfGeoTransform[5] = (-dydelta) / 3600.0; } if (!GDALCheckDatasetDimensions(nRasterXSize, nRasterYSize)) { return FALSE; } return TRUE;}
开发者ID:rouault,项目名称:gdal,代码行数:101,
示例19: osFilename//.........这里部分代码省略......... } } if (dfX < dfMinX) dfMinX = dfX; if (dfX > dfMaxX) dfMaxX = dfX; if (dfY < dfMinY) dfMinY = dfY; if (dfY > dfMaxY) dfMaxY = dfY; } dfLastX = dfX; dfLastY = dfY; } if (adfStepX.size() != 1) { CPLError(CE_Failure, CPLE_AppDefined, "Couldn't determine X spacing"); VSIFCloseL(fp); return NULL; } if (adfStepY.size() != 1) { CPLError(CE_Failure, CPLE_AppDefined, "Couldn't determine Y spacing"); VSIFCloseL(fp); return NULL; } double dfStepX = adfStepX[0]; double dfStepY = adfStepY[0] * bStepYSign; int nXSize = 1 + int((dfMaxX - dfMinX) / dfStepX + 0.5); int nYSize = 1 + int((dfMaxY - dfMinY) / fabs(dfStepY) + 0.5); //CPLDebug("XYZ", "minx=%f maxx=%f stepx=%f", dfMinX, dfMaxX, dfStepX); //CPLDebug("XYZ", "miny=%f maxy=%f stepy=%f", dfMinY, dfMaxY, dfStepY); if (nDataLineNum != nXSize * nYSize) { bSameNumberOfValuesPerLine = FALSE; } if (poOpenInfo->eAccess == GA_Update) { CPLError( CE_Failure, CPLE_NotSupported, "The XYZ driver does not support update access to existing" " datasets./n" ); VSIFCloseL(fp); return NULL; }/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ XYZDataset *poDS; poDS = new XYZDataset(); poDS->fp = fp; poDS->bHasHeaderLine = bHasHeaderLine; poDS->nCommentLineCount = nCommentLineCount; poDS->chDecimalSep = chDecimalSep ? chDecimalSep : '.'; poDS->nXIndex = nXIndex; poDS->nYIndex = nYIndex; poDS->nZIndex = nZIndex; poDS->nMinTokens = nMinTokens; poDS->nRasterXSize = nXSize; poDS->nRasterYSize = nYSize; poDS->adfGeoTransform[0] = dfMinX - dfStepX / 2; poDS->adfGeoTransform[1] = dfStepX; poDS->adfGeoTransform[3] = (dfStepY < 0) ? dfMaxY - dfStepY / 2 : dfMinY - dfStepY / 2; poDS->adfGeoTransform[5] = dfStepY; poDS->bSameNumberOfValuesPerLine = bSameNumberOfValuesPerLine; poDS->dfMinZ = dfMinZ; poDS->dfMaxZ = dfMaxZ; //CPLDebug("XYZ", "bSameNumberOfValuesPerLine = %d", bSameNumberOfValuesPerLine); if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Create band information objects. *//* -------------------------------------------------------------------- */ poDS->nBands = 1; for( i = 0; i < poDS->nBands; i++ ) poDS->SetBand( i+1, new XYZRasterBand( poDS, i+1, eDT ) );/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Support overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename ); return( poDS );}
开发者ID:garnertb,项目名称:gdal,代码行数:101,
示例20: VSIFOpenL//.........这里部分代码省略......... bHasMinY = TRUE; dfMinY = CPLAtofM(papszTokens[1]); } else if( EQUAL(papszTokens[0],"Maximum x-axis coordinate") ) { bHasMaxX = TRUE; dfMaxX = CPLAtofM(papszTokens[1]); } else if( EQUAL(papszTokens[0],"Maximum y-axis coordinate") ) { bHasMaxY = TRUE; dfMaxY = CPLAtofM(papszTokens[1]); } CSLDestroy( papszTokens ); } VSIFCloseL( fp );/* -------------------------------------------------------------------- *//* Did we get the required keywords? If not we return with *//* this never having been considered to be a match. This isn't *//* an error! *//* -------------------------------------------------------------------- */ if( nRows == -1 || nCols == -1 || !bIsInteger || !bIs2Bytes ) return NULL; if( !bNotProjected || !bIsWGS84 ) return NULL; if( osDataFilename.size() == 0 ) return NULL; if (!GDALCheckDatasetDimensions(nCols, nRows)) return NULL;/* -------------------------------------------------------------------- *//* Open target binary file. *//* -------------------------------------------------------------------- */ const char* pszPath = CPLGetPath(poOpenInfo->pszFilename); osDataFilename = CPLFormFilename(pszPath, osDataFilename, NULL); VSILFILE* fpRaw = VSIFOpenL( osDataFilename, "rb" ); if( fpRaw == NULL ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ SNODASDataset *poDS; poDS = new SNODASDataset(); poDS->nRasterXSize = nCols; poDS->nRasterYSize = nRows; poDS->osDataFilename = osDataFilename; poDS->bHasNoData = bHasNoData; poDS->dfNoData = dfNoData; poDS->bHasMin = bHasMin; poDS->dfMin = dfMin; poDS->bHasMax = bHasMax; poDS->dfMax = dfMax; if (bHasMinX && bHasMinY && bHasMaxX && bHasMaxY) { poDS->bGotTransform = TRUE;
开发者ID:AbdelghaniDr,项目名称:mirror,代码行数:67,
示例21: LOSLASDatasetGDALDataset *LOSLASDataset::Open( GDALOpenInfo * poOpenInfo ){ if( !Identify( poOpenInfo ) ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ LOSLASDataset *poDS = new LOSLASDataset();/* -------------------------------------------------------------------- *//* Open the file. *//* -------------------------------------------------------------------- */ poDS->fpImage = VSIFOpenL( poOpenInfo->pszFilename, "rb" ); if( poDS->fpImage == NULL ) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Read the header. *//* -------------------------------------------------------------------- */ CPL_IGNORE_RET_VAL(VSIFSeekL( poDS->fpImage, 64, SEEK_SET )); CPL_IGNORE_RET_VAL(VSIFReadL( &(poDS->nRasterXSize), 4, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &(poDS->nRasterYSize), 4, 1, poDS->fpImage )); CPL_LSBPTR32( &(poDS->nRasterXSize) ); CPL_LSBPTR32( &(poDS->nRasterYSize) ); if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { delete poDS; return NULL; } CPL_IGNORE_RET_VAL(VSIFSeekL( poDS->fpImage, 76, SEEK_SET )); float min_lon, min_lat, delta_lon, delta_lat; CPL_IGNORE_RET_VAL(VSIFReadL( &min_lon, 4, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &delta_lon, 4, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &min_lat, 4, 1, poDS->fpImage )); CPL_IGNORE_RET_VAL(VSIFReadL( &delta_lat, 4, 1, poDS->fpImage )); CPL_LSBPTR32( &min_lon ); CPL_LSBPTR32( &delta_lon ); CPL_LSBPTR32( &min_lat ); CPL_LSBPTR32( &delta_lat ); poDS->nRecordLength = poDS->nRasterXSize * 4 + 4;/* -------------------------------------------------------------------- *//* Create band information object. *//* *//* Note we are setting up to read from the last image record to *//* the first since the data comes with the southern most record *//* first, not the northernmost like we would want. *//* -------------------------------------------------------------------- */ poDS->SetBand( 1, new RawRasterBand( poDS, 1, poDS->fpImage, poDS->nRasterYSize * poDS->nRecordLength + 4, 4, -1 * poDS->nRecordLength, GDT_Float32, CPL_IS_LSB, TRUE, FALSE ) );/* -------------------------------------------------------------------- *//* Setup georeferencing. *//* -------------------------------------------------------------------- */ poDS->adfGeoTransform[0] = min_lon - delta_lon*0.5; poDS->adfGeoTransform[1] = delta_lon; poDS->adfGeoTransform[2] = 0.0; poDS->adfGeoTransform[3] = min_lat + (poDS->nRasterYSize-0.5) * delta_lat; poDS->adfGeoTransform[4] = 0.0; poDS->adfGeoTransform[5] = -1 * delta_lat;/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename ); return( poDS );}
开发者ID:bbradbury,项目名称:lib_gdal,代码行数:92,
示例22: CaptureMetadataItemint NTv2Dataset::OpenGrid( char *pachHeader, vsi_l_offset nGridOffset ){ this->nGridOffset = nGridOffset;/* -------------------------------------------------------------------- *//* Read the grid header. *//* -------------------------------------------------------------------- */ double s_lat, n_lat, e_long, w_long, lat_inc, long_inc; CaptureMetadataItem( pachHeader + 0*16 ); CaptureMetadataItem( pachHeader + 1*16 ); CaptureMetadataItem( pachHeader + 2*16 ); CaptureMetadataItem( pachHeader + 3*16 ); memcpy( &s_lat, pachHeader + 4*16 + 8, 8 ); memcpy( &n_lat, pachHeader + 5*16 + 8, 8 ); memcpy( &e_long, pachHeader + 6*16 + 8, 8 ); memcpy( &w_long, pachHeader + 7*16 + 8, 8 ); memcpy( &lat_inc, pachHeader + 8*16 + 8, 8 ); memcpy( &long_inc, pachHeader + 9*16 + 8, 8 ); e_long *= -1; w_long *= -1; nRasterXSize = (int) floor((e_long - w_long) / long_inc + 1.5); nRasterYSize = (int) floor((n_lat - s_lat) / lat_inc + 1.5); if (!GDALCheckDatasetDimensions(nRasterXSize, nRasterYSize)) return FALSE;/* -------------------------------------------------------------------- *//* Create band information object. *//* *//* We use unusual offsets to remap from bottom to top, to top *//* to bottom orientation, and also to remap east to west, to *//* west to east. *//* -------------------------------------------------------------------- */ int iBand; for( iBand = 0; iBand < 4; iBand++ ) { RawRasterBand *poBand = new RawRasterBand( this, iBand+1, fpImage, nGridOffset + 4*iBand + 11*16 + (nRasterXSize-1) * 16 + (nRasterYSize-1) * 16 * nRasterXSize, -16, -16 * nRasterXSize, GDT_Float32, CPL_IS_LSB, TRUE, FALSE ); SetBand( iBand+1, poBand ); } GetRasterBand(1)->SetDescription( "Latitude Offset (arc seconds)" ); GetRasterBand(2)->SetDescription( "Longitude Offset (arc seconds)" ); GetRasterBand(3)->SetDescription( "Latitude Error" ); GetRasterBand(4)->SetDescription( "Longitude Error" ); /* -------------------------------------------------------------------- *//* Setup georeferencing. *//* -------------------------------------------------------------------- */ adfGeoTransform[0] = (w_long - long_inc*0.5) / 3600.0; adfGeoTransform[1] = long_inc / 3600.0; adfGeoTransform[2] = 0.0; adfGeoTransform[3] = (n_lat + lat_inc*0.5) / 3600.0; adfGeoTransform[4] = 0.0; adfGeoTransform[5] = (-1 * lat_inc) / 3600.0; return TRUE;}
开发者ID:garnertb,项目名称:gdal,代码行数:69,
示例23: STARTS_WITH_CI//.........这里部分代码省略........./* -------------------------------------------------------------------- *//* Find the RawDefinition line to establish overall parameters. *//* -------------------------------------------------------------------- */ pszLine = CSLFetchNameValue(poDS->papszAuxLines, "RawDefinition"); // It seems PCI now writes out .aux files without RawDefinition in // some cases. See bug 947. if( pszLine == NULL ) { delete poDS; return NULL; } char **papszTokens = CSLTokenizeString(pszLine); if( CSLCount(papszTokens) < 3 ) { CPLError( CE_Failure, CPLE_AppDefined, "RawDefinition missing or corrupt in %s.", poOpenInfo->pszFilename ); delete poDS; CSLDestroy( papszTokens ); return NULL; } poDS->nRasterXSize = atoi(papszTokens[0]); poDS->nRasterYSize = atoi(papszTokens[1]); poDS->nBands = atoi(papszTokens[2]); poDS->eAccess = poOpenInfo->eAccess; CSLDestroy( papszTokens ); if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) || !GDALCheckBandCount(poDS->nBands, FALSE)) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Open the file. *//* -------------------------------------------------------------------- */ if( poOpenInfo->eAccess == GA_Update ) { poDS->fpImage = VSIFOpenL( osTarget, "rb+" ); if( poDS->fpImage == NULL ) { CPLError( CE_Failure, CPLE_OpenFailed, "File %s is missing or read-only, check permissions.", osTarget.c_str() ); delete poDS; return NULL; } } else { poDS->fpImage = VSIFOpenL( osTarget, "rb" ); if( poDS->fpImage == NULL ) { CPLError( CE_Failure, CPLE_OpenFailed, "File %s is missing or unreadable.", osTarget.c_str() ); delete poDS;
开发者ID:Wedjaa,项目名称:node-gdal,代码行数:67,
示例24: VSIFOpenLGDALDataset *E00GRIDDataset::Open( GDALOpenInfo * poOpenInfo ){ if (!Identify(poOpenInfo)) return NULL;/* -------------------------------------------------------------------- *//* Find dataset characteristics *//* -------------------------------------------------------------------- */ VSILFILE* fp = VSIFOpenL(poOpenInfo->pszFilename, "rb"); if (fp == NULL) return NULL; if (poOpenInfo->eAccess == GA_Update) { CPLError( CE_Failure, CPLE_NotSupported, "The E00GRID driver does not support update access to existing" " datasets./n" ); VSIFCloseL(fp); return NULL; }/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ E00GRIDDataset *poDS = new E00GRIDDataset(); if (strstr((const char*)poOpenInfo->pabyHeader, "/r/n") != NULL) poDS->nBytesEOL = 2; poDS->fp = fp; /* read EXP 0 or EXP 1 line */ const char* pszLine = CPLReadLine2L(fp, 81, NULL); if (pszLine == NULL) { CPLDebug("E00GRID", "Bad 1st line"); delete poDS; return NULL; } bool bCompressed = STARTS_WITH_CI(pszLine, "EXP 1"); E00ReadPtr e00ReadPtr = NULL; if (bCompressed) { VSIRewindL(fp); e00ReadPtr = E00ReadCallbackOpen(poDS, E00GRIDDataset::ReadNextLine, E00GRIDDataset::Rewind); if (e00ReadPtr == NULL) { delete poDS; return NULL; } E00ReadNextLine(e00ReadPtr); poDS->e00ReadPtr = e00ReadPtr; } /* skip GRD 2 line */ if (e00ReadPtr) pszLine = E00ReadNextLine(e00ReadPtr); else pszLine = CPLReadLine2L(fp, 81, NULL); if (pszLine == NULL || !STARTS_WITH_CI(pszLine, "GRD 2")) { CPLDebug("E00GRID", "Bad 2nd line"); delete poDS; return NULL; } /* read ncols, nrows and nodata value */ if (e00ReadPtr) pszLine = E00ReadNextLine(e00ReadPtr); else pszLine = CPLReadLine2L(fp, 81, NULL); if (pszLine == NULL || strlen(pszLine) < E00_INT_SIZE+E00_INT_SIZE+2+E00_DOUBLE_SIZE) { CPLDebug("E00GRID", "Bad 3rd line"); delete poDS; return NULL; } const int nRasterXSize = atoi(pszLine); const int nRasterYSize = atoi(pszLine + E00_INT_SIZE); if (!GDALCheckDatasetDimensions(nRasterXSize, nRasterYSize)) { delete poDS; return NULL; } GDALDataType eDT = GDT_Float32; if (STARTS_WITH_CI(pszLine + E00_INT_SIZE + E00_INT_SIZE, " 1")) eDT = GDT_Int32; else if (STARTS_WITH_CI(pszLine + E00_INT_SIZE + E00_INT_SIZE, " 2")) eDT = GDT_Float32; else { CPLDebug("E00GRID", "Unknown data type : %s", pszLine); }//.........这里部分代码省略.........
开发者ID:ryandavid,项目名称:rotobox,代码行数:101,
示例25: CTable2DatasetGDALDataset *CTable2Dataset::Open( GDALOpenInfo * poOpenInfo ){ if( !Identify( poOpenInfo ) ) return NULL;/* -------------------------------------------------------------------- *//* Create a corresponding GDALDataset. *//* -------------------------------------------------------------------- */ CTable2Dataset *poDS = new CTable2Dataset(); poDS->eAccess = poOpenInfo->eAccess;/* -------------------------------------------------------------------- *//* Open the file. *//* -------------------------------------------------------------------- */ CPLString osFilename = poOpenInfo->pszFilename; if( poOpenInfo->eAccess == GA_ReadOnly ) poDS->fpImage = VSIFOpenL( osFilename, "rb" ); else poDS->fpImage = VSIFOpenL( osFilename, "rb+" ); if( poDS->fpImage == NULL ) { delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Read the file header. *//* -------------------------------------------------------------------- */ CPL_IGNORE_RET_VAL(VSIFSeekL( poDS->fpImage, 0, SEEK_SET )); char achHeader[160] = { '/0' }; CPL_IGNORE_RET_VAL(VSIFReadL( achHeader, 1, 160, poDS->fpImage )); achHeader[16+79] = '/0'; CPLString osDescription = reinterpret_cast<const char *>( achHeader + 16 ); osDescription.Trim(); poDS->SetMetadataItem( "DESCRIPTION", osDescription );/* -------------------------------------------------------------------- *//* Convert from LSB to local machine byte order. *//* -------------------------------------------------------------------- */ CPL_LSBPTR64( achHeader + 96 ); CPL_LSBPTR64( achHeader + 104 ); CPL_LSBPTR64( achHeader + 112 ); CPL_LSBPTR64( achHeader + 120 ); CPL_LSBPTR32( achHeader + 128 ); CPL_LSBPTR32( achHeader + 132 );/* -------------------------------------------------------------------- *//* Extract size, and geotransform. *//* -------------------------------------------------------------------- */ int nRasterXSize, nRasterYSize; memcpy( &nRasterXSize, achHeader + 128, 4 ); memcpy( &nRasterYSize, achHeader + 132, 4 ); if (!GDALCheckDatasetDimensions(nRasterXSize, nRasterYSize)) { delete poDS; return NULL; } poDS->nRasterXSize = nRasterXSize; poDS->nRasterYSize = nRasterYSize; double adfValues[4]; memcpy( adfValues, achHeader + 96, sizeof(double)*4 ); for( int i = 0; i < 4; i++ ) adfValues[i] *= 180/M_PI; // Radians to degrees. poDS->adfGeoTransform[0] = adfValues[0] - adfValues[2]*0.5; poDS->adfGeoTransform[1] = adfValues[2]; poDS->adfGeoTransform[2] = 0.0; poDS->adfGeoTransform[3] = adfValues[1] + adfValues[3]*(nRasterYSize-0.5); poDS->adfGeoTransform[4] = 0.0; poDS->adfGeoTransform[5] = -adfValues[3];/* -------------------------------------------------------------------- *//* Setup the bands. *//* -------------------------------------------------------------------- */ RawRasterBand *poBand = new RawRasterBand( poDS, 1, poDS->fpImage, 160 + 4 + nRasterXSize * (nRasterYSize-1) * 2 * 4, 8, -8 * nRasterXSize, GDT_Float32, CPL_IS_LSB, TRUE, FALSE ); poBand->SetDescription( "Latitude Offset (radians)" ); poDS->SetBand( 1, poBand ); poBand = new RawRasterBand( poDS, 2, poDS->fpImage, 160 + nRasterXSize * (nRasterYSize-1) * 2 * 4, 8, -8 * nRasterXSize, GDT_Float32, CPL_IS_LSB, TRUE, FALSE ); poBand->SetDescription( "Longitude Offset (radians)" ); poDS->SetBand( 2, poBand );/* -------------------------------------------------------------------- *///.........这里部分代码省略.........
开发者ID:Wedjaa,项目名称:node-gdal,代码行数:101,
示例26: CPLError//.........这里部分代码省略......... poDS->nRasterXSize = poDS->ReadInteger(); poDS->nRasterYSize = poDS->ReadInteger(); nBandCount = 1; } else if( nCount == 3 ) { poDS->nRasterXSize = poDS->ReadInteger(); poDS->nRasterYSize = poDS->ReadInteger(); nBandCount = poDS->ReadInteger(); } else { CPLError( CE_Failure, CPLE_AppDefined, "R 'dim' dimension wrong." ); delete poDS; return NULL; } } else if( nObjCode % 256 == R_REALSXP ) { int nCount = poDS->ReadInteger(); while( nCount-- > 0 && !VSIFEofL(poDS->fp) ) poDS->ReadFloat(); } else if( nObjCode % 256 == R_INTSXP ) { int nCount = poDS->ReadInteger(); while( nCount-- > 0 && !VSIFEofL(poDS->fp) ) poDS->ReadInteger(); } else if( nObjCode % 256 == R_STRSXP ) { int nCount = poDS->ReadInteger(); while( nCount-- > 0 && !VSIFEofL(poDS->fp) ) poDS->ReadString(); } else if( nObjCode % 256 == R_CHARSXP ) { poDS->ReadString(); } } if( poDS->nRasterXSize == 0 ) { delete poDS; CPLError( CE_Failure, CPLE_AppDefined, "Failed to find dim dimension information for R dataset." ); return NULL; } if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize) || !GDALCheckBandCount(nBandCount, TRUE)) { delete poDS; return NULL; } if( nValueCount < ((GIntBig) nBandCount) * poDS->nRasterXSize * poDS->nRasterYSize ) { CPLError( CE_Failure, CPLE_AppDefined, "Not enough pixel data." ); delete poDS; return NULL; }/* -------------------------------------------------------------------- *//* Create the raster band object(s). *//* -------------------------------------------------------------------- */ for( int iBand = 0; iBand < nBandCount; iBand++ ) { GDALRasterBand *poBand; if( poDS->bASCII ) poBand = new RRasterBand( poDS, iBand+1, poDS->padfMatrixValues + iBand * poDS->nRasterXSize * poDS->nRasterYSize ); else poBand = new RawRasterBand( poDS, iBand+1, poDS->fp, poDS->nStartOfData + poDS->nRasterXSize*poDS->nRasterYSize*8*iBand, 8, poDS->nRasterXSize * 8, GDT_Float64, !CPL_IS_LSB, TRUE, FALSE ); poDS->SetBand( iBand+1, poBand ); }/* -------------------------------------------------------------------- *//* Initialize any PAM information. *//* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML();/* -------------------------------------------------------------------- *//* Check for overviews. *//* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename ); return( poDS );}
开发者ID:469447793,项目名称:World-Wind-Java,代码行数:101,
示例27: FASTDataset//.........这里部分代码省略......... } // Read number of pixels/lines and bit depth pszTemp = GetValue( pszHeader, PIXELS, PIXELS_SIZE, FALSE ); if ( pszTemp ) { poDS->nRasterXSize = atoi( pszTemp ); CPLFree( pszTemp ); } else { CPLDebug( "FAST", "Failed to find number of pixels in line." ); CPLFree(pszHeader); delete poDS; return NULL; } pszTemp = GetValue( pszHeader, LINES1, LINES_SIZE, FALSE ); if ( !pszTemp ) pszTemp = GetValue( pszHeader, LINES2, LINES_SIZE, FALSE ); if ( pszTemp ) { poDS->nRasterYSize = atoi( pszTemp ); CPLFree( pszTemp ); } else { CPLDebug( "FAST", "Failed to find number of lines in raster." ); CPLFree(pszHeader); delete poDS; return NULL; } if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { CPLFree(pszHeader); delete poDS; return NULL; } pszTemp = GetValue( pszHeader, BITS_PER_PIXEL, BITS_PER_PIXEL_SIZE, FALSE ); if ( pszTemp ) { switch( atoi(pszTemp) ) { case 8: default: poDS->eDataType = GDT_Byte; break; // For a strange reason, some Euromap products declare 10 bits // output, but are 16 bits. case 10: case 16: poDS->eDataType = GDT_UInt16; break; } CPLFree( pszTemp ); } else { poDS->eDataType = GDT_Byte; }/* -------------------------------------------------------------------- *//* Read radiometric record. *//* -------------------------------------------------------------------- */
开发者ID:Wedjaa,项目名称:node-gdal,代码行数:67,
示例28: GS7BGDataset//.........这里部分代码省略......... "Unable to seek to end of file section./n" ); return NULL; } } } /* --------------------------------------------------------------------*/ /* Read the grid. */ /* --------------------------------------------------------------------*/ /* Parse number of Y axis grid rows */ GInt32 nRows; if( VSIFReadL( (void *)&nRows, sizeof(GInt32), 1, poDS->fp ) != 1 ) { delete poDS; CPLError( CE_Failure, CPLE_FileIO, "Unable to read raster Y size./n" ); return NULL; } CPL_LSBPTR32( &nRows ); poDS->nRasterYSize = nRows; /* Parse number of X axis grid columns */ GInt32 nCols; if( VSIFReadL( (void *)&nCols, sizeof(GInt32), 1, poDS->fp ) != 1 ) { delete poDS; CPLError( CE_Failure, CPLE_FileIO, "Unable to read raster X size./n" ); return NULL; } CPL_LSBPTR32( &nCols ); poDS->nRasterXSize = nCols; if (!GDALCheckDatasetDimensions(poDS->nRasterXSize, poDS->nRasterYSize)) { delete poDS; return NULL; } /* --------------------------------------------------------------------*/ /* Create band information objects. */ /* --------------------------------------------------------------------*/ GS7BGRasterBand *poBand = new GS7BGRasterBand( poDS, 1 ); poDS->SetBand( 1, poBand ); // find the min X Value of the grid double dfTemp; if( VSIFReadL( (void *)&dfTemp, sizeof(double), 1, poDS->fp ) != 1 ) { delete poDS; CPLError( CE_Failure, CPLE_FileIO, "Unable to read minimum X value./n" ); return NULL; } CPL_LSBPTR64( &dfTemp ); poBand->dfMinX = dfTemp; // find the min Y value of the grid if( VSIFReadL( (void *)&dfTemp, sizeof(double), 1, poDS->fp ) != 1 ) { delete poDS; CPLError( CE_Failure, CPLE_FileIO, "Unable to read minimum X value./n" ); return NULL; } CPL_LSBPTR64( &dfTemp );
开发者ID:bbradbury,项目名称:lib_gdal,代码行数:67,
注:本文中的GDALCheckDatasetDimensions函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ GDALClose函数代码示例 C++ GClip_LinkEntity函数代码示例 |