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