Coverage Report

Created: 2026-02-14 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/apps/gdalalg_raster_tpi.cpp
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  GDAL
4
 * Purpose:  "tpi" step of "raster pipeline"
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
#include "gdalalg_raster_tpi.h"
14
15
#include "gdal_priv.h"
16
#include "gdal_utils.h"
17
18
#include <cmath>
19
20
//! @cond Doxygen_Suppress
21
22
#ifndef _
23
0
#define _(x) (x)
24
#endif
25
26
/************************************************************************/
27
/*           GDALRasterTPIAlgorithm::GDALRasterTPIAlgorithm()           */
28
/************************************************************************/
29
30
GDALRasterTPIAlgorithm::GDALRasterTPIAlgorithm(bool standaloneStep)
31
0
    : GDALRasterPipelineStepAlgorithm(NAME, DESCRIPTION, HELP_URL,
32
0
                                      standaloneStep)
33
0
{
34
0
    SetOutputVRTCompatible(false);
35
36
0
    AddBandArg(&m_band).SetDefault(m_band);
37
0
    AddArg("no-edges", 0,
38
0
           _("Do not try to interpolate values at dataset edges or close to "
39
0
             "nodata values"),
40
0
           &m_noEdges);
41
0
}
42
43
/************************************************************************/
44
/*                  GDALRasterTPIAlgorithm::RunStep()                   */
45
/************************************************************************/
46
47
bool GDALRasterTPIAlgorithm::RunStep(GDALPipelineStepRunContext &)
48
0
{
49
0
    const auto poSrcDS = m_inputDataset[0].GetDatasetRef();
50
0
    CPLAssert(poSrcDS);
51
0
    CPLAssert(m_outputDataset.GetName().empty());
52
0
    CPLAssert(!m_outputDataset.GetDatasetRef());
53
54
0
    CPLStringList aosOptions;
55
0
    aosOptions.AddString("-of");
56
0
    aosOptions.AddString("stream");
57
0
    aosOptions.AddString("-b");
58
0
    aosOptions.AddString(CPLSPrintf("%d", m_band));
59
0
    if (!m_noEdges)
60
0
        aosOptions.AddString("-compute_edges");
61
62
0
    GDALDEMProcessingOptions *psOptions =
63
0
        GDALDEMProcessingOptionsNew(aosOptions.List(), nullptr);
64
65
0
    auto poOutDS = std::unique_ptr<GDALDataset>(GDALDataset::FromHandle(
66
0
        GDALDEMProcessing("", GDALDataset::ToHandle(poSrcDS), "TPI", nullptr,
67
0
                          psOptions, nullptr)));
68
0
    GDALDEMProcessingOptionsFree(psOptions);
69
0
    const bool bRet = poOutDS != nullptr;
70
0
    if (poOutDS)
71
0
    {
72
0
        m_outputDataset.Set(std::move(poOutDS));
73
0
    }
74
75
0
    return bRet;
76
0
}
77
78
0
GDALRasterTPIAlgorithmStandalone::~GDALRasterTPIAlgorithmStandalone() = default;
79
80
//! @endcond