From d6a58f062a05992a95f67edacdafa4cc277ad4ee Mon Sep 17 00:00:00 2001 From: Julien Osman <julien.osman@csgroup.eu> Date: Wed, 8 Jul 2020 16:55:37 +0200 Subject: [PATCH] WIP: Add dates and manifest in Sentinel1MetadataInterface --- ...TvImageMetadataInterfaceTest_Sentinel1.txt | 5 +++- .../otbSentinel1ImageMetadataInterface.cxx | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Data/Baseline/OTB/Files/ioTvImageMetadataInterfaceTest_Sentinel1.txt b/Data/Baseline/OTB/Files/ioTvImageMetadataInterfaceTest_Sentinel1.txt index e629b65462..21ee9e581e 100644 --- a/Data/Baseline/OTB/Files/ioTvImageMetadataInterfaceTest_Sentinel1.txt +++ b/Data/Baseline/OTB/Files/ioTvImageMetadataInterfaceTest_Sentinel1.txt @@ -13,6 +13,9 @@ DataType 11 OrbitNumber 6447 LineSpacing 4.08568 PixelSpacing 3.19483 +ProductionDate 2015-06-20T01:51:06.838854Z +AcquisitionStartTime 2015-06-19T19:50:43.223221Z +AcquisitionStopTime 2015-06-19T19:51:01.921994Z GCP <GCPParam> Extra.FACILITY_IDENTIFIER UPA_ Polarization VV @@ -943,4 +946,4 @@ SAR <SARParam> {"GCP_Id": "922", "GCP_Info": "", "GCP_Row": "31105", "GCP_Col": "15912", "GCP_X": "-24.0138", "GCP_Y": "15.7509", "GCP_Z": "0", }, {"GCP_Id": "923", "GCP_Info": "", "GCP_Row": "31105", "GCP_Col": "16796", "GCP_X": "-23.9781", "GCP_Y": "15.7574", "GCP_Z": "0", }, {"GCP_Id": "924", "GCP_Info": "", "GCP_Row": "31105", "GCP_Col": "17662", "GCP_X": "-23.9432", "GCP_Y": "15.7638", "GCP_Z": "0", }, -]} +]} \ No newline at end of file diff --git a/Modules/Core/Metadata/src/otbSentinel1ImageMetadataInterface.cxx b/Modules/Core/Metadata/src/otbSentinel1ImageMetadataInterface.cxx index 0d51c05bb8..3863cc35b0 100644 --- a/Modules/Core/Metadata/src/otbSentinel1ImageMetadataInterface.cxx +++ b/Modules/Core/Metadata/src/otbSentinel1ImageMetadataInterface.cxx @@ -405,8 +405,8 @@ void Sentinel1ImageMetadataInterface::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, "ACQUISITION_STOP_TIME"); + Fetch(MDTime::AcquisitionStartTime, mds, "ACQUISITION_START_TIME"); + Fetch(MDTime::AcquisitionStopTime, mds, "ACQUISITION_STOP_TIME"); Fetch(MDStr::BeamMode, mds, "BEAM_MODE"); Fetch(MDStr::BeamSwath, mds, "BEAM_SWATH"); Fetch("FACILITY_IDENTIFIER", mds, "FACILITY_IDENTIFIER"); @@ -421,6 +421,16 @@ void Sentinel1ImageMetadataInterface::Parse(const MetadataSupplierInterface *mds Fetch(MDStr::SensorID, mds, "SENSOR_IDENTIFIER"); Fetch(MDStr::Swath, mds, "SWATH"); + // Manifest file + std::string ManifestFilePath = mds->GetResourceFile(std::string("manifest\\.safe")); + if (!ManifestFilePath.empty()) + { + XMLMetadataSupplier ManifestMS = XMLMetadataSupplier(ManifestFilePath); + m_Imd.Add(MDTime::ProductionDate, + ManifestMS.GetFirstAs<MetaData::Time>( + "xfdu:XFDU.metadataSection.metadataObject_#.metadataWrap.xmlData.safe:processing.start")); + } + // Band metadata for (int bandId = 0 ; bandId < mds->GetNbBands() ; ++bandId) { @@ -434,19 +444,19 @@ void Sentinel1ImageMetadataInterface::Parse(const MetadataSupplierInterface *mds + std::string("-.*\\.xml")); if (!AnnotationFilePath.empty()) { - XMLMetadataSupplier xmlMS = XMLMetadataSupplier(AnnotationFilePath); + XMLMetadataSupplier AnnotationMS = XMLMetadataSupplier(AnnotationFilePath); - sarParam.azimuthFmRate = this->GetAzimuthFmRate(xmlMS); + sarParam.azimuthFmRate = this->GetAzimuthFmRate(AnnotationMS); // Calibration file std::string CalibrationFilePath = itksys::SystemTools::GetFilenamePath(AnnotationFilePath) + "/calibration/calibration-" + itksys::SystemTools::GetFilenameName(AnnotationFilePath); - xmlMS = XMLMetadataSupplier(CalibrationFilePath); - sarParam.absoluteCalibrationConstant = xmlMS.GetAs<double>("calibration.calibrationInformation.absoluteCalibrationConstant"); - sarParam.calibrationVectors = this->GetCalibrationVector(xmlMS); - std::istringstream(xmlMS.GetAs<std::string>("calibration.adsHeader.startTime")) >> sarParam.startTime; - std::istringstream(xmlMS.GetAs<std::string>("calibration.adsHeader.stopTime")) >> sarParam.stopTime; + XMLMetadataSupplier CalibrationMS = XMLMetadataSupplier(CalibrationFilePath); + sarParam.absoluteCalibrationConstant = CalibrationMS.GetAs<double>("calibration.calibrationInformation.absoluteCalibrationConstant"); + sarParam.calibrationVectors = this->GetCalibrationVector(CalibrationMS); + std::istringstream(CalibrationMS.GetAs<std::string>("calibration.adsHeader.startTime")) >> sarParam.startTime; + std::istringstream(CalibrationMS.GetAs<std::string>("calibration.adsHeader.stopTime")) >> sarParam.stopTime; } m_Imd.Bands[bandId].Add(MDGeom::SAR, sarParam); } -- GitLab