GDAL
gdalalg_vector_grid.h
1/******************************************************************************
2 *
3 * Project: GDAL
4 * Purpose: gdal "vector grid" 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_VECTOR_GRID_INCLUDED
14#define GDALALG_VECTOR_GRID_INCLUDED
15
16#include "gdalalg_abstract_pipeline.h"
17
18#include <limits>
19
21
22/************************************************************************/
23/* GDALVectorGridAlgorithm */
24/************************************************************************/
25
26class GDALVectorGridAlgorithm /* non final */ : public GDALPipelineStepAlgorithm
27{
28 public:
29 static constexpr const char *NAME = "grid";
30 static constexpr const char *DESCRIPTION =
31 "Create a regular grid from scattered points.";
32 static constexpr const char *HELP_URL = "/programs/gdal_vector_grid.html";
33
34 explicit GDALVectorGridAlgorithm(bool standaloneStep = false);
35
36 int GetInputType() const override
37 {
38 return GDAL_OF_VECTOR;
39 }
40
41 int GetOutputType() const override
42 {
43 return GDAL_OF_RASTER;
44 }
45
46 private:
47 bool RunStep(GDALPipelineStepRunContext &ctxt) override;
48 bool RunImpl(GDALProgressFunc pfnProgress, void *pProgressData) override;
49};
50
51/************************************************************************/
52/* GDALVectorGridAlgorithmStandalone */
53/************************************************************************/
54
55class GDALVectorGridAlgorithmStandalone final : public GDALVectorGridAlgorithm
56{
57 public:
58 GDALVectorGridAlgorithmStandalone()
59 : GDALVectorGridAlgorithm(/* standaloneStep = */ true)
60 {
61 }
62
63 ~GDALVectorGridAlgorithmStandalone() override;
64};
65
66/************************************************************************/
67/* GDALVectorGridAbstractAlgorithm */
68/************************************************************************/
69
70class GDALVectorGridAbstractAlgorithm /* non final */
71 : public GDALPipelineStepAlgorithm
72{
73 protected:
74 std::vector<double> m_targetExtent{};
75 std::vector<double>
76 m_targetResolution{}; // Mutually exclusive with targetSize
77 std::vector<int>
78 m_targetSize{}; // Mutually exclusive with targetResolution
79 std::string m_outputType{"Float64"};
80 std::string m_crs{};
81 std::vector<std::string> m_layers{};
82 std::string m_sql{};
83 std::string m_zField{};
84 double m_zOffset = 0;
85 double m_zMultiply = 1;
86 std::vector<double> m_bbox{};
87
88 // Common per-algorithm parameters
89 double m_radius1 = 0.0;
90 double m_radius2 = 0.0;
91 double m_radius = 0.0;
92 double m_angle = 0.0;
93 int m_minPoints = 0;
94 int m_maxPoints = std::numeric_limits<int>::max();
95 int m_minPointsPerQuadrant = 0;
96 int m_maxPointsPerQuadrant = std::numeric_limits<int>::max();
97 double m_nodata = 0;
98
99 GDALVectorGridAbstractAlgorithm(const std::string &name,
100 const std::string &description,
101 const std::string &helpURL,
102 bool standaloneStep);
103
104 bool IsNativelyStreamingCompatible() const override
105 {
106 return false;
107 }
108
109 int GetInputType() const override
110 {
111 return GDAL_OF_VECTOR;
112 }
113
114 int GetOutputType() const override
115 {
116 return GDAL_OF_RASTER;
117 }
118
119 bool RunStep(GDALPipelineStepRunContext &ctxt) override;
120 bool RunImpl(GDALProgressFunc pfnProgress, void *pProgressData) override;
121
122 GDALInConstructionAlgorithmArg &AddRadiusArg();
123 void AddRadius1AndRadius2Arg();
124 GDALInConstructionAlgorithmArg &AddAngleArg();
125 GDALInConstructionAlgorithmArg &AddMinPointsArg();
126 GDALInConstructionAlgorithmArg &AddMaxPointsArg();
127 void AddMinMaxPointsPerQuadrantArg();
128 GDALInConstructionAlgorithmArg &AddNodataArg();
129
130 virtual std::string GetGridAlgorithm() const = 0;
131};
132
134
135#endif
#define GDAL_OF_RASTER
Allow raster drivers to be used.
Definition gdal.h:1086
#define GDAL_OF_VECTOR
Allow vector drivers to be used.
Definition gdal.h:1091