GDALDataset *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); }
NWT_GRID *nwtOpenGrid( char *filename ) { char nwtHeader[1024]; VSILFILE *fp = VSIFOpenL( filename, "rb" ); if( fp == NULL ) { CPLError(CE_Failure, CPLE_OpenFailed, "Can't open %s", filename ); return NULL; } if( !VSIFReadL( nwtHeader, 1024, 1, fp ) ) return NULL; if( nwtHeader[0] != 'H' || nwtHeader[1] != 'G' || nwtHeader[2] != 'P' || nwtHeader[3] != 'C' ) return NULL; NWT_GRID *pGrd = reinterpret_cast<NWT_GRID *>( calloc( sizeof(NWT_GRID), 1 ) ); if( nwtHeader[4] == '1' ) pGrd->cFormat = 0x00; // grd - surface type else if( nwtHeader[4] == '8' ) pGrd->cFormat = 0x80; // grc classified type else { CPLError(CE_Failure, CPLE_NotSupported, "Unhandled Northwood format type = %0xd", nwtHeader[4] ); if( pGrd ) free( pGrd ); return NULL; } strncpy( pGrd->szFileName, filename, sizeof(pGrd->szFileName) ); pGrd->szFileName[sizeof(pGrd->szFileName) - 1] = '\0'; pGrd->fp = fp; nwt_ParseHeader( pGrd, nwtHeader ); return pGrd; }
NWT_GRID *nwtOpenGrid( char *filename ) { NWT_GRID *pGrd; char nwtHeader[1024]; VSILFILE *fp; if( (fp = VSIFOpenL( filename, "rb" )) == NULL ) { fprintf( stderr, "\nCan't open %s\n", filename ); return NULL; } if( !VSIFReadL( nwtHeader, 1024, 1, fp ) ) return NULL; if( nwtHeader[0] != 'H' || nwtHeader[1] != 'G' || nwtHeader[2] != 'P' || nwtHeader[3] != 'C' ) return NULL; pGrd = (NWT_GRID *) calloc( sizeof(NWT_GRID), 1 ); if( nwtHeader[4] == '1' ) pGrd->cFormat = 0x00; // grd - surface type else if( nwtHeader[4] == '8' ) pGrd->cFormat = 0x80; // grc classified type else { fprintf( stderr, "\nUnhandled Northwood format type = %0xd\n", nwtHeader[4] ); if( pGrd ) free( pGrd ); return NULL; } strcpy( pGrd->szFileName, filename ); pGrd->fp = fp; nwt_ParseHeader( pGrd, nwtHeader ); return pGrd; }
GDALDataset *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)); poDS->pGrd->fp = poDS->fp; 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); }