From 85299499d98fe45a1902b14ddc79a12a2248733f Mon Sep 17 00:00:00 2001 From: Emmanuel Christophe <emmanuel.christophe@orfeo-toolbox.org> Date: Sat, 14 May 2011 11:03:11 -0700 Subject: [PATCH] ENH: remove ossim from spot and worldview metadata --- .../otbFormosatImageMetadataInterface.cxx | 1 + .../otbSarImageMetadataInterface.cxx | 1 - .../otbSpotImageMetadataInterface.cxx | 306 +++++++-------- .../otbWorldView2ImageMetadataInterface.cxx | 354 +++++++++--------- 4 files changed, 313 insertions(+), 349 deletions(-) diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx index c94bbd4af5..28bd64cb1a 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbFormosatImageMetadataInterface.cxx @@ -593,6 +593,7 @@ FormosatImageMetadataInterface if (nbBands == 1) { wavel.SetSize(1); + // FIXME that's definitely NOT correct in a formosat file!!! if (sensorId == "SPOT4") wavel.Fill(0.610); else if (sensorId == "SPOT5") wavel.Fill(0.480); else itkExceptionMacro(<< "Invalid Formosat2 Sensor ID"); diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbSarImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbSarImageMetadataInterface.cxx index 6225a95ecb..d1a46a96c6 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbSarImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbSarImageMetadataInterface.cxx @@ -21,7 +21,6 @@ #include "otbMath.h" #include "itkMetaDataObject.h" #include "otbImageKeywordlist.h" -#include "base/ossimKeywordlist.h" namespace otb { diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbSpotImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbSpotImageMetadataInterface.cxx index ca87fc3d2c..a2aa03ee00 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbSpotImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbSpotImageMetadataInterface.cxx @@ -18,10 +18,10 @@ #include "otbSpotImageMetadataInterface.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 @@ SpotImageMetadataInterface::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 @@ -79,14 +79,14 @@ SpotImageMetadataInterface::GetInstrumentIndex() const { itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } + 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; + } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key = "support_data.instrument_index"; - ossimString keywordString = kwl.find(key.c_str()); - - return static_cast<unsigned int>(keywordString.toUInt32()); + return -1; // Invalid value } SpotImageMetadataInterface::VariableLengthVectorType @@ -105,23 +105,20 @@ SpotImageMetadataInterface::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 +137,7 @@ SpotImageMetadataInterface::GetSolarIrradiance() const } else { - itkExceptionMacro("Invalid Physical Gain"); + itkExceptionMacro("Invalid Physical Irradiance"); } return outputValuesVariableLengthVector; @@ -162,22 +159,20 @@ SpotImageMetadataInterface::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 +191,19 @@ SpotImageMetadataInterface::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 +221,20 @@ SpotImageMetadataInterface::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 +253,19 @@ SpotImageMetadataInterface::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 +284,19 @@ SpotImageMetadataInterface::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 +315,19 @@ SpotImageMetadataInterface::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 +346,19 @@ SpotImageMetadataInterface::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 +377,19 @@ SpotImageMetadataInterface::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; } SpotImageMetadataInterface::VariableLengthVectorType @@ -433,18 +409,16 @@ SpotImageMetadataInterface 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())); } } @@ -491,18 +465,16 @@ SpotImageMetadataInterface 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 +520,14 @@ SpotImageMetadataInterface::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,15 +546,16 @@ SpotImageMetadataInterface::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(); + if (!imageKeywordlist.HasKey("support_data.step_count") || + !imageKeywordlist.HasKey("support_data.scene_orientation")) + { + return 0; + } - key = "support_data.scene_orientation"; - keywordString = kwl.find(key.c_str()); - double satAz = keywordString.toDouble(); + 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) { @@ -611,10 +586,7 @@ SpotImageMetadataInterface 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 @@ SpotImageMetadataInterface 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 @@ -728,10 +697,7 @@ SpotImageMetadataInterface 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/otbWorldView2ImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbWorldView2ImageMetadataInterface.cxx index a398d5343a..11074f5579 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbWorldView2ImageMetadataInterface.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbWorldView2ImageMetadataInterface.cxx @@ -18,10 +18,10 @@ #include "otbWorldView2ImageMetadataInterface.h" +#include <boost/algorithm/string.hpp> #include "otbMacro.h" #include "itkMetaDataObject.h" #include "otbImageKeywordlist.h" -#include "base/ossimKeywordlist.h" namespace otb { @@ -56,21 +56,22 @@ WorldView2ImageMetadataInterface::GetSolarIrradiance() const } VariableLengthVectorType outputValuesVariableLengthVector; - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string keyBId = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(keyBId.c_str()); + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { outputValuesVariableLengthVector.SetSize(1); outputValuesVariableLengthVector.Fill(1603.40); } else { - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); outputValuesVariableLengthVector.SetSize(bandNameList.size()); for(unsigned int i = 0; i < bandNameList.size(); ++i) @@ -131,22 +132,21 @@ WorldView2ImageMetadataInterface::GetDay() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.tlc_date"; - separatorList = "-T"; + std::string key("support_data.tlc_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + 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 @@ -165,22 +165,21 @@ WorldView2ImageMetadataInterface::GetMonth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.tlc_date"; - separatorList = "-T"; + std::string key("support_data.tlc_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month"); + 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 @@ -199,22 +198,21 @@ WorldView2ImageMetadataInterface::GetYear() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.tlc_date"; - separatorList = "-T"; + std::string key("support_data.tlc_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year"); + 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 @@ -233,22 +231,21 @@ WorldView2ImageMetadataInterface::GetHour() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.tlc_date"; - separatorList = "-T:"; + std::string key("support_data.tlc_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Hour"); + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString hour = keywordStrings[3]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Hour"); - return hour.toInt(); + int value = atoi(outputValues[3].c_str()); + return value; } int @@ -267,27 +264,21 @@ WorldView2ImageMetadataInterface::GetMinute() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.tlc_date"; - separatorList = "-T:"; - ossimString keywordString = kwl.find(key.c_str()); - - if (keywordString == ossimString("Unknown")) + std::string key("support_data.tlc_date"); + if (!imageKeywordlist.HasKey(key)) { - itkExceptionMacro("Unknown date") + return -1; } - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Minute"); + boost::split(outputValues, valueString, boost::is_any_of(" T:-")); - ossimString minute = keywordStrings[4]; + if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Minute"); - return minute.toInt(); + int value = atoi(outputValues[4].c_str()); + return value; } int @@ -306,22 +297,21 @@ WorldView2ImageMetadataInterface::GetProductionDay() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.generation_date"; - separatorList = "-T"; + std::string key("support_data.generation_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + 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 @@ -340,22 +330,21 @@ WorldView2ImageMetadataInterface::GetProductionMonth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.generation_date"; - separatorList = "-T"; + std::string key("support_data.generation_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month"); + 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 @@ -373,23 +362,22 @@ WorldView2ImageMetadataInterface::GetProductionYear() const { itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } + + std::string key("support_data.generation_date"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - - std::string key; - ossimString separatorList; - key = "support_data.generation_date"; - separatorList = "-T"; - - ossimString keywordString = kwl.find(key.c_str()); - std::vector<ossimString> keywordStrings = keywordString.split(separatorList); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + std::vector<std::string> outputValues; - if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year"); + 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; } WorldView2ImageMetadataInterface::VariableLengthVectorType @@ -401,27 +389,28 @@ WorldView2ImageMetadataInterface { itkExceptionMacro(<< "Invalid Metadata, no WorldView2 Image"); } - ImageKeywordlistType ImageKeywordlist; + ImageKeywordlistType imageKeywordlist; if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) { - itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist); + itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - ImageKeywordlist.convertToOSSIMKeywordlist(kwl); VariableLengthVectorType outputValuesVariableLengthVector; - std::string keyBId = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(keyBId.c_str()); - if (keywordStringBId == ossimString("P")) + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); + if (keywordStringBId == panchro) { outputValuesVariableLengthVector.SetSize(1); outputValuesVariableLengthVector.Fill(0.0); } - else if (keywordStringBId == ossimString("Multi")) + else if (keywordStringBId == multi) { - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); outputValuesVariableLengthVector.SetSize(bandNameList.size()); outputValuesVariableLengthVector.Fill(0.0); @@ -443,59 +432,62 @@ WorldView2ImageMetadataInterface { itkExceptionMacro(<< "Invalid Metadata, no WorldView2 Image"); } - ImageKeywordlistType ImageKeywordlist; + ImageKeywordlistType imageKeywordlist; if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) { - itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist); + itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - ImageKeywordlist.convertToOSSIMKeywordlist(kwl); - ossimString keywordStringBitsPerPixel = kwl.find("support_data.bits_per_pixel"); - int bitsPerPixel = keywordStringBitsPerPixel.toInt(); + std::string keywordStringBitsPerPixel = imageKeywordlist.GetMetadataByKey("support_data.bits_per_pixel"); + int bitsPerPixel = atoi(keywordStringBitsPerPixel.c_str()); if (bitsPerPixel != 16) { itkExceptionMacro(<< "Invalid bitsPerPixel " << bitsPerPixel); } - std::string keyBId = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(keyBId.c_str()); - if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi")) + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); + if (keywordStringBId != panchro && keywordStringBId != multi) { itkExceptionMacro(<< "Invalid bandID " << keywordStringBId); } - ossimString keywordStringTDILevel = kwl.find("support_data.TDI_level"); - int TDILevel = keywordStringTDILevel.toInt(); - if ( (keywordStringBId == ossimString("P") && TDILevel >64) || - (keywordStringBId == ossimString("P") && TDILevel < 8) ) + std::string keywordStringTDILevel = imageKeywordlist.GetMetadataByKey("support_data.TDI_level"); + int TDILevel = atoi(keywordStringTDILevel.c_str()); + if ( (keywordStringBId == panchro && TDILevel > 64) || + (keywordStringBId == panchro && TDILevel < 8) ) { itkExceptionMacro(<< "Invalid TDILevel " << TDILevel); } - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); VariableLengthVectorType outputValuesVariableLengthVector; outputValuesVariableLengthVector.SetSize(bandNameList.size()); - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { - ossimString keywordStringAbsCalFactor = kwl.find("support_data.absCalFactor"); - outputValuesVariableLengthVector[0] = keywordStringAbsCalFactor.toDouble(); + std::string keywordStringAbsCalFactor = imageKeywordlist.GetMetadataByKey("support_data.absCalFactor"); + double absCalFactor = atof(keywordStringAbsCalFactor.c_str()); + outputValuesVariableLengthVector[0] = absCalFactor; } else { for(unsigned int i = 0; i < bandNameList.size(); ++i) { - ossimString keywordString = "support_data." + bandNameList[i] + "_band_absCalFactor"; - ossimString keywordStringAbsCalFactor = kwl.find(keywordString); - outputValuesVariableLengthVector[i] = keywordStringAbsCalFactor.toDouble(); + std::string key = "support_data." + bandNameList[i] + "_band_absCalFactor"; + std::string keywordStringCalFactor = imageKeywordlist.GetMetadataByKey(key);; + double calFactor = atof(keywordStringCalFactor.c_str()); + outputValuesVariableLengthVector[i] = calFactor; } } - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { outputValuesVariableLengthVector[0] = 1.0 / outputValuesVariableLengthVector[0]; } @@ -525,13 +517,15 @@ WorldView2ImageMetadataInterface::GetSatElevation() const { itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } + std::string key("support_data.sat_elevation_angle"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.sat_elevation_angle"; - ossimString keywordString = kwl.find(key.c_str()); - - return keywordString.toDouble(); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + double value = atof(valueString.c_str()); + return value; } double @@ -550,12 +544,15 @@ WorldView2ImageMetadataInterface::GetSatAzimuth() const itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.sat_azimuth_angle"; - ossimString keywordString = kwl.find(key.c_str()); + std::string key("support_data.sat_azimuth_angle"); + if (!imageKeywordlist.HasKey(key)) + { + return -1; + } - return keywordString.toDouble(); + std::string valueString = imageKeywordlist.GetMetadataByKey(key); + double value = atof(valueString.c_str()); + return value; } WorldView2ImageMetadataInterface::VariableLengthVectorType @@ -578,26 +575,26 @@ WorldView2ImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(key.c_str()); - - if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi")) + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); + if (keywordStringBId != panchro && keywordStringBId != multi) { itkExceptionMacro(<< "Invalid bandID " << keywordStringBId); } // Panchromatic case - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { wavel.SetSize(1); wavel.Fill(0.464); } else { - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); wavel.SetSize(bandNameList.size()); for(unsigned int i = 0; i < bandNameList.size(); ++i) @@ -662,26 +659,27 @@ WorldView2ImageMetadataInterface VariableLengthVectorType wavel(1); wavel.Fill(0.); - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(key.c_str()); + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); - if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi")) + if (keywordStringBId != panchro && keywordStringBId != multi) { itkExceptionMacro(<< "Invalid bandID " << keywordStringBId); } // Panchromatic case - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { wavel.SetSize(1); wavel.Fill(0.801); } else { - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); wavel.SetSize(bandNameList.size()); for(unsigned int i = 0; i < bandNameList.size(); ++i) @@ -741,11 +739,12 @@ WorldView2ImageMetadataInterface::GetDefaultDisplay() const { itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - ossimString keywordStringBandNameList = kwl.find("support_data.band_name_list"); - std::vector<ossimString> bandNameList = keywordStringBandNameList.split(" "); + std::string keywordStringBandNameList = imageKeywordlist.GetMetadataByKey("support_data.band_name_list"); + std::vector<std::string> bandNameList; + boost::trim(keywordStringBandNameList); + boost::split(bandNameList, keywordStringBandNameList, boost::is_any_of(" ")); + std::vector<unsigned int> rgb(3); if(bandNameList.size() > 4) { @@ -784,18 +783,17 @@ WorldView2ImageMetadataInterface itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); } - ossimKeywordlist kwl; - imageKeywordlist.convertToOSSIMKeywordlist(kwl); - std::string key = "support_data.band_id"; - ossimString keywordStringBId = kwl.find(key.c_str()); + std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id"); + std::string panchro("P"); + std::string multi("Multi"); - if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi")) + if (keywordStringBId != panchro && keywordStringBId != multi) { itkExceptionMacro(<< "Invalid bandID " << keywordStringBId); } // Panchromatic case - if (keywordStringBId == ossimString("P")) + if (keywordStringBId == panchro) { const float b0[301] = { -- GitLab