From 32f18cef85a4d5d406e91ebc83a47bcaaf27f05d Mon Sep 17 00:00:00 2001 From: Cyrille Valladeau <cyrille.valladeau@c-s.fr> Date: Thu, 4 Jun 2009 17:22:21 +0200 Subject: [PATCH] ENH: Read Quickbird metadatas for Radiometric Calibration --- Code/IO/otbImageMetadataInterface.cxx | 166 ++++++++++++++++-- .../Code/IO/otbImageMetadataInterfaceTest.cxx | 26 ++- .../ossim/projection/ossimQuickbirdRpcModel.h | 19 +- .../support_data/ossimQuickbirdMetaData.h | 9 +- .../projection/ossimQuickbirdRpcModel.cpp | 76 +++++++- .../projection/ossimSensorModelFactory.cpp | 1 - .../support_data/ossimQuickbirdMetaData.cpp | 124 ++++++++----- 7 files changed, 344 insertions(+), 77 deletions(-) mode change 100644 => 100755 Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h mode change 100644 => 100755 Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp diff --git a/Code/IO/otbImageMetadataInterface.cxx b/Code/IO/otbImageMetadataInterface.cxx index 9f3840debf..3cc538b61f 100644 --- a/Code/IO/otbImageMetadataInterface.cxx +++ b/Code/IO/otbImageMetadataInterface.cxx @@ -431,6 +431,30 @@ ImageMetadataInterface::VariableLengthVectorType outputValuesVariableLengthVector[0] = 1156.9; } } + else if(IsQuickbird(dict)) + { + + std::string keyBId= "support_data.band_id"; + ossimString keywordStringBId = kwl.find(keyBId.c_str()); + if( keywordStringBId == ossimString("P") ) + { + outputValuesVariableLengthVector.SetSize(1); + outputValuesVariableLengthVector.Fill(1381.79); + } + else if(keywordStringBId == ossimString("Multi") ) + { + outputValuesVariableLengthVector.SetSize(4); + outputValuesVariableLengthVector[0]=1924.59; + outputValuesVariableLengthVector[1]=1843.08; + outputValuesVariableLengthVector[2]=1574.77; + outputValuesVariableLengthVector[3]=1113.71; + } + else + { + itkExceptionMacro(<<"Invalid bandID "<<keywordStringBId); + } + + } return outputValuesVariableLengthVector; @@ -500,7 +524,7 @@ int ImageMetadataInterface::GetDay( const MetaDataDictionaryType & dict ) const if(IsQuickbird(dict)) { - key = "support_data.generation_date"; + key = "support_data.tlc_date"; separatorList = "-T"; } @@ -509,10 +533,19 @@ int ImageMetadataInterface::GetDay( const MetaDataDictionaryType & dict ) const //std::string key= "support_data.image_date"; std::vector<ossimString> keywordStrings = keywordString.split(separatorList); //assert(keywordStrings.size() > 2); + if(keywordStrings.size() <= 2) itkExceptionMacro(<<"Invalid Day"); - return keywordStrings[2].toInt(); + ossimString day = keywordStrings[2]; + if(IsIkonos(dict)) + { + // MM/DD/YY + day = keywordStrings[1]; + } + + + return day.toInt(); } @@ -545,7 +578,7 @@ int ImageMetadataInterface::GetMonth( const MetaDataDictionaryType & dict ) cons if(IsQuickbird(dict)) { - key = "support_data.generation_date"; + key = "support_data.tlc_date"; separatorList = "-T"; } @@ -558,12 +591,17 @@ int ImageMetadataInterface::GetMonth( const MetaDataDictionaryType & dict ) cons if(keywordStrings.size() <= 2) itkExceptionMacro(<<"Invalid Month"); - return keywordStrings[1].toInt(); + ossimString month = keywordStrings[1]; + if(IsIkonos(dict)) + { + month = keywordStrings[0]; + } + + return month.toInt(); } int ImageMetadataInterface::GetYear( const MetaDataDictionaryType & dict ) const { -std::cout<<"ImageMetadataInterface::GetYear"<<std::endl; //The image date in the ossim metadata has the form: 2007-10-03T03:17:16.973000 ImageKeywordlistType imageKeywordlist; @@ -591,7 +629,7 @@ std::cout<<"ImageMetadataInterface::GetYear"<<std::endl; if(IsQuickbird(dict)) { - key = "support_data.generation_date"; + key = "support_data.tlc_date"; separatorList = "-T"; } @@ -607,6 +645,7 @@ std::cout<<"ImageMetadataInterface::GetYear"<<std::endl; // For Ikonos 2002 is 02 if(IsIkonos(dict)) { + year = keywordStrings[2]; year = "20"+year; } @@ -628,8 +667,6 @@ std::string ImageMetadataInterface::GetSensorID( const MetaDataDictionaryType & ossimString keywordString = kwl.find(key.c_str()); std::string output(keywordString.chars()); -//std::cout<< "sensorID : "<<output<<std::endl; - return output; } @@ -794,21 +831,124 @@ ImageMetadataInterface::VariableLengthVectorType ImageMetadataInterface::VariableLengthVectorType ImageMetadataInterface::GetQuickbirdPhysicalBias( const MetaDataDictionaryType & dict ) const { + ImageKeywordlistType ImageKeywordlist; + + if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) + { + itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist); + } + ossimKeywordlist kwl; + ImageKeywordlist.convertToOSSIMKeywordlist(kwl); + VariableLengthVectorType outputValuesVariableLengthVector; - outputValuesVariableLengthVector.SetSize(GetNumberOfBands(dict)); - outputValuesVariableLengthVector.Fill(0.0); + std::string keyBId= "support_data.band_id"; + ossimString keywordStringBId = kwl.find(keyBId.c_str()); + if( keywordStringBId == ossimString("P") ) + { + outputValuesVariableLengthVector.SetSize(1); + outputValuesVariableLengthVector.Fill(0.0); + } + else if(keywordStringBId == ossimString("Multi") ) + { + outputValuesVariableLengthVector.SetSize(4); + outputValuesVariableLengthVector.Fill(0.0); + } + else + { + itkExceptionMacro(<<"Invalid bandID "<<keywordStringBId); + } return outputValuesVariableLengthVector; } ImageMetadataInterface::VariableLengthVectorType - ImageMetadataInterface::GetQuickbirdPhysicalGain( const MetaDataDictionaryType & dict ) const +ImageMetadataInterface::GetQuickbirdPhysicalGain( const MetaDataDictionaryType & dict ) const { + //Values are different pre/post 2003-06-06 production date, find out where we are + ImageKeywordlistType ImageKeywordlist; + + if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) + { + itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist); + } + ossimKeywordlist kwl; + ImageKeywordlist.convertToOSSIMKeywordlist(kwl); + std::string key= "support_data.generation_date"; + ossimString keywordString = kwl.find(key.c_str()); + std::string output(keywordString.chars()); + + //The Ikonos production date has the format MM/DD/YY + ossimString separatorList = "-"; + std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (keywordStrings.size() < 3) + { + itkGenericExceptionMacro(<<"Could not retrieve the production date for Ikonos"); + } + + int productionYear = keywordStrings[0].toInt(); + int productionMonth = keywordStrings[1].toInt(); + int productionDay = keywordStrings[2].toInt(); + bool isPost20030606 = false; + if(productionYear > 2003) + isPost20030606 = true; + else + { + if(productionYear == 2003) + { + if(productionMonth > 6) + isPost20030606 = true; + else + if(productionDay >= 6) + isPost20030606 = true; + } + } + + //Value computed from + // http://www.geoeye.com/CorpSite/assets/docs/technical-papers/2009/IKONOS_Esun_Calculations.pdf + // to get the equivalent of the SPOT alpha + VariableLengthVectorType gain; + gain.SetSize(5); + if (isPost20030606) + { + gain[0] = 0.16200;//Pan + gain[1] = 0.23590;//Blue + gain[2] = 0.14530;//Green + gain[3] = 0.17850;//Red + gain[4] = 0.13530;//NIR + } + else + { + gain[0] = 1;//Pan + gain[1] = 1;//Blue + gain[2] = 1;//Green + gain[3] = 1;//Red + gain[4] = 1;//NIR + } + VariableLengthVectorType outputValuesVariableLengthVector; - outputValuesVariableLengthVector.SetSize(GetNumberOfBands(dict)); - outputValuesVariableLengthVector.Fill(0.0); + std::string keyBId= "support_data.band_id"; + ossimString keywordStringBId = kwl.find(keyBId.c_str()); + if (keywordStringBId == ossimString("P") ) + { + outputValuesVariableLengthVector.SetSize(1); + outputValuesVariableLengthVector[0]=gain[0]; + } + // Multi spectral + else if(keywordStringBId == ossimString("Multi") ) + { + outputValuesVariableLengthVector.SetSize(4); + outputValuesVariableLengthVector[0]=gain[1]; + outputValuesVariableLengthVector[1]=gain[2]; + outputValuesVariableLengthVector[2]=gain[3]; + outputValuesVariableLengthVector[3]=gain[4]; + } + else + { + itkExceptionMacro(<<"Invalid bandID "<<keywordStringBId); + } + return outputValuesVariableLengthVector; } diff --git a/Testing/Code/IO/otbImageMetadataInterfaceTest.cxx b/Testing/Code/IO/otbImageMetadataInterfaceTest.cxx index fd37bb808b..6f4c27c171 100644 --- a/Testing/Code/IO/otbImageMetadataInterfaceTest.cxx +++ b/Testing/Code/IO/otbImageMetadataInterfaceTest.cxx @@ -23,30 +23,26 @@ #include "itkExceptionObject.h" #include <iostream> -//#include "otbVectorImage.h" -//#include "otbImageFileReader.h" -//#include "otbImageMetadataInterface.h" -#include "support_data/ossimQuickbirdMetaData.h" -#include "base/ossimFilename.h" +#include "otbVectorImage.h" +#include "otbImageFileReader.h" +#include "otbImageMetadataInterface.h" +//#include "support_data/ossimQuickbirdMetaData.h" +//#include "base/ossimFilename.h" int otbImageMetadataInterfaceTest (int argc, char* argv[]) { - - // Verify the number of parameters in the command line const char * inputFilename = argv[1]; -/* +std::cout<<"pffffffffffff????????,"<<std::endl; typedef otb::VectorImage< double, 2 > InputImageType; typedef otb::ImageFileReader< InputImageType > ImageReaderType; - + std::cout<<"ImageMetadataInterface????????,"<<std::endl; ImageReaderType::Pointer reader = ImageReaderType::New(); reader->SetFileName( inputFilename ); -// reader->GenerateOutputInformation(); - reader->UpdateOutputInformation(); - + std::cout<<"ImageMetadataInterface"<<std::endl; otb::ImageMetadataInterface::Pointer lImageMetadata = otb::ImageMetadataInterface::New(); - + std::cout<<"GetSensorID"<<std::endl; std::cout<<"GetSensorID: "<<lImageMetadata->GetSensorID(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; std::cout<<"GetPhysicalGain: "<<lImageMetadata->GetPhysicalGain(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; std::cout<<"GetPhysicalBias: "<<lImageMetadata->GetPhysicalBias(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; @@ -55,13 +51,13 @@ int otbImageMetadataInterfaceTest (int argc, char* argv[]) std::cout<<"GetYear: "<<lImageMetadata->GetYear(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; std::cout<<"GetSolarIrradiance: "<<lImageMetadata->GetSolarIrradiance(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; std::cout<<"GetSunElevation: "<<lImageMetadata->GetSunElevation(reader->GetOutput()->GetMetaDataDictionary())<<std::endl; -*/ +/* ossimQuickbirdMetaData * meataData = new ossimQuickbirdMetaData(); meataData->open(ossimFilename(inputFilename)); std::cout<<"TEST : OPEN DONE"<<std::endl; delete meataData; - +*/ return EXIT_SUCCESS; } diff --git a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h index 5ab7fc5031..a7be55846d 100644 --- a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h +++ b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h @@ -19,8 +19,10 @@ #define ossimQuickbirdRpcModel_HEADER #include <ossim/projection/ossimRpcModel.h> +#include <ossim/support_data/ossimQuickbirdMetaData.h> class ossimFilename; +class ossimQuickbirdMetaData; /*!**************************************************************************** * @@ -32,7 +34,8 @@ class ossimQuickbirdRpcModel : public ossimRpcModel public: ossimQuickbirdRpcModel(); ossimQuickbirdRpcModel(const ossimQuickbirdRpcModel& rhs); - + ~ossimQuickbirdRpcModel(); + virtual ossimObject* dup() const; virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0) const; @@ -44,11 +47,21 @@ public: protected: + //void finishConstruction(); + void parseMetaData(const ossimFilename& metadata); + void parseRpcData (const ossimFilename& rpcdata); bool parseNitfFile(const ossimFilename& file); bool parseTiffFile(const ossimFilename& file); - - +/* + ossimQuickbirdMetaData* getTheSupportData() + { + return theSupportData; + } +*/ + ossimQuickbirdMetaData* theSupportData; + + TYPE_DATA }; diff --git a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h old mode 100644 new mode 100755 index 896293879a..306c7f6de5 --- a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h +++ b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h @@ -92,6 +92,11 @@ public: bool parseEPHData(const ossimFilename& data_file); + ossimString getSatID() + { + return theSatID; + } + /***************************************** *parseATTData EPH GEO IMD RPB TIL * @@ -99,8 +104,10 @@ public: private: - ossimString theGenerationTime; + ossimString theGenerationDate; ossimString theBandId; + ossimString theSatID; + ossimString theTLCDate; ossim_float64 theSunAzimuth; ossim_float64 theSunElevation; /*ossim_uint32 theNumBands;*/ diff --git a/Utilities/otbossim/src/ossim/projection/ossimQuickbirdRpcModel.cpp b/Utilities/otbossim/src/ossim/projection/ossimQuickbirdRpcModel.cpp index 39449d77c7..2040ea9981 100644 --- a/Utilities/otbossim/src/ossim/projection/ossimQuickbirdRpcModel.cpp +++ b/Utilities/otbossim/src/ossim/projection/ossimQuickbirdRpcModel.cpp @@ -33,13 +33,29 @@ RTTI_DEF1(ossimQuickbirdRpcModel, "ossimQuickbirdRpcModel", ossimRpcModel); ossimQuickbirdRpcModel::ossimQuickbirdRpcModel() - :ossimRpcModel() + :ossimRpcModel(), + theSupportData(0) { + theSupportData = new ossimQuickbirdMetaData(); } ossimQuickbirdRpcModel::ossimQuickbirdRpcModel(const ossimQuickbirdRpcModel& rhs) : ossimRpcModel(rhs) { +// if (theSupportData) +// { +// delete theSupportData; +// } +// *(theSupportData) = *(rhs.getTheSupportData()); +} + +ossimQuickbirdRpcModel::~ossimQuickbirdRpcModel() +{ + if (theSupportData) + { + delete theSupportData; + theSupportData = 0; + } } ossimObject* ossimQuickbirdRpcModel::dup() const @@ -85,11 +101,32 @@ bool ossimQuickbirdRpcModel::parseNitfFile(const ossimFilename& file) ossimQuickbirdTile tileHdr; ossimFilename tileFile = file; ossimFilename rpcFile = file; + ossimFilename metadataFile = file; tileFile = tileFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); rpcFile = rpcFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); + metadataFile = metadataFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); bool useInternalRpcTags = false; + if ( !theSupportData ) + { + theSupportData = new ossimQuickbirdMetaData(); + } + + metadataFile = metadataFile.setExtension("IMD"); + if(!theSupportData->open(metadataFile)) + { + metadataFile = metadataFile.setExtension("imd"); + if(!theSupportData->open(tileFile)) + { + return false; + } + } + else + { + theSensorID = theSupportData->getSatID(); + } + if(!hdr.open(rpcFile)) { rpcFile = rpcFile.setExtension("RPB"); @@ -338,12 +375,35 @@ bool ossimQuickbirdRpcModel::parseTiffFile(const ossimFilename& file) ossimQuickbirdRpcHeader hdr; ossimQuickbirdTile tileHdr; + ossimFilename tileFile = file; ossimFilename rpcFile = file; + ossimFilename metadataFile = file; tileFile = tileFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); rpcFile = rpcFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); - + metadataFile = metadataFile.replaceAllThatMatch("_R[0-9]+C[0-9]+"); + + if ( !theSupportData ) + { + theSupportData = new ossimQuickbirdMetaData(); + } + + metadataFile = metadataFile.setExtension("IMD"); + if(!theSupportData->open(metadataFile)) + { + metadataFile = metadataFile.setExtension("imd"); + if(!theSupportData->open(tileFile)) + { + return false; + } + } + else + { + theSensorID = theSupportData->getSatID(); + } + + if(!hdr.open(rpcFile)) { rpcFile = rpcFile.setExtension("RPB"); @@ -492,11 +552,23 @@ bool ossimQuickbirdRpcModel::parseTiffFile(const ossimFilename& file) bool ossimQuickbirdRpcModel::saveState(ossimKeywordlist& kwl, const char* prefix) const { + if(theSupportData) + { + ossimString supportPrefix = ossimString(prefix) + "support_data."; + theSupportData->saveState(kwl, supportPrefix); + } + return ossimRpcModel::saveState(kwl, prefix); } bool ossimQuickbirdRpcModel::loadState(const ossimKeywordlist& kwl, const char* prefix) { + if(theSupportData) + { + ossimString supportPrefix = ossimString(prefix) + "support_data."; + theSupportData->loadState(kwl, supportPrefix); + } + return ossimRpcModel::loadState(kwl, prefix); } diff --git a/Utilities/otbossim/src/ossim/projection/ossimSensorModelFactory.cpp b/Utilities/otbossim/src/ossim/projection/ossimSensorModelFactory.cpp index 7bfabb4000..a39002d97b 100644 --- a/Utilities/otbossim/src/ossim/projection/ossimSensorModelFactory.cpp +++ b/Utilities/otbossim/src/ossim/projection/ossimSensorModelFactory.cpp @@ -506,7 +506,6 @@ bool ossimSensorModelFactory::isTileMap(const ossimFilename& filename)const temp.downcase(); if(temp.ext()=="otb") { - std::cout << "TileMap format "<<std::endl; return true; } return false; diff --git a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp old mode 100644 new mode 100755 index 017100a061..f35cf3f159 --- a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp +++ b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp @@ -29,11 +29,12 @@ static ossimTrace traceDebug ("ossimQuickbirdMetaData:debug"); ossimQuickbirdMetaData::ossimQuickbirdMetaData() : - theGenerationTime("Unknown"), + theGenerationDate("Unknown"), theBandId("Unknown"), + theSatID("Unknown"), + theTLCDate("Unknown"), theSunAzimuth(0.0), theSunElevation(0.0) - { } @@ -51,18 +52,9 @@ bool ossimQuickbirdMetaData::open(const ossimFilename& imageFile) //if the Quickbird tif is 02APR01105228-M1BS-000000128955_01_P001.TIF //the metadata file will be 02APR01105228-M1BS-000000128955_01_P001.IMD -// ossimString separator("."); - //ossimString filenamebase = imageFile.fileNoExtension(); -// std::vector< ossimString > filenameparts = filenamebase.split(separator); -// metadatafile += ".IMD"; -// metadatafile.setPath(imageFile.path()); - -std::cout<<"ImageFile : "<<imageFile<<std::endl; ossimFilename metadatafile = imageFile; metadatafile.setExtension(ossimString("IMD")); -std::cout<<"metadatafile : "<<metadatafile<<std::endl; - if( parseMetaData(metadatafile) == false ) { if(traceDebug()) @@ -72,30 +64,18 @@ std::cout<<"metadatafile : "<<metadatafile<<std::endl; } return false; } - - ossimFilename geofile = imageFile; - geofile.setExtension(ossimString("GEO")); -std::cout<<"geofile : "<<geofile<<std::endl; - if( parseGEOData(geofile) == false ) - { - if(traceDebug()) - { - ossimNotify(ossimNotifyLevel_WARN) - << MODULE << " errors parsing GEO" << std::endl; - } - return false; - } - return true; } void ossimQuickbirdMetaData::clearFields() { + theGenerationDate = "Unknown"; + theBandId = "Unknown"; + theSatID = "Unknown"; + theTLCDate = "Unknown", theSunAzimuth = 0.0; theSunElevation = 0.0; - theBandId = "Unknown"; - theGenerationTime = "Unknown"; } std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const @@ -103,8 +83,10 @@ std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const out << "\n----------------- Info on Quickbird Image -------------------" << "\n " - << "\n Generation date: " << theGenerationTime + << "\n Generation date: " << theGenerationDate << "\n Band Id: " << theBandId + << "\n Sat Id: " << theSatID + << "\n TLC date: " << theTLCDate << "\n Sun Azimuth: " << theSunAzimuth << "\n Sun Elevation: " << theSunElevation << "\n" @@ -124,8 +106,8 @@ bool ossimQuickbirdMetaData::saveState(ossimKeywordlist& kwl, true); kwl.add(prefix, - "generation_time", - theGenerationTime, + "generation_date", + theGenerationDate, true); kwl.add(prefix, @@ -133,6 +115,16 @@ bool ossimQuickbirdMetaData::saveState(ossimKeywordlist& kwl, theBandId, true); + kwl.add(prefix, + "sat_id", + theSatID, + true); + + kwl.add(prefix, + "tlc_date", + theTLCDate, + true); + kwl.add(prefix, ossimKeywordNames::AZIMUTH_ANGLE_KW, theSunAzimuth, @@ -165,10 +157,10 @@ bool ossimQuickbirdMetaData::loadState(const ossimKeywordlist& kwl, } } - lookup = kwl.find(prefix, "generation_time"); + lookup = kwl.find(prefix, "generation_date"); if (lookup) { - theGenerationTime = lookup; + theGenerationDate = lookup; } lookup = kwl.find(prefix, "band_id"); @@ -177,6 +169,18 @@ bool ossimQuickbirdMetaData::loadState(const ossimKeywordlist& kwl, theBandId = lookup; } + lookup = kwl.find(prefix, "sat_id"); + if (lookup) + { + theSatID = lookup; + } + + lookup = kwl.find(prefix, "tlc_date"); + if (lookup) + { + theTLCDate= lookup; + } + lookup = kwl.find(prefix, ossimKeywordNames::AZIMUTH_ANGLE_KW); if (lookup) { @@ -254,8 +258,7 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file) } sscanf(strptr, "%17c %s", dummy, name); - theGenerationTime = name; -std::cout<<name<<std::endl; + theGenerationDate = ossimString(name).before(";"); //--- @@ -277,8 +280,48 @@ std::cout<<name<<std::endl; } sscanf(strptr, "%9c %s", dummy, name); - theBandId = name; -std::cout<<name<<std::endl; + theBandId = ossimString(name).after("\"").before("\";"); + + + //--- + // SatID: + //--- + strptr = strstr(filebuf, "\n\tsatId ="); + if (!strptr) + { + 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; + } + } + sscanf(strptr, "%9c %s", dummy, name); + theSatID = ossimString(name).after("\"").before("\";"); + + //--- + // TLCTime: + //--- + strptr = strstr(filebuf, "\n\tTLCTime ="); + if (!strptr) + { + 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; + } + } + sscanf(strptr, "%11c %s", dummy, name); + theTLCDate = ossimString(name).before("\";"); //*** // Sun Azimuth: @@ -297,10 +340,8 @@ std::cout<<name<<std::endl; return false; } } - sscanf(strptr, "%9c %s", dummy, name); - //theSunAzimuth = name; -std::cout<<name<<std::endl; + theSunAzimuth = ossimString(name).before(";").toFloat64();; //*** // Sun Elevation: @@ -319,10 +360,9 @@ std::cout<<name<<std::endl; return false; } } - sscanf(strptr, "%9c %s", dummy, name); - // theSunElevation = value; -std::cout<<name<<std::endl; + theSunElevation = ossimString(name).before(";").toFloat64(); + delete [] filebuf; filebuf = 0; -- GitLab