diff --git a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h index a7be55846dcd7d74afdd9e3909c8dd08fb1718b2..2f7a6ebdecfdff2e4a1c593b604c016f4ef9ffe0 100644 --- a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h +++ b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h @@ -61,7 +61,6 @@ protected: */ ossimQuickbirdMetaData* theSupportData; - TYPE_DATA }; diff --git a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h index b79c705c8f6fa0d677d23f8ead05b7ff19a38dcf..98dbe0aecb3fb122dcdab4f1baef2aaa4d7f2527 100755 --- a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h +++ b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h @@ -114,6 +114,7 @@ private: ossimString theTLCDate; ossim_float64 theSunAzimuth; ossim_float64 theSunElevation; + std::vector<ossim_float64> theAbsCalFactors; /*ossim_uint32 theNumBands;*/ /*ossimString theBandName;*/ /*ossim_uint32 theNumBands;*/ diff --git a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp index 5fecfd9394f5ff5132cc995a5c3f11e32ee55cf7..d816078fc39075d64e9c7057015830cbffa29f85 100755 --- a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp +++ b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp @@ -37,6 +37,7 @@ ossimQuickbirdMetaData::ossimQuickbirdMetaData() theSunAzimuth(0.0), theSunElevation(0.0) { + theAbsCalFactors.clear(); } ossimQuickbirdMetaData::~ossimQuickbirdMetaData() @@ -75,8 +76,9 @@ void ossimQuickbirdMetaData::clearFields() theBandId = "Unknown"; theSatID = "Unknown"; theTLCDate = "Unknown", - theSunAzimuth = 0.0; + theSunAzimuth = 0.0; theSunElevation = 0.0; + theAbsCalFactors.clear(); } std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const @@ -90,7 +92,13 @@ std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const << "\n TLC date: " << theTLCDate << "\n Sun Azimuth: " << theSunAzimuth << "\n Sun Elevation: " << theSunElevation - << "\n" + << "\n abs Calibration Factors: " + << std::endl; + for(unsigned int i=0; i<theAbsCalFactors.size(); i++) + { + out<<theAbsCalFactors[i] << " "; + } + out<< "\n" << "\n---------------------------------------------------------" << "\n " << std::endl; return out; @@ -135,7 +143,12 @@ bool ossimQuickbirdMetaData::saveState(ossimKeywordlist& kwl, ossimKeywordNames::ELEVATION_ANGLE_KW, theSunElevation, true); - +//****************************************************** +// kwl.add(prefix, +// "absCalFactors", +// theAbsCalFactors, +// true); +//****************************************************** return true; } @@ -246,6 +259,7 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) //--- // Generation time: //--- + if(getEndOfLine( strptr, ossimString("\ngenerationTime ="), "%17c %s", temp)) theGenerationDate = ossimString(temp).before(";"); else @@ -281,7 +295,67 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) } } - + //--- + // absCalFactors: + //--- + //--- Multispectral + std::cout<<theBandId<<std::endl; + if(theBandId=="Multi") + { + std::vector<ossimString> bandList(4, "B"); + bandList[1] = "G"; + bandList[2] = "R"; + bandList[3] = "N"; + for(unsigned int j=0; j<bandList.size(); j++) + { + ossimString begin_group = "\nBEGIN_GROUP = BAND_" + bandList[j]; + if(getEndOfLine( strptr, ossimString(begin_group), "%20c %s", temp)) + { + ossimString bandCur = ossimString(temp).before("\n"); + std::cout<<bandCur<<bandList[j]<<"--"<<std::endl; + + bool fine=false; + if(bandList[j] == bandCur) + { + std::cout<<bandCur<<"--"<<bandList[j]<<"--"<<std::endl; + if(getEndOfLine( strptr, ossimString("\n\tabsCalFactor = "), "%17c %s", temp)) + { + //std::cout<<strptr<<std::endl; + //std::cout<<"==================================="<<std::endl; + std::cout<<ossimString(temp).before(";").toFloat64()<<std::endl; + fine = true; + } + } + if(fine==false && traceDebug()) + { + std::cout<<"exceptionnnnnn"<<std::endl; + 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(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; + } + } + } + } + //--- Panchromatic + else + { + } //--- // SatID: //--- @@ -320,7 +394,7 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) return false; } } - +//std::cout<<strptr<<std::endl; //*** // Sun Azimuth: @@ -424,17 +498,27 @@ bool ossimQuickbirdMetaData::parseATTData(const ossimFilename& data_file) //***************************************************************************** bool ossimQuickbirdMetaData::getEndOfLine( char * fileBuf, ossimString lineBeginning, char * format, ossimString & name) { - char * res = strstr(fileBuf, lineBeginning.c_str()); - if (!res) - { - return false; - } - // if the lineBeginning is found, update the start pointer adress - fileBuf = res; - + //char * res = strstr(fileBuf, lineBeginning.c_str()); + //if (!res) + //{ + // return false; + // } + //// if the lineBeginning is found, update the start pointer adress + //fileBuf = res; + + //char dummy[80], nameChar[80]; + //sscanf(res, format, dummy, nameChar); + //name = ossimString(nameChar); + + char * res = strstr(fileBuf, lineBeginning.c_str()); + if(!res) + { + return false; + } + fileBuf = strstr(fileBuf, lineBeginning.c_str()); char dummy[80], nameChar[80]; - sscanf(res, format, dummy, nameChar); + sscanf(fileBuf, format, dummy, nameChar); name = ossimString(nameChar); - + return true; }