diff --git a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp index d816078fc39075d64e9c7057015830cbffa29f85..e010ddf721e82851b61902a593c4f49c51ffcf12 100755 --- a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp +++ b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp @@ -143,12 +143,33 @@ bool ossimQuickbirdMetaData::saveState(ossimKeywordlist& kwl, ossimKeywordNames::ELEVATION_ANGLE_KW, theSunElevation, true); -//****************************************************** -// kwl.add(prefix, -// "absCalFactors", -// theAbsCalFactors, -// true); -//****************************************************** + + if(theBandId=="Multi") + { + kwl.add(prefix, + "B_band_absCalFactor", + theAbsCalFactors[0], + true); + kwl.add(prefix, + "G_band_absCalFactor", + theAbsCalFactors[1], + true); + kwl.add(prefix, + "R_band_absCalFactor", + theAbsCalFactors[2], + true); + kwl.add(prefix, + "N_band_absCalFactor", + theAbsCalFactors[3], + true); + } + else + { + kwl.add(prefix, + "absCalFactor", + theAbsCalFactors[0], + true); + } return true; } @@ -209,6 +230,46 @@ bool ossimQuickbirdMetaData::loadState(const ossimKeywordlist& kwl, theSunElevation = s.toFloat64(); } + if(theBandId=="Multi") + { + theAbsCalFactors = std::vector<ossim_float64>(4, 1); + lookup = kwl.find(prefix, "B_band_absCalFactor"); + if (lookup) + { + s = lookup; + theAbsCalFactors[0] = s.toFloat64(); + } + lookup = kwl.find(prefix, "G_band_absCalFactor"); + if (lookup) + { + s = lookup; + theAbsCalFactors[1] = s.toFloat64(); + } + lookup = kwl.find(prefix, "R_band_absCalFactor"); + if (lookup) + { + s = lookup; + theAbsCalFactors[2] = s.toFloat64(); + } + lookup = kwl.find(prefix, "N_band_absCalFactor"); + if (lookup) + { + s = lookup; + theAbsCalFactors[3] = s.toFloat64(); + } + } + else if (theBandId=="P") + { + theAbsCalFactors = std::vector<ossim_float64>(1, 1); + lookup = kwl.find(prefix, "absCalFactor"); + if (lookup) + { + s = lookup; + theAbsCalFactors[0] = s.toFloat64(); + } + } + + return true; } @@ -302,60 +363,73 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) std::cout<<theBandId<<std::endl; if(theBandId=="Multi") { + theAbsCalFactors = std::vector<ossim_float64>(4, 1); 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) + ossimString begin_group = "BEGIN_GROUP = BAND_" + bandList[j]; + strptr = strstr(filebuf, begin_group.c_str()); + if(!strstr && 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(!strstr && 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(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; - } + strptr = strstr(strptr, "\tabsCalFactor = "); + sscanf(strptr, "%16c %s", dummy, nameChar); + std::cout<<ossimString(nameChar).before(";").toFloat64()<<std::endl; + theAbsCalFactors[j] = ossimString(nameChar).before(";").toFloat64(); } - 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 { + theAbsCalFactors = std::vector<ossim_float64>(1, 1); + if(getEndOfLine( strptr, ossimString("\tabsCalFactor = "), "%16c %s", temp)) + theAbsCalFactors[0] = 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; + } + } } + //--- // SatID: //--- @@ -394,7 +468,6 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) return false; } } -//std::cout<<strptr<<std::endl; //*** // Sun Azimuth: