diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx index 30aaf9c44a22a1d03ac6b653d37e09a795248cf2..f48281051fbc1cea7c16a7433f245012732c44ea 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx @@ -18,10 +18,10 @@ #include "otbFormosatImageMetadataInterface.h" +#include <boost/algorithm/string.hpp> #include "otbMacro.h" #include "itkMetaDataObject.h" #include "otbImageKeywordlist.h" -#include "base/ossimKeywordlist.h" namespace otb { @@ -55,13 +55,13 @@ FormosatImageMetadataInterface::GetInstrument() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key = "support_data.instrument"; - ossimString keywordString = kwl.find(key.c_str()); + if (imageKeywordlist.HasKey("support_data.instrument")) + { + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.instrument"); + return valueString; + } - return keywordString; + return ""; } unsigned int @@ -80,13 +80,14 @@ FormosatImageMetadataInterface::GetInstrumentIndex() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key = "support_data.instrument_index"; - ossimString keywordString = kwl.find(key.c_str()); + if (imageKeywordlist.HasKey("support_data.instrument_index")) + { + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.instrument_index"); + unsigned int value = atoi(valueString.c_str()); + return value; + } - return static_cast<unsigned int>(keywordString.toUInt32()); + return -1; // Invalid value } FormosatImageMetadataInterface::VariableLengthVectorType @@ -105,23 +106,20 @@ FormosatImageMetadataInterface::GetSolarIrradiance() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - VariableLengthVectorType outputValuesVariableLengthVector; - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key = "support_data.solar_irradiance"; - ossimString keywordString = kwl.find(key.c_str()); - ossimString separatorList = " "; - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); std::vector<double> outputValues; - for (unsigned int i = 0; i < keywordStrings.size(); ++i) + if (imageKeywordlist.HasKey("support_data.solar_irradiance")) { - if (!keywordStrings[i].empty()) + std::vector<std::string> outputValuesString; + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.solar_irradiance"); + boost::trim(valueString); + boost::split(outputValuesString, valueString, boost::is_any_of(" ")); + for (unsigned int i = 0; i < outputValuesString.size(); ++i) { - outputValues.push_back(keywordStrings[i].toDouble()); + outputValues.push_back(atof(outputValuesString[i].c_str())); } } + VariableLengthVectorType outputValuesVariableLengthVector; outputValuesVariableLengthVector.SetSize(outputValues.size()); outputValuesVariableLengthVector.Fill(0); //In the case of SPOT, the bands are in a different order: @@ -140,7 +138,7 @@ FormosatImageMetadataInterface::GetSolarIrradiance() const } else { - itkExceptionMacro("Invalid Physical Gain"); + itkExceptionMacro("Invalid Solar Irradiance"); } return outputValuesVariableLengthVector; @@ -162,22 +160,20 @@ FormosatImageMetadataInterface::GetDay() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.image_date"; - separatorList = "-T"; + if (!imageKeywordlist.HasKey("support_data.image_date")) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.image_date"); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Day"); + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString day = keywordStrings[2]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Day"); - return day.toInt(); + int value = atoi(outputValues[2].c_str()); + return value; } int @@ -196,22 +192,19 @@ FormosatImageMetadataInterface::GetMonth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.image_date"; - separatorList = "-T"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.image_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.image_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString month = keywordStrings[1]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Month"); - return month.toInt(); + int value = atoi(outputValues[1].c_str()); + return value; } int @@ -229,22 +222,20 @@ FormosatImageMetadataInterface::GetYear() const { itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.image_date"; - separatorList = "-T"; - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.image_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.image_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString year = keywordStrings[0]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Year"); - return year.toInt(); + int value = atoi(outputValues[0].c_str()); + return value; } int @@ -263,22 +254,19 @@ FormosatImageMetadataInterface::GetHour() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.image_date"; - separatorList = "-T:"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.image_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Hour"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.image_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString hour = keywordStrings[3]; + if (outputValues.size() < 4) itkExceptionMacro(<< "Invalid Hour"); - return hour.toInt(); + int value = atoi(outputValues[3].c_str()); + return value; } int @@ -297,21 +285,19 @@ FormosatImageMetadataInterface::GetMinute() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.image_date"; - separatorList = "-T:"; + if (!imageKeywordlist.HasKey("support_data.image_date")) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Minute"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.image_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString minute = keywordStrings[4]; + if (outputValues.size() < 5) itkExceptionMacro(<< "Invalid Minute"); - return minute.toInt(); + int value = atoi(outputValues[4].c_str()); + return value; } int @@ -330,22 +316,19 @@ FormosatImageMetadataInterface::GetProductionDay() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.production_date"; - separatorList = "-T:"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.production_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Day"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.production_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString day = keywordStrings[2]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Day"); - return day.toInt(); + int value = atoi(outputValues[2].c_str()); + return value; } int @@ -364,22 +347,19 @@ FormosatImageMetadataInterface::GetProductionMonth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.production_date"; - separatorList = "-T"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.production_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.production_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString month = keywordStrings[1]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Month"); - return month.toInt(); + int value = atoi(outputValues[1].c_str()); + return value; } int @@ -398,22 +378,19 @@ FormosatImageMetadataInterface::GetProductionYear() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.production_date"; - separatorList = "-T"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + if (!imageKeywordlist.HasKey("support_data.production_date")) + { + return -1; + } - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year"); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.production_date"); + std::vector<std::string> outputValues; + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString year = keywordStrings[0]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Year"); - return year.toInt(); + int value = atoi(outputValues[0].c_str()); + return value; } FormosatImageMetadataInterface::VariableLengthVectorType @@ -433,18 +410,16 @@ FormosatImageMetadataInterface itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.physical_bias"; - ossimString keywordString = kwl.find(key.c_str()); - ossimString separatorList = " "; - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); std::vector<double> outputValues; - for (unsigned int i = 0; i < keywordStrings.size(); ++i) + if (imageKeywordlist.HasKey("support_data.physical_bias")) { - if (!keywordStrings[i].empty()) + std::vector<std::string> outputValuesString; + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.physical_bias"); + boost::trim(valueString); + boost::split(outputValuesString, valueString, boost::is_any_of(" ")); + for (unsigned int i = 0; i < outputValuesString.size(); ++i) { - outputValues.push_back(keywordStrings[i].toDouble()); + outputValues.push_back(atof(outputValuesString[i].c_str())); } } @@ -468,7 +443,7 @@ FormosatImageMetadataInterface } else { - itkExceptionMacro("Invalid Physical Gain"); + itkExceptionMacro("Invalid Physical Bias"); } return outputValuesVariableLengthVector; @@ -491,18 +466,16 @@ FormosatImageMetadataInterface itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.physical_gain"; - ossimString keywordString = kwl.find(key.c_str()); - ossimString separatorList = " "; - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); std::vector<double> outputValues; - for (unsigned int i = 0; i < keywordStrings.size(); ++i) + if (imageKeywordlist.HasKey("support_data.physical_gain")) { - if (!keywordStrings[i].empty()) + std::vector<std::string> outputValuesString; + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.physical_gain"); + boost::trim(valueString); + boost::split(outputValuesString, valueString, boost::is_any_of(" ")); + for (unsigned int i = 0; i < outputValuesString.size(); ++i) { - outputValues.push_back(keywordStrings[i].toDouble()); + outputValues.push_back(atof(outputValuesString[i].c_str())); } } @@ -548,12 +521,14 @@ FormosatImageMetadataInterface::GetSatElevation() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.incident_angle"; - ossimString keywordString = kwl.find(key.c_str()); + if (!imageKeywordlist.HasKey("support_data.incident_angle")) + { + return 0; + } - return (90. - keywordString.toDouble()); + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.incident_angle"); + double value = 90 - atof(valueString.c_str()); + return value; } double @@ -572,16 +547,16 @@ FormosatImageMetadataInterface::GetSatAzimuth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.step_count"; - ossimString keywordString = kwl.find(key.c_str()); - int step = keywordString.toInt(); - - key = "support_data.scene_orientation"; - keywordString = kwl.find(key.c_str()); - double satAz = keywordString.toDouble(); + if (!imageKeywordlist.HasKey("support_data.step_count") || + !imageKeywordlist.HasKey("support_data.scene_orientation")) + { + return 0; + } + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.step_count"); + int step = atoi(valueString.c_str()); + valueString = imageKeywordlist.GetMetadataByKey("support_data.scene_orientation"); + double satAz = atof(valueString.c_str()); if ((step - 48) < 0) { satAz += 90.; @@ -611,10 +586,7 @@ FormosatImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.number_bands"; - int nbBands = ossimString(kwl.find(key.c_str())).toInt(); + int nbBands = this->GetNumberOfBands(); std::string sensorId = this->GetSensorID(); // Panchromatic case @@ -659,10 +631,7 @@ FormosatImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.number_bands"; - int nbBands = ossimString(kwl.find(key.c_str())).toInt(); + int nbBands = this->GetNumberOfBands(); std::string sensorId = this->GetSensorID(); // Panchromatic case @@ -727,10 +696,7 @@ FormosatImageMetadataInterface itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.number_bands"; - int nbBands = ossimString(kwl.find(key.c_str())).toInt(); + int nbBands = this->GetNumberOfBands(); std::string sensorId = this->GetSensorID(); // Panchromatic case diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbIkonosImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbIkonosImageMetadataInterface.cxx index e6f9b51873b1f7855bd071268a2f8f2e32430dab..bacdca784b7c1d1dd78ef22802bc5874713192a8 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbIkonosImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbIkonosImageMetadataInterface.cxx @@ -528,10 +528,7 @@ IkonosImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.number_bands"; - int nbBands = ossimString(kwl.find(key.c_str())).toInt(); + int nbBands = this->GetNumberOfBands(); // Panchromatic case if (nbBands == 1) @@ -572,10 +569,7 @@ IkonosImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.number_bands"; - int nbBands = ossimString(kwl.find(key.c_str())).toInt(); + int nbBands = this->GetNumberOfBands(); // Panchromatic case if (nbBands == 1) diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbOpticalImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbOpticalImageMetadataInterface.cxx index 3a6f7d232ade8515575955100f386565a00a0984..4c59076a3ea1543494d2e9ff242fee213f97d7b8 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbOpticalImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbOpticalImageMetadataInterface.cxx @@ -21,7 +21,6 @@ #include "otbMacro.h" #include "itkMetaDataObject.h" #include "otbImageKeywordlist.h" -#include "base/ossimKeywordlist.h" namespace otb { @@ -42,12 +41,14 @@ OpticalImageMetadataInterface::GetSunElevation() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.elevation_angle"; - ossimString keywordString = kwl.find(key.c_str()); + if (imageKeywordlist.HasKey("support_data.elevation_angle")) + { + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.elevation_angle"); + double value = atof(valueString.c_str()); + return value; + } - return keywordString.toDouble(); + return 0; } double @@ -61,12 +62,14 @@ OpticalImageMetadataInterface::GetSunAzimuth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.azimuth_angle"; - ossimString keywordString = kwl.find(key.c_str()); + if (imageKeywordlist.HasKey("support_data.azimuth_angle")) + { + std::string valueString = imageKeywordlist.GetMetadataByKey("support_data.azimuth_angle"); + double value = atof(valueString.c_str()); + return value; + } - return keywordString.toDouble(); + return 0; }