LCOV - code coverage report
Current view: top level - gcore/mdreader - reader_orb_view.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 54 56 96.4 %
Date: 2024-11-25 13:07:18 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GDAL Core
       4             :  * Purpose:  Read metadata from OrbView imagery.
       5             :  * Author:   Alexander Lisovenko
       6             :  * Author:   Dmitry Baryshnikov, polimax@mail.ru
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2014-2015 NextGIS <info@nextgis.ru>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #include "cpl_port.h"
      15             : #include "reader_orb_view.h"
      16             : 
      17             : #include <ctime>
      18             : 
      19             : #include "cpl_conv.h"
      20             : #include "cpl_error.h"
      21             : #include "cpl_string.h"
      22             : #include "cpl_time.h"
      23             : 
      24             : #include "gdal_priv.h"
      25             : 
      26             : /**
      27             :  * GDALMDReaderOrbView()
      28             :  */
      29        5113 : GDALMDReaderOrbView::GDALMDReaderOrbView(const char *pszPath,
      30        5113 :                                          char **papszSiblingFiles)
      31             :     : GDALMDReaderBase(pszPath, papszSiblingFiles),
      32             :       m_osIMDSourceFilename(
      33             :           GDALFindAssociatedFile(pszPath, "PVL", papszSiblingFiles, 0)),
      34        5113 :       m_osRPBSourceFilename(CPLString())
      35             : {
      36        5113 :     const char *pszBaseName = CPLGetBasename(pszPath);
      37        5113 :     const char *pszDirName = CPLGetDirname(pszPath);
      38             : 
      39             :     std::string osRPBSourceFilename =
      40       10226 :         CPLFormFilename(pszDirName, CPLSPrintf("%s_rpc", pszBaseName), "txt");
      41        5113 :     if (CPLCheckForFile(&osRPBSourceFilename[0], papszSiblingFiles))
      42             :     {
      43          13 :         m_osRPBSourceFilename = std::move(osRPBSourceFilename);
      44             :     }
      45             :     else
      46             :     {
      47             :         osRPBSourceFilename = CPLFormFilename(
      48        5100 :             pszDirName, CPLSPrintf("%s_RPC", pszBaseName), "TXT");
      49        5100 :         if (CPLCheckForFile(&osRPBSourceFilename[0], papszSiblingFiles))
      50             :         {
      51           0 :             m_osRPBSourceFilename = std::move(osRPBSourceFilename);
      52             :         }
      53             :     }
      54             : 
      55        5113 :     if (!m_osIMDSourceFilename.empty())
      56           1 :         CPLDebug("MDReaderOrbView", "IMD Filename: %s",
      57             :                  m_osIMDSourceFilename.c_str());
      58        5113 :     if (!m_osRPBSourceFilename.empty())
      59          13 :         CPLDebug("MDReaderOrbView", "RPB Filename: %s",
      60             :                  m_osRPBSourceFilename.c_str());
      61        5113 : }
      62             : 
      63             : /**
      64             :  * ~GDALMDReaderOrbView()
      65             :  */
      66       10226 : GDALMDReaderOrbView::~GDALMDReaderOrbView()
      67             : {
      68       10226 : }
      69             : 
      70             : /**
      71             :  * HasRequiredFiles()
      72             :  */
      73        5113 : bool GDALMDReaderOrbView::HasRequiredFiles() const
      74             : {
      75        5113 :     if (!m_osIMDSourceFilename.empty() && !m_osRPBSourceFilename.empty())
      76           1 :         return true;
      77             : 
      78        5112 :     return false;
      79             : }
      80             : 
      81             : /**
      82             :  * GetMetadataFiles()
      83             :  */
      84           1 : char **GDALMDReaderOrbView::GetMetadataFiles() const
      85             : {
      86           1 :     char **papszFileList = nullptr;
      87           1 :     if (!m_osIMDSourceFilename.empty())
      88           1 :         papszFileList = CSLAddString(papszFileList, m_osIMDSourceFilename);
      89           1 :     if (!m_osRPBSourceFilename.empty())
      90           1 :         papszFileList = CSLAddString(papszFileList, m_osRPBSourceFilename);
      91             : 
      92           1 :     return papszFileList;
      93             : }
      94             : 
      95             : /**
      96             :  * LoadMetadata()
      97             :  */
      98           2 : void GDALMDReaderOrbView::LoadMetadata()
      99             : {
     100           2 :     if (m_bIsMetadataLoad)
     101           1 :         return;
     102             : 
     103           1 :     if (!m_osIMDSourceFilename.empty())
     104             :     {
     105           1 :         m_papszIMDMD = GDALLoadIMDFile(m_osIMDSourceFilename);
     106             :     }
     107             : 
     108           1 :     if (!m_osRPBSourceFilename.empty())
     109             :     {
     110           1 :         m_papszRPCMD = GDALLoadRPCFile(m_osRPBSourceFilename);
     111             :     }
     112             : 
     113           1 :     m_papszDEFAULTMD = CSLAddNameValue(m_papszDEFAULTMD, MD_NAME_MDTYPE, "OV");
     114             : 
     115           1 :     m_bIsMetadataLoad = true;
     116             : 
     117           1 :     if (nullptr == m_papszIMDMD)
     118             :     {
     119           0 :         return;
     120             :     }
     121             : 
     122             :     // extract imagery metadata
     123             :     const char *pszSatId =
     124           1 :         CSLFetchNameValue(m_papszIMDMD, "sensorInfo.satelliteName");
     125           1 :     if (nullptr != pszSatId)
     126             :     {
     127           1 :         m_papszIMAGERYMD = CSLAddNameValue(m_papszIMAGERYMD, MD_NAME_SATELLITE,
     128           2 :                                            CPLStripQuotes(pszSatId));
     129             :     }
     130             : 
     131           2 :     const char *pszCloudCover = CSLFetchNameValue(
     132           1 :         m_papszIMDMD, "productInfo.productCloudCoverPercentage");
     133           1 :     if (nullptr != pszCloudCover)
     134             :     {
     135           1 :         m_papszIMAGERYMD = CSLAddNameValue(m_papszIMAGERYMD, MD_NAME_CLOUDCOVER,
     136             :                                            pszCloudCover);
     137             :     }
     138             : 
     139           2 :     const char *pszDateTime = CSLFetchNameValue(
     140           1 :         m_papszIMDMD, "inputImageInfo.firstLineAcquisitionDateTime");
     141             : 
     142           1 :     if (nullptr != pszDateTime)
     143             :     {
     144             :         char buffer[80];
     145           1 :         GIntBig timeMid = GetAcquisitionTimeFromString(pszDateTime);
     146             :         struct tm tmBuf;
     147           1 :         strftime(buffer, 80, MD_DATETIMEFORMAT,
     148           1 :                  CPLUnixTimeToYMDHMS(timeMid, &tmBuf));
     149           1 :         m_papszIMAGERYMD =
     150           1 :             CSLAddNameValue(m_papszIMAGERYMD, MD_NAME_ACQDATETIME, buffer);
     151             :     }
     152             : }

Generated by: LCOV version 1.14