bool ossimMultiResLevelHistogram::importHistogram(const ossimFilename& file) { if( file.fileSize() > 0 ) { theHistogramFile = file; ifstream input(file.c_str()); return importHistogram(input); } return false; }
bool ossimGeneralRasterInfo::initializeFromXml( const ossimFilename& imageFile, const ossimFilename& headerFile ) { bool result = false; ossimFgdcXmlDoc file; if (file.open( headerFile )) { while( 1 ) { //--- // Go through the data members in order. // If a required item is not found break from loop. //-- theMetaData.clear(); // scalar ( default ) - adjusted below : theMetaData.setScalarType( OSSIM_UINT8 ); // Image file name: theImageFileList.clear(); theImageFileList.push_back( imageFile ); // interleave ( defaulted ): theInterleaveType = OSSIM_BIL; // bands ( required ): if ( !file.getNumberOfBands() ) { break; } theMetaData.setNumberOfBands( file.getNumberOfBands() ); ossimIpt size; if ( file.getImageSize(size) ) // Lines, samples not image file size. { // lines, samples ( required ): if ( !size.x || !size.y ) { break; } } else { break; } // Set the rectangles: theRawImageRect = ossimIrect( 0, 0, size.x - 1, size.y - 1 ); theValidImageRect = theRawImageRect; theImageRect = theRawImageRect; // sample start ( not required ): theSubImageOffset.x = 0; // line start ( not required ): theSubImageOffset.y = 0; // header offset ( not required ): theHeaderSize = 0; // null mode: theSetNullsMode = ossimGeneralRasterInfo::NONE; // pixels to chop: thePixelsToChop = 0; // Byte order *** need this ***, defaulting to system for now: theImageDataByteOrder = ossim::byteOrder(); // Adjust scalar if needed, note defaulted to 8 bit above: ossimString eainfo; file.getPath("/metadata/eainfo/detailed/enttyp/enttypd", eainfo); ossim_int32 numBits = 0; ossim_int64 fileSize = imageFile.fileSize(); // Image file size. ossim_int32 numBytes = fileSize / size.x / size.y / numberOfBands(); if( numBytes > 0 && numBytes != 3 ) { numBits = numBytes*8; } if( numBits == 16 ) { theMetaData.setScalarType( OSSIM_UINT16 ); } else if( numBits == 32 ) { if(eainfo.contains("float")) { theMetaData.setScalarType( OSSIM_FLOAT32 ); } else { theMetaData.setScalarType( OSSIM_UINT32 ); } } result = true; break; // Trailing break to get out. } } return result; } // End: ossimGeneralRasterInfo::initializeFromXml
//***************************************************************************** // PROTECTED METHOD: ossimQuickbirdMetaData::parseMetaData() // // Parses the Quickbird IMD file. // //***************************************************************************** bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) { if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimQuickbirdMetaData::parseMetaData(data_file): entering..." << std::endl; if( !data_file.exists() ) { if (traceExec()) ossimNotify(ossimNotifyLevel_WARN) << "ossimQuickbirdMetaData::parseMetaData(data_file) WARN:" << "\nmetadate data file <" << data_file << ">. " << "doesn't exist..." << std::endl; return false; } FILE* fptr = fopen (data_file, "r"); if (!fptr) { if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "ossimQuickbirdRpcModel::parseMetaData(data_file) DEBUG:" << "\nCould not open Meta data file: " << data_file << "\nreturning with error..." << std::endl; } return false; } char* strptr(NULL); //--- // Read the file into a buffer: //--- ossim_int32 fileSize = static_cast<ossim_int32>(data_file.fileSize()); char* filebuf = new char[fileSize]; fread(filebuf, 1, fileSize, fptr); strptr = filebuf; fclose(fptr); ossimString temp; //--- // Generation time: //--- if(getEndOfLine( strptr, ossimString("\ngenerationTime ="), "%17c %s", temp)) theGenerationDate = ossimString(temp).before(";"); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } // Number of rows and columns in full image: if(getEndOfLine( strptr, ossimString("\nnumRows ="), "%10c %s", temp)) theImageSize.line = ossimString(temp).before("\";").toInt(); if(getEndOfLine( strptr, ossimString("\nnumColumns ="), "%13c %s", temp)) theImageSize.samp = ossimString(temp).before("\";").toInt(); //--- // BandId: //--- if(getEndOfLine( strptr, ossimString("\nbandId ="), "%9c %s", temp)) theBandId = ossimString(temp).after("\"").before("\";"); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } //--- // BitsPerPixel: //--- if(getEndOfLine( strptr, ossimString("\nbitsPerPixel = "), "%16c %s", temp)) theBitsPerPixel = ossimString(temp).before(";").toInt(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } //--- // absCalFactors: //--- char *iter = (char *)filebuf; unsigned int nbBand = 0; theBandNameList = ""; for(iter = strstr(iter, "BEGIN_GROUP = BAND_"); iter ; iter = strstr(iter, "BEGIN_GROUP = BAND_")) { ++nbBand; char dummy[80], nameChar[80]; sscanf(iter, "%19c %s", dummy, nameChar); ossimString bandCur = ossimString(nameChar).before("\n"); theBandNameList = theBandNameList + bandCur + " "; ++iter; } theBandNameList.trim(); //--- Multispectral if(theBandId=="Multi") { std::vector<ossimString> bandList; bandList = theBandNameList.split(" "); theAbsCalFactors = std::vector<double>(bandList.size(), 1.); for(unsigned int j=0; j<bandList.size(); j++) { ossimString begin_group = "BEGIN_GROUP = BAND_" + bandList[j]; strptr = strstr(filebuf, begin_group.c_str()); if(!strptr && traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } else { char dummy[80], nameChar[80]; sscanf(strptr, "%19c %s", dummy, nameChar); ossimString bandCur = ossimString(nameChar).before("\n"); if(!strptr && traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } else { if(bandList[j] == bandCur) { strptr = strstr(strptr, "\tabsCalFactor = "); sscanf(strptr, "%16c %s", dummy, nameChar); theAbsCalFactors[j] = ossimString(nameChar).before(";").toDouble(); } } } } } //--- Panchromatic else { theAbsCalFactors = std::vector<double>(1, 1.); if(getEndOfLine( strptr, ossimString("\tabsCalFactor = "), "%16c %s", temp)) theAbsCalFactors[0] = ossimString(temp).before(";").toDouble(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // SatID: //--- if(getEndOfLine( strptr, ossimString("\n\tsatId ="), "%9c %s", temp)) theSatID = ossimString(temp).after("\"").before("\";"); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } //--- // TLCTime: //--- if(getEndOfLine( strptr, ossimString("\n\tTLCTime ="), "%11c %s", temp)) theTLCDate = ossimString(temp).before("\";"); else { if(getEndOfLine( strptr, ossimString("\n\tfirstLineTime ="), "%17c %s", temp)) theTLCDate = ossimString(temp).before("\";"); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sun Azimuth: //--- if(getEndOfLine( strptr, ossimString("\n\tsunAz ="), "%9c %s", temp)) theSunAzimuth = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( strptr, ossimString("\n\tmeanSunAz ="), "%13c %s", temp)) theSunAzimuth = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sun Elevation: //--- if(getEndOfLine( filebuf, ossimString("\n\tsunEl ="), "%9c %s", temp)) theSunElevation = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( filebuf, ossimString("\n\tmeanSunEl ="), "%13c %s", temp)) theSunElevation = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sun Azimuth: //--- if(getEndOfLine( strptr, ossimString("\n\tsunAz ="), "%9c %s", temp)) theSunAzimuth = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( strptr, ossimString("\n\tmeanSunAz ="), "%13c %s", temp)) theSunAzimuth = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sun Elevation: //--- if(getEndOfLine( filebuf, ossimString("\n\tsunEl ="), "%9c %s", temp)) theSunElevation = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( filebuf, ossimString("\n\tmeanSunEl ="), "%13c %s", temp)) theSunElevation = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sat Azimuth: //--- if(getEndOfLine( strptr, ossimString("\n\tsatAz ="), "%9c %s", temp)) theSatAzimuth = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( strptr, ossimString("\n\tmeanSatAz ="), "%13c %s", temp)) theSatAzimuth = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // Sat Elevation: //--- if(getEndOfLine( filebuf, ossimString("\n\tsatEl ="), "%9c %s", temp)) theSatElevation = ossimString(temp).before(";").toFloat64(); else { if(getEndOfLine( filebuf, ossimString("\n\tmeanSatEl ="), "%13c %s", temp)) theSatElevation = ossimString(temp).before(";").toFloat64(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } } //--- // TDILevel: //--- if(getEndOfLine( strptr, ossimString("\n\tTDILevel = "), "%13c %s", temp)) theTDILevel = ossimString(temp).before(";").toInt(); else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): " << "\n\tAborting construction. Error encountered parsing " << "presumed meta-data file." << std::endl; delete [] filebuf; return false; } } delete [] filebuf; filebuf = 0; if (traceExec()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimQuickbirdRpcModel::parseMetaData(data_file): returning..." << std::endl; } return true; }
bool ossimQuickbirdMetaData::getMapProjectionKwl( const ossimFilename& imd_file, ossimKeywordlist& kwl ) { static const char MODULE[] = "ossimQuickbirdMetaData::getMapProjectionKwl"; if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " entered...\n"; } bool result = false; if( imd_file.exists() ) { FILE* fptr = fopen (imd_file.c_str(), "r"); if (fptr) { char* strptr(NULL); //--- // Read the file into a buffer: //--- ossim_int32 fileSize = static_cast<ossim_int32>(imd_file.fileSize()); char* filebuf = new char[fileSize]; fread(filebuf, 1, fileSize, fptr); strptr = filebuf; fclose(fptr); ossimString imd_key; ossimString tempStr; std::string key; std::string value; // Loop until we find all our keys or bust out with error. while ( 1 ) { // Verify map projected. imd_key = "BEGIN_GROUP = MAP_PROJECTED_PRODUCT"; if ( strstr( filebuf, imd_key.c_str() ) == NULL ) { break; // Not a map projected product. } // Get datum: if( getEndOfLine( strptr, ossimString("\n\tdatumName = "), "%13c %s", tempStr) ) { if ( tempStr.contains("WE") ) { key = "dataum"; value = "WGE"; kwl.addPair(key, value); } else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "Unhandled datum: " << tempStr << "\n"; } } } // Get projection: if( getEndOfLine( strptr, ossimString("\n\tmapProjName = "), "%15c %s", tempStr) ) { if ( tempStr.contains("UTM") ) { key = "type"; value = "ossimUtmProjection"; kwl.addPair(key, value); } else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "Unhandled projection name: " << tempStr << "\n"; } } } // Get projection: if( getEndOfLine( strptr, ossimString("\n\tmapProjName = "), "%15c %s", tempStr) ) { if ( tempStr.contains("UTM") ) { key = "type"; value = "ossimUtmProjection"; kwl.addPair(key, value); // Get UTM zone: if( getEndOfLine( strptr, ossimString("\n\tmapZone = "), "%11c %s", tempStr) ) { key = "zone"; value = tempStr.trim(";").string(); kwl.addPair(key, value); } else { break; } // Get UTM hemisphere: if( getEndOfLine( strptr, ossimString("\n\tmapHemi = "), "%11c %s", tempStr) ) { key = "hemisphere"; tempStr = tempStr.trim(";"); tempStr = tempStr.trim("\""); value = tempStr.string(); kwl.addPair(key, value); } else { break; } } // End UTM: } // Get projection units: std::string units; if( getEndOfLine( strptr, ossimString("\n\tproductUnits = "), "%16c %s", tempStr) ) { if ( tempStr == "\"M\";" ) { key = "units"; units = "meters"; kwl.addPair(key, units); } else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "Unhandled units: " << tempStr << "\n"; } } } // Get projection tie point: ossimDpt dpt; dpt.makeNan(); if( getEndOfLine( strptr, ossimString("\n\toriginX = "), "%11c %s", tempStr) ) { tempStr = tempStr.trim(";"); dpt.x = tempStr.toFloat64(); } else { break; } if( getEndOfLine( strptr, ossimString("\n\toriginY = "), "%11c %s", tempStr) ) { tempStr = tempStr.trim(";"); dpt.y = tempStr.toFloat64(); } else { break; } if ( dpt.hasNans() == false ) { key = "tie_point_units"; kwl.addPair(key, units); key = "tie_point_xy"; value = dpt.toString().string(); kwl.addPair( key, value ); } else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "tie point has nans!"; } break; } // Get projection scale: dpt.makeNan(); if( getEndOfLine( strptr, ossimString("\n\tcolSpacing = "), "%14c %s", tempStr) ) { tempStr = tempStr.trim(";"); dpt.x = tempStr.toFloat64(); } else { break; } if( getEndOfLine( strptr, ossimString("\n\trowSpacing = "), "%14c %s", tempStr) ) { tempStr = tempStr.trim(";"); dpt.y = tempStr.toFloat64(); } else { break; } if ( dpt.hasNans() == false ) { key = "pixel_scale_units"; kwl.addPair(key, units); key = "pixel_scale_xy"; value = dpt.toString().string(); kwl.addPair( key, value ); } else { if(traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "scale has nans!"; } break; } //--- // End of key look up. If we get here set the status to true and // bust out of loop. //--- result = true; break; } if ( result == false ) { if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "ERROR: Missing or unhandled key in metadat: " << imd_key << "\n"; } } delete [] filebuf; filebuf = 0; } else { if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "ossimQuickbirdRpcModel::parseMetaData(imd_file) DEBUG:" << "\nCould not open Meta data file: " << imd_file << "\nreturning with error...\n"; } } } if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " exit status = " << (result?"true":"false") << "\n"; } return result; }
bool ossimNitfFile::parseFile(const ossimFilename& file) { if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNitfFile::parseFile: " << "endtered......" << std::endl; } std::ifstream in(file.c_str(), std::ios::in|std::ios::binary); if (in.fail()) { if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNitfFile::parseFile: " << "Could not open file: " << file.c_str() << "\nReturning..." << std::endl; } return false; } if(theNitfFileHeader.valid()) { theNitfFileHeader = 0; } char temp[10]; in.read(temp, 9); in.seekg(0, std::ios::beg); temp[9] ='\0'; theFilename = file; ossimString s(temp); if(s == "NITF02.00") { if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG: NITF Version 2.0" << std::endl; } theNitfFileHeader = new ossimNitfFileHeaderV2_0; } else if ( (s == "NITF02.10") || (s == "NSIF01.00") ) { if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG: NITF Version 2.1" << std::endl; } theNitfFileHeader = new ossimNitfFileHeaderV2_1; } else { if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNitfFile::parseFile: " << "Not an NITF file!" << std::endl; ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNitfFile::parseFile: returning...........false" << "endtered......" << std::endl; } return false; } if(theNitfFileHeader.valid()) { try { theNitfFileHeader->parseStream(in); // Sanity check the size before going on: if ( file.fileSize() < theNitfFileHeader->getFileSize() ) { if (traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "ossimNitfFile::parseFile ERROR:\n" << "File size is less than file length in header!" << "\nNITF FL field: " << theNitfFileHeader->getFileSize() << "\nActual file length: " << file.fileSize() << std::endl; } return false; } } catch( const ossimException& e ) { if (traceDebug()) { ossimNotify(ossimNotifyLevel_WARN) << "ossimNitfFile::parseFile caught exception:\n" << e.what() << std::endl; } return false; } } if (traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNitfFile::parseFile: returning...........true" << std::endl; } return true; }