LCOV - code coverage report
Current view: top level - apps - gdalalg_raster_tile.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 8 10 80.0 %
Date: 2025-09-10 17:48:50 Functions: 5 6 83.3 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GDAL
       4             :  * Purpose:  gdal "raster tile" subcommand
       5             :  * Author:   Even Rouault <even dot rouault at spatialys.com>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2025, Even Rouault <even dot rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #ifndef GDALALG_RASTER_TILE_INCLUDED
      14             : #define GDALALG_RASTER_TILE_INCLUDED
      15             : 
      16             : #include "gdalalg_raster_pipeline.h"
      17             : 
      18             : #include "cpl_string.h"
      19             : 
      20             : #include <limits>
      21             : 
      22             : //! @cond Doxygen_Suppress
      23             : 
      24             : class GDALDataset;
      25             : class GDALDriver;
      26             : 
      27             : typedef struct _CPLSpawnedProcess CPLSpawnedProcess;
      28             : 
      29             : /************************************************************************/
      30             : /*                       GDALRasterTileAlgorithm                        */
      31             : /************************************************************************/
      32             : 
      33             : class GDALRasterTileAlgorithm /* non final */
      34             :     : public GDALRasterPipelineStepAlgorithm
      35             : {
      36             :   public:
      37             :     static constexpr const char *NAME = "tile";
      38             :     static constexpr const char *DESCRIPTION =
      39             :         "Generate tiles in separate files from a raster dataset.";
      40             :     static constexpr const char *HELP_URL = "/programs/gdal_raster_tile.html";
      41             : 
      42             :     explicit GDALRasterTileAlgorithm(bool standaloneStep = false);
      43             : 
      44          25 :     bool CanBeLastStep() const override
      45             :     {
      46          25 :         return true;
      47             :     }
      48             : 
      49           0 :     bool IsNativelyStreamingCompatible() const override
      50             :     {
      51           0 :         return false;
      52             :     }
      53             : 
      54           2 :     bool SupportsInputMultiThreading() const override
      55             :     {
      56           2 :         return true;
      57             :     }
      58             : 
      59             :   private:
      60             :     CPL_DISALLOW_COPY_ASSIGN(GDALRasterTileAlgorithm)
      61             : 
      62             :     std::vector<std::string> m_metadata{};
      63             :     bool m_copySrcMetadata = false;
      64             :     std::string m_tilingScheme{};
      65             :     std::string m_convention = "xyz";
      66             :     std::string m_resampling{};
      67             :     std::string m_overviewResampling{};
      68             :     int m_minZoomLevel = -1;
      69             :     int m_maxZoomLevel = -1;
      70             :     bool m_noIntersectionIsOK = false;
      71             :     int m_minTileX = -1;
      72             :     int m_minTileY = -1;
      73             :     int m_maxTileX = -1;
      74             :     int m_maxTileY = -1;
      75             :     int m_ovrZoomLevel = -1;  // Used in spawn mode
      76             :     int m_minOvrTileX = -1;   // Used in spawn mode
      77             :     int m_minOvrTileY = -1;   // Used in spawn mode
      78             :     int m_maxOvrTileX = -1;   // Used in spawn mode
      79             :     int m_maxOvrTileY = -1;   // Used in spawn mode
      80             :     int m_tileSize = 0;
      81             :     bool m_addalpha = false;
      82             :     bool m_noalpha = false;
      83             :     double m_dstNoData = 0;
      84             :     bool m_skipBlank = false;
      85             :     bool m_auxXML = false;
      86             :     bool m_resume = false;
      87             :     bool m_kml = false;
      88             :     bool m_spawned = false;
      89             :     bool m_forked = false;
      90             :     bool m_dummy = false;
      91             :     int m_numThreads = 0;
      92             :     std::string m_parallelMethod{};
      93             : 
      94             :     std::string m_excludedValues{};
      95             :     double m_excludedValuesPctThreshold = 50;
      96             :     double m_nodataValuesPctThreshold = 100;
      97             : 
      98             :     std::vector<std::string> m_webviewers{};
      99             :     std::string m_url{};
     100             :     std::string m_title{};
     101             :     std::string m_copyright{};
     102             :     std::string m_mapmlTemplate{};
     103             : 
     104             :     // Work variables
     105             :     std::string m_numThreadsStr{"ALL_CPUS"};
     106             :     std::map<std::string, std::string> m_mapTileMatrixIdentifierToScheme{};
     107             :     GDALDataset *m_poSrcDS = nullptr;
     108             :     bool m_bIsNamedNonMemSrcDS = false;
     109             :     GDALDriver *m_poDstDriver = nullptr;
     110             :     std::string m_osGDALPath{};
     111             : 
     112             :     // Private methods
     113             :     bool RunImpl(GDALProgressFunc pfnProgress, void *pProgressData) override;
     114             :     bool RunStep(GDALPipelineStepRunContext &ctxt) override;
     115             : 
     116             :     bool ValidateOutputFormat(GDALDataType eSrcDT) const;
     117             : 
     118             :     static void ComputeJobChunkSize(int nMaxJobCount, int nTilesPerCol,
     119             :                                     int nTilesPerRow, double &dfTilesYPerJob,
     120             :                                     int &nYOuterIterations,
     121             :                                     double &dfTilesXPerJob,
     122             :                                     int &nXOuterIterations);
     123             : 
     124             :     bool AddArgToArgv(const GDALAlgorithmArg *arg,
     125             :                       CPLStringList &aosArgv) const;
     126             : 
     127             :     bool IsCompatibleOfSpawn(const char *&pszErrorMsg);
     128             : 
     129             :     int GetMaxChildCount(int nMaxJobCount) const;
     130             : 
     131             :     void WaitForSpawnedProcesses(
     132             :         bool &bRet, const std::vector<std::string> &asCommandLines,
     133             :         std::vector<CPLSpawnedProcess *> &ahSpawnedProcesses) const;
     134             :     bool GenerateBaseTilesSpawnMethod(
     135             :         int nBaseTilesPerCol, int nBaseTilesPerRow, int nMinTileX,
     136             :         int nMinTileY, int nMaxTileX, int nMaxTileY, uint64_t nTotalTiles,
     137             :         uint64_t nBaseTiles, GDALProgressFunc pfnProgress, void *pProgressData);
     138             : 
     139             :     bool GenerateOverviewTilesSpawnMethod(
     140             :         int iZ, int nOvrMinTileX, int nOvrMinTileY, int nOvrMaxTileX,
     141             :         int nOvrMaxTileY, std::atomic<uint64_t> &nCurTile, uint64_t nTotalTiles,
     142             :         GDALProgressFunc pfnProgress, void *pProgressData);
     143             : };
     144             : 
     145             : /************************************************************************/
     146             : /*                 GDALRasterTileAlgorithmStandalone                    */
     147             : /************************************************************************/
     148             : 
     149         334 : class GDALRasterTileAlgorithmStandalone final : public GDALRasterTileAlgorithm
     150             : {
     151             :   public:
     152         167 :     GDALRasterTileAlgorithmStandalone()
     153         167 :         : GDALRasterTileAlgorithm(/* standaloneStep = */ true)
     154             :     {
     155         167 :     }
     156             : 
     157             :     ~GDALRasterTileAlgorithmStandalone() override;
     158             : };
     159             : 
     160             : //! @endcond
     161             : 
     162             : #endif

Generated by: LCOV version 1.14