Commit 7f711a8f authored by Cédric Traizet's avatar Cédric Traizet

MRG: resolve conflicts between optical and sar IMI

parents 23ef113c d0ca3aec
SensorID CSK
Mission CSK
Instrument CSKS3
ProductType SCS_B
Polarization HH
Mode ENHANCED SPOTLIGHT
Swath S1
OrbitDirection DESCENDING
TileHintX 128
TileHintY 128
DataType 1
OrbitNumber 13415
PRF 3321
RadarFrequency 9.6e+09
AcquisitionStartTime 2011-04-18T18:03:27.915976Z
AcquisitionStopTime 2011-04-18T18:03:29.380925Z
SAR <SARParam>
......@@ -90,6 +90,11 @@ public:
double GetCenterIncidenceAngle() const override;
void Parse(const MetadataSupplierInterface *) override;
std::vector<std::map<std::string, std::string> > saveMetadataBands(std::string file) ;
std::vector<Orbit> getOrbits(const MetadataSupplierInterface *, std::string referenceTime) ;
protected:
/* class ctor */
CosmoImageMetadataInterface() = default;
......
......@@ -98,6 +98,8 @@ public:
/*get lookup data for calculating backscatter */
void CreateCalibrationLookupData(const short type) override;
void Parse(const MetadataSupplierInterface *) override;
protected:
/* class constructor */
......
......@@ -174,6 +174,8 @@ public:
* in the order R, G, B */
std::vector<unsigned int> GetDefaultDisplay() const override;
void Parse(const MetadataSupplierInterface *) override;
protected:
TerraSarImageMetadataInterface();
~TerraSarImageMetadataInterface() override
......
......@@ -83,6 +83,7 @@ target_link_libraries(OTBMetadata
${OTBBoost_LIBRARIES}
${OTBCommon_LIBRARIES}
${OTBOSSIMAdapters_LIBRARIES}
${Boost_LIBRARIES}
)
......
......@@ -37,6 +37,11 @@
// useful constants
#include <otbMath.h>
#include <iomanip>
#include "otbSystem.h"
#include "otbXMLMetadataSupplier.h"
#include "gdal_pam.h"
#include <iostream>
namespace otb
{
......@@ -250,4 +255,209 @@ double CosmoImageMetadataInterface::GetCenterIncidenceAngle() const
return 0;
}
std::vector<std::map<std::string, std::string> > CosmoImageMetadataInterface::saveMetadataBands(std::string file)
{
// Create GDALImageIO to retrieve all metadata (from .h5 input file)
std::map<std::string, std::string> metadataDataSet;
std::vector<std::map<std::string, std::string> > metadataBands;
GDALDataset * dataset = static_cast<GDALDataset*>(GDALOpen(file.c_str(), GA_ReadOnly));
// Metadata for dataset
char** papszMetadata = dataset->GetMetadata(nullptr);
for (int cpt = 0; papszMetadata[cpt] != nullptr; ++cpt)
{
std::string key, value;
if (otb::System::ParseHdfSubsetName(papszMetadata[cpt], key, value))
{
metadataDataSet[key] = value;
}
}
int nbRasterCount = dataset->GetRasterCount();
// Metadata for each Band
for (int iBand = 0; iBand < nbRasterCount; iBand++)
{
std::map<std::string, std::string> mapCurrentBand;
GDALRasterBand * Band = dataset->GetRasterBand(iBand + 1);
papszMetadata = Band->GetMetadata(nullptr);
for (int cpt = 0; papszMetadata[cpt] != nullptr; ++cpt)
{
std::string key, value;
if (otb::System::ParseHdfSubsetName(papszMetadata[cpt], key, value))
{
mapCurrentBand[key] = value;
}
}
metadataBands.push_back(mapCurrentBand);
}
GDALClose(static_cast<GDALDatasetH>(dataset));
return metadataBands;
}
std::vector<Orbit> CosmoImageMetadataInterface::getOrbits(const MetadataSupplierInterface *mds, std::string reference_UTC)
{
////////////////// Add Orbit List ////////////////
bool hasOrbit ;
std::string nb_orbits = mds->GetMetadataValue("Number_of_State_Vectors", hasOrbit) ;
// Get elements
int stateVectorList_size = std::stoi(nb_orbits);
std::string state_times = mds->GetMetadataValue("State_Vectors_Times", hasOrbit);
std::string ecef_satellite_pos = mds->GetMetadataValue("ECEF_Satellite_Position", hasOrbit) ;
std::string ecef_satellite_vel = mds->GetMetadataValue("ECEF_Satellite_Velocity", hasOrbit);
// Convert std::string to vector
std::vector<std::string> vTimes;
otb::Utils::ConvertStringToVector(state_times, vTimes, "State_Vectors_Times", " ");
std::vector<std::string> vECEF_sat_pos;
otb::Utils::ConvertStringToVector(ecef_satellite_pos, vECEF_sat_pos, "ECEF_Satellite_Position", " ");
std::vector<std::string> vECEF_sat_vel;
otb::Utils::ConvertStringToVector(ecef_satellite_vel, vECEF_sat_vel, "ECEF_Satellite_Velocity", " ");
std::vector<Orbit> orbitVector;
std::ostringstream oss;
for (int i = 0; i != stateVectorList_size ; ++i)
{
oss.str("");
oss << stateVectorList_size;
Orbit orbit;
double total_seconds = std::stod(vTimes[i]);
int hour = static_cast<int> (total_seconds/3600.0);
int minutes = static_cast<int> ((total_seconds-hour*3600)/60.0);
double seconds = total_seconds - hour*3600 - minutes*60;
std::string timestr = reference_UTC + "T" + std::to_string(hour) + ":" + std::to_string(minutes) + ":" + std::to_string(seconds);
MetaData::Time time = Utils::LexicalCast<MetaData::Time,std::string>(timestr, std::string("T"));
orbit.time = time ;
orbit.posX = std::stod(vECEF_sat_pos[i*3 + 0]) ;
orbit.posY = std::stod(vECEF_sat_pos[i*3 + 1]) ;
orbit.posZ = std::stod(vECEF_sat_pos[i*3 + 2]) ;
orbit.velX = std::stod(vECEF_sat_vel[i*3 + 0]) ;
orbit.velY = std::stod(vECEF_sat_vel[i*3 + 1]) ;
orbit.velZ = std::stod(vECEF_sat_vel[i*3 + 2]) ;
orbitVector.push_back(orbit);
}
return orbitVector ;
}
void CosmoImageMetadataInterface::Parse(const MetadataSupplierInterface *mds)
{
assert(mds);
assert(mds->GetNbBands() == this->m_Imd.Bands.size());
// Check SubDatasets (For COSMO, we need //S01/SBI dataset)
auto subDsName = "HDF5:" + mds->GetResourceFile() + "://S01/SBI";
auto ds = (GDALDataset *) GDALOpen(subDsName.c_str(), GA_ReadOnly );
if (ds)
{
std::cout << "Found S01/SBI ! " << std::endl;
// Do stuff
GDALClose(ds);
}
else
{
otbGenericExceptionMacro(MissingMetadataException,
<< "Cannot find S01/SBI subdataset")
}
// Metadata read by GDAL
Fetch(MDStr::Mission, *mds, "MISSION_ID");
Fetch(MDStr::Mode, *mds, "Acquisition_Mode");
Fetch(MDStr::ProductType, *mds, "Product_Type");
// Check Mission Id, acquisition mode and product type
if(! (m_Imd[MDStr::Mission] == "CSK" ))
{
itkWarningMacro(<< "Not a valid missionId" << m_Imd[MDStr::Mission] );
}
if((m_Imd[MDStr::Mode] != "HIMAGE") &&
(m_Imd[MDStr::Mode] != "SPOTLIGHT") &&
(m_Imd[MDStr::Mode] != "ENHANCED SPOTLIGHT"))
{
itkWarningMacro(<< "Not an expected acquisition mode (only HIMAGE and SPOTLIGHT expected)" << m_Imd[MDStr::Mode] );
}
if( (m_Imd[MDStr::ProductType] != "SCS_B") && m_Imd[MDStr::ProductType] != "SCS_U")
{
itkWarningMacro(<< "Not an expected product type (only SCS_B and SCS_U expected) " << m_Imd[MDStr::ProductType] );
}
m_Imd.Add(MDStr::SensorID, "CSK");
Fetch(MDStr::Instrument, *mds, "Satellite_ID");
Fetch(MDStr::OrbitDirection, *mds, "Orbit_Direction");
bool hasOrbitNumber ;
std::string orbitNumber = mds->GetMetadataValue("Orbit_Number", hasOrbitNumber) ;
m_Imd.Add(MDNum::OrbitNumber, std::stoi(orbitNumber));
bool hasRadarFrequency ;
std::string radarFrequency = mds->GetMetadataValue("Radar_Frequency", hasRadarFrequency) ;
m_Imd.Add(MDNum::RadarFrequency, std::stod(radarFrequency));
Fetch(MDStr::Polarization, *mds, "S01_Polarisation") ;
m_Imd.Add(MDStr::Swath, "S1");
bool hasPRF;
std::string PRFNumber = mds->GetMetadataValue("S01_PRF", hasPRF);
m_Imd.Add(MDNum::PRF, std::stoi(PRFNumber));
//getTIme
auto metadataBands = this->saveMetadataBands(subDsName) ;
bool hasTimeUTC;
int pos = mds->GetMetadataValue("Reference_UTC", hasTimeUTC).find(" ");;
std::string reference_UTC = mds->GetMetadataValue("Reference_UTC", hasTimeUTC).substr(0, pos);
double total_seconds = std::stod(metadataBands[0]["S01_SBI_Zero_Doppler_Azimuth_First_Time"]);
int hour = static_cast<int> (total_seconds/3600.0);
int minutes = static_cast<int> ((total_seconds-hour*3600)/60.0);
double seconds = total_seconds - hour*3600 - minutes*60;
std::string first_line_time = reference_UTC + "T" + std::to_string(hour) + ":" + std::to_string(minutes) + ":" + std::to_string(seconds);
total_seconds = std::stod(metadataBands[0]["S01_SBI_Zero_Doppler_Azimuth_Last_Time"]);
hour = static_cast<int> (total_seconds/3600.0);
minutes = static_cast<int> ((total_seconds-hour*3600)/60.0);
seconds = total_seconds - hour*3600 - minutes*60;
std::string last_line_time = reference_UTC + "T" + std::to_string(hour) + ":" + std::to_string(minutes) + ":" + std::to_string(seconds);
MetaData::Time startTime = Utils::LexicalCast<MetaData::Time,std::string>(first_line_time, std::string("T"));
MetaData::Time stoptTime = Utils::LexicalCast<MetaData::Time,std::string>(last_line_time, std::string("T"));
m_Imd.Add(MDTime::AcquisitionStartTime, startTime);
m_Imd.Add(MDTime::AcquisitionStopTime, stoptTime);
//SAR Parameters
SARParam sarParam;
sarParam.orbits = this->getOrbits(mds, reference_UTC);
m_Imd.Bands[0].Add(MDGeom::SAR, sarParam);
}
} // end namespace otb
......@@ -667,6 +667,7 @@ ImageMetadataInterfaceBase::Fetch(
m_Imd.Bands[band].Add(key, mds.GetAs<MetaData::Time>(path, band));
return m_Imd.Bands[band][key];
}
m_Imd.Add(key, mds.GetAs<MetaData::Time>(path));
return m_Imd[key];
}
......
......@@ -184,7 +184,7 @@ std::istream& operator>>(std::istream& is, Time& val)
val.frac_sec = sec - (double) val.tm_sec;
_OTB_ISTREAM_FAIL_IF( val.tm_sec < 0 || val.tm_sec > 60 )
_OTB_ISTREAM_FAIL_IF( val.frac_sec < 0.0 || val.frac_sec >= 1.0)
if (!is.eof())
{
_OTB_ISTREAM_FAIL_IF( is.get() != 'Z' )
......
......@@ -28,6 +28,7 @@
// useful constants
#include <otbMath.h>
#include "otbXMLMetadataSupplier.h"
namespace otb
{
......@@ -119,6 +120,8 @@ void Radarsat2ImageMetadataInterface::ParseDateTime(const char* key, std::vector
}
}
int Radarsat2ImageMetadataInterface::GetYear() const
{
int value = 0;
......@@ -237,4 +240,60 @@ Radarsat2ImageMetadataInterface::UIntVectorType Radarsat2ImageMetadataInterface:
return rgb;
}
} // end namespace otb
//"
void Radarsat2ImageMetadataInterface::Parse(const MetadataSupplierInterface *mds)
{
assert(mds);
assert(mds->GetNbBands() == this->m_Imd.Bands.size());
// Metadata read by GDAL
Fetch(MDTime::AcquisitionStartTime, *mds, "ACQUISITION_START_TIME");
// Fetch(MDTime::AcquisitionStopTime, *mds, "PROCESSING_TIME");
Fetch(MDStr::BeamMode, *mds, "BEAM_MODE");
Fetch("FACILITY_IDENTIFIER", *mds, "FACILITY_IDENTIFIER");
Fetch(MDNum::LineSpacing, *mds, "LINE_SPACING");
Fetch(MDNum::PixelSpacing, *mds, "PIXEL_SPACING");
// Fetch(MDStr::Mode, *mds, "MODE");
Fetch(MDStr::OrbitDirection, *mds, "ORBIT_DIRECTION");
// Fetch(MDNum::OrbitNumber, *mds, "ORBIT_NUMBER");
Fetch(MDNum::PixelSpacing, *mds, "PIXEL_SPACING");
Fetch(MDStr::ProductType, *mds, "PRODUCT_TYPE");
Fetch(MDStr::Instrument, *mds, "SATELLITE_IDENTIFIER");
Fetch(MDStr::SensorID, *mds, "SENSOR_IDENTIFIER");
// Product file
std::string ProductFilePath = mds->GetResourceFile("product.xml");
if (!ProductFilePath.empty())
{
// std::cout<< ProductFilePath << std::endl;
XMLMetadataSupplier ProductMS(ProductFilePath);
m_Imd.Add(MDStr::Mission, ProductMS.GetAs<std::string>("product.sourceAttributes.satellite"));
m_Imd.Add(MDNum::NumberOfLines, ProductMS.GetAs<int>("product.imageAttributes.rasterAttributes.numberOfLines"));
m_Imd.Add(MDNum::NumberOfColumns, ProductMS.GetAs<int>("product.imageAttributes.rasterAttributes.numberOfSamplesPerLine"));
m_Imd.Add(MDTime::ProductionDate,
ProductMS.GetFirstAs<MetaData::Time>("product.imageGenerationParameters.generalProcessingInformation.processingTime"));
// m_Imd.Add(MDNum::RadarFrequency, ProductMS.GetAs<double>("product.sourceAttributes.radarParameters.radarCenterFrequency"));
m_Imd.Add(MDNum::AverageSceneHeight, ProductMS.GetAs<double>("product.imageAttributes.geographicInformation.referenceEllipsoidParameters.geodeticTerrainHeight"));
m_Imd.Add(MDNum::RadarFrequency, this->GetRadarFrequency());
m_Imd.Add(MDNum::PRF, this->GetPRF());
m_Imd.Add(MDNum::RSF, this->GetRSF());
m_Imd.Add(MDNum::CenterIncidenceAngle, this->GetCenterIncidenceAngle());
SARParam sarParam;
for (int bandId = 0 ; bandId < mds->GetNbBands() ; ++bandId)
{
Fetch(MDStr::Polarization, *mds, "POLARIMETRIC_INTERP", bandId);
m_Imd.Bands[bandId].Add(MDGeom::SAR, sarParam);
}
}
}
} // end namespace otb
\ No newline at end of file
......@@ -26,6 +26,19 @@
#include "itkIndex.h"
#include "itkMetaDataObject.h"
#include "otbImageKeywordlist.h"
#include "otbXMLMetadataSupplier.h"
#include <boost/filesystem.hpp>
//TODO C++ 17 : use std::optional instead
#include <boost/optional.hpp>
#include "itksys/SystemTools.hxx"
#include "itksys/RegularExpression.hxx"
namespace otb
{
......@@ -34,6 +47,63 @@ TerraSarImageMetadataInterface::TerraSarImageMetadataInterface()
{
}
namespace ExtractXMLFiles {
// Adapted from boost filesystem documentation : https://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html
std::vector<std::string> GetXMLFilesInDirectory(const std::string & directoryPath)
{
std::vector<std::string> fileList;
if ( !boost::filesystem::exists( directoryPath) )
{
return fileList;
}
else if (!boost::filesystem::is_directory(directoryPath))
{
fileList.push_back(directoryPath);
return fileList;
}
// End iterator : default construction yields past-the-end
for ( const auto & item : boost::make_iterator_range(boost::filesystem::directory_iterator(directoryPath), {}) )
{
if ( boost::filesystem::is_directory(item.status()) )
{
auto subDirList = GetXMLFilesInDirectory(item.path().string());
fileList.insert(fileList.end(), subDirList.begin(), subDirList.end());
}
else
{
//Extract only XML files
std::string extension = boost::filesystem::extension(item);
if (extension ==".xml")
fileList.push_back(item.path().string());
}
}
return fileList;
}
std::string GetResourceFile(const std::string & directoryPath, std::string pattern)
{
auto xmlFiles = GetXMLFilesInDirectory(directoryPath);
itksys::RegularExpression reg;
reg.compile(pattern);
for (const auto & file : xmlFiles)
{
if (reg.find(boost::filesystem::path(file).filename().string()))
return file ;
}
return std::string("");
}
}
bool TerraSarImageMetadataInterface::CanRead() const
{
std::string sensorID = GetSensorID();
......@@ -1173,4 +1243,58 @@ void TerraSarImageMetadataInterface::PrintSelf(std::ostream& os, itk::Indent ind
}
void TerraSarImageMetadataInterface::Parse(const MetadataSupplierInterface *mds)
{
assert(mds);
assert(mds->GetNbBands() == this->m_Imd.Bands.size());
// Metadata read by GDAL
Fetch(MDNum::LineSpacing, *mds, "ROW_SPACING");
Fetch(MDStr::Mode, *mds, "IMAGING_MODE");
Fetch(MDStr::OrbitDirection, *mds, "ORBIT_DIRECTION");
Fetch(MDNum::OrbitNumber, *mds, "ABSOLUTE_ORBIT");
Fetch(MDNum::PixelSpacing, *mds, "COL_SPACING");
// Main XML file
std::string MainFilePath = ExtractXMLFiles::GetResourceFile(itksys::SystemTools::GetFilenamePath(mds->GetResourceFile("")), "T[S|D]X1_SAR__.*.xml") ;
if (!MainFilePath.empty())
{
XMLMetadataSupplier MainXMLFileMS(MainFilePath);
m_Imd.Add(MDStr::Mission, MainXMLFileMS.GetAs<std::string>("level1Product.generalHeader.mission"));
m_Imd.Add(MDStr::ProductType, MainXMLFileMS.GetAs<std::string>("level1Product.productInfo.productVariantInfo.productType"));
// m_Imd.Add(MDStr::Mode, MainXMLFileMS.GetAs<std::string>("level1Product.productInfo.acquisitionInfo.imagingMode"));
m_Imd.Add(MDStr::SensorID, MainXMLFileMS.GetAs<std::string>("level1Product.productInfo.acquisitionInfo.sensor"));
m_Imd.Add(MDNum::RadarFrequency, MainXMLFileMS.GetAs<double>("level1Product.instrument.radarParameters.centerFrequency"));
bool hasValueStarttimeUTC;
MainXMLFileMS.GetFirstMetadataValue("level1Product.productInfo.sceneInfo.start.timeUTC", hasValueStarttimeUTC);
if(!hasValueStarttimeUTC)
m_Imd.Add(MDTime::AcquisitionStartTime, MainXMLFileMS.GetFirstAs<MetaData::Time>("level1Product.instrument.settings.rxGainSetting.startTimeUTC"));
else
m_Imd.Add(MDTime::AcquisitionStartTime, MainXMLFileMS.GetFirstAs<MetaData::Time>("level1Product.productInfo.sceneInfo.start.timeUTC"));
bool hasValueStoptimeUTC;
MainXMLFileMS.GetFirstMetadataValue("level1Product.productInfo.sceneInfo.stop.timeUTC", hasValueStoptimeUTC);
if(!hasValueStoptimeUTC)
m_Imd.Add(MDTime::AcquisitionStopTime, MainXMLFileMS.GetFirstAs<MetaData::Time>("level1Product.instrument.settings.settingRecord.dataSegment segmentID.stopTimeUTC"));
else
m_Imd.Add(MDTime::AcquisitionStopTime, MainXMLFileMS.GetFirstAs<MetaData::Time>("level1Product.productInfo.sceneInfo.stop.timeUTC"));
m_Imd.Add(MDNum::PRF, MainXMLFileMS.GetAs<double>("level1Product.productSpecific.complexImageInfo.commonPRF"));
m_Imd.Add(MDNum::RSF, MainXMLFileMS.GetAs<double>("level1Product.productSpecific.complexImageInfo.commonRSF"));
}
SARParam sarParam;
for (int bandId = 0 ; bandId < mds->GetNbBands() ; ++bandId)
{
Fetch(MDStr::Polarization, *mds, "POLARIMETRIC_INTERP", bandId);
m_Imd.Bands[bandId].Add(MDGeom::SAR, sarParam);
}
}
} // end namespace otb
......@@ -88,14 +88,6 @@ otb_module_target_label(otbMetadataTestDriver)
# ${TEMP}/ioTvSentinel1ImageMetadataInterfaceTest.txt
# )
otb_add_test(NAME ioTvImageMetadataInterfaceTest_Sentinel1 COMMAND otbMetadataTestDriver
--compare-ascii ${EPSILON_9} ${BASELINE_FILES}/ioTvImageMetadataInterfaceTest_Sentinel1.txt
${TEMP}/ioTvImageMetadataInterfaceTest_Sentinel1.txt
otbImageMetadataInterfaceTest
LARGEINPUT{SENTINEL1/S1A_S6_SLC__1SSV_20150619T195043}
${TEMP}/ioTvImageMetadataInterfaceTest_Sentinel1.txt
)
#otb_add_test(NAME ioTvImageMetadataInterfaceBaseTest_SENTINEL1 COMMAND otbMetadataTestDriver
#--compare-ascii ${EPSILON_9} ${BASELINE_FILES}/ioTvImageMetadataInterfaceBase_SENTINEL1.txt
#${TEMP}/ioTvImageMetadataInterfaceBase_SENTINEL1.txt
......@@ -430,7 +422,7 @@ otb_add_test(NAME ioTuotbXMLMetadataSupplierTest COMMAND otbMetadataTestDriver
${TEMP}/ioTuotbXMLMetadataSupplierTest.txt
)
set(sensor_list pleiades spot6 spot5 spot5_2 formosat ikonos worldview2 quickbird)
set(sensor_list pleiades spot6 spot5 spot5_2 formosat ikonos worldview2 quickbird Radarsat2 TerraSar CosmoSkyMed Sentinel1)
set(pleiades_filename LARGEINPUT{PLEIADES/MAIDO_JP2_DIMAPv2_PRIMARY_MS_lossy_12bits/IMG_PHR1A_MS_002/IMG_PHR1A_MS_201206050630064_SEN_559102101-002_R1C1.JP2})
set(spot6_filename LARGEINPUT{SPOT6/600143101-Primary-Bundle-JP2-LOSSLESS/PROD_SPOT6_001/VOL_SPOT6_001_A/IMG_SPOT6_MS_001_A/IMG_SPOT6_MS_201212071020271_SEN_600143101_R1C1.JP2})
......@@ -440,6 +432,10 @@ set(formosat_filename LARGEINPUT{FORMOSAT/Sudouest_20071013_MS_fmsat/IMAGERY.TIF
set(ikonos_filename LARGEINPUT{IKONOS/BLOSSEVILLE/po_2619900_blu_0000000.tif})
set(worldview2_filename LARGEINPUT{WORLDVIEW2/ROME/WV-2_standard_8band_bundle_16bit/052298844010_01_P001_MUL/09DEC10103019-M2AS-052298844010_01_P001.TIF})
set(quickbird_filename LARGEINPUT{QUICKBIRD/CEVENNES/06FEB12104912-P1BS-005533998070_01_P001.TIF})
set(Radarsat2_filename LARGEINPUT{RADARSAT2/ALTONA/Fine_Quad-Pol_Dataset/PK6621_DK406_FQ9_20080405_124900_HH_VV_HV_VH_SLC_Altona})
set(TerraSar_filename LARGEINPUT{TERRASARX/2008-03-10_GrandCanyon_SSC/TSX1_SAR__SSC______SM_S_SRA_20080310T133220_20080310T133228})
set(CosmoSkyMed_filename LARGEINPUT{COSMOSKYMED/Toulouse_spotlight/CSKS3_SCS_B_S2_08_HH_RD_SF_20110418180325_20110418180332.h5})
set(Sentinel1_filename LARGEINPUT{SENTINEL1/S1A_S6_SLC__1SSV_20150619T195043})
foreach(sensor ${sensor_list})
otb_add_test(NAME ioTvImageMetadataInterfaceTest_${sensor} COMMAND otbMetadataTestDriver
......@@ -449,4 +445,4 @@ otb_add_test(NAME ioTvImageMetadataInterfaceTest_${sensor} COMMAND otbMetadataTe
${${sensor}_filename}
${TEMP}/ioTvImageMetadataInterfaceTest_${sensor}.txt
)
endforeach()
\ No newline at end of file
endforeach()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment