GDALDataset *JDEMDataset::Open( GDALOpenInfo *poOpenInfo ) { // Confirm that the header is compatible with a JDEM dataset. if (!Identify(poOpenInfo)) return nullptr; // Confirm the requested access is supported. if( poOpenInfo->eAccess == GA_Update ) { CPLError(CE_Failure, CPLE_NotSupported, "The JDEM driver does not support update access to existing " "datasets."); return nullptr; } // Check that the file pointer from GDALOpenInfo* is available. if( poOpenInfo->fpL == nullptr ) { return nullptr; } // Create a corresponding GDALDataset. JDEMDataset *poDS = new JDEMDataset(); // Borrow the file pointer from GDALOpenInfo*. poDS->fp = poOpenInfo->fpL; poOpenInfo->fpL = nullptr; // Read the header. CPL_IGNORE_RET_VAL(VSIFReadL(poDS->abyHeader, 1, 1012, poDS->fp)); const char *psHeader = reinterpret_cast<char *>(poDS->abyHeader); poDS->nRasterXSize = JDEMGetField(psHeader + 23, 3); poDS->nRasterYSize = JDEMGetField(psHeader + 26, 3); if( poDS->nRasterXSize <= 0 || poDS->nRasterYSize <= 0 ) { CPLError(CE_Failure, CPLE_AppDefined, "Invalid dimensions : %d x %d", poDS->nRasterXSize, poDS->nRasterYSize); delete poDS; return nullptr; } // Create band information objects. poDS->SetBand(1, new JDEMRasterBand(poDS, 1)); // Initialize any PAM information. poDS->SetDescription(poOpenInfo->pszFilename); poDS->TryLoadXML(); // Check for overviews. poDS->oOvManager.Initialize(poDS, poOpenInfo->pszFilename); return poDS; }
GDALDataset *JDEMDataset::Open( GDALOpenInfo * poOpenInfo ) { /* -------------------------------------------------------------------- */ /* Confirm that the header is compatible with a JDEM dataset. */ /* -------------------------------------------------------------------- */ if (!Identify(poOpenInfo)) return NULL; /* -------------------------------------------------------------------- */ /* Confirm the requested access is supported. */ /* -------------------------------------------------------------------- */ if( poOpenInfo->eAccess == GA_Update ) { CPLError( CE_Failure, CPLE_NotSupported, "The JDEM driver does not support update access to existing" " datasets.\n" ); return NULL; } /* Check that the file pointer from GDALOpenInfo* is available */ if( poOpenInfo->fpL == NULL ) { return NULL; } /* -------------------------------------------------------------------- */ /* Create a corresponding GDALDataset. */ /* -------------------------------------------------------------------- */ JDEMDataset *poDS; poDS = new JDEMDataset(); /* Borrow the file pointer from GDALOpenInfo* */ poDS->fp = poOpenInfo->fpL; poOpenInfo->fpL = NULL; /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ VSIFReadL( poDS->abyHeader, 1, 1012, poDS->fp ); poDS->nRasterXSize = JDEMGetField( (char *) poDS->abyHeader + 23, 3 ); poDS->nRasterYSize = JDEMGetField( (char *) poDS->abyHeader + 26, 3 ); if (poDS->nRasterXSize <= 0 || poDS->nRasterYSize <= 0 ) { CPLError( CE_Failure, CPLE_AppDefined, "Invalid dimensions : %d x %d", poDS->nRasterXSize, poDS->nRasterYSize); delete poDS; return NULL; } /* -------------------------------------------------------------------- */ /* Create band information objects. */ /* -------------------------------------------------------------------- */ poDS->SetBand( 1, new JDEMRasterBand( poDS, 1 )); /* -------------------------------------------------------------------- */ /* Initialize any PAM information. */ /* -------------------------------------------------------------------- */ poDS->SetDescription( poOpenInfo->pszFilename ); poDS->TryLoadXML(); /* -------------------------------------------------------------------- */ /* Check for overviews. */ /* -------------------------------------------------------------------- */ poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename ); return( poDS ); }