SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
terrainsizefield.h
Go to the documentation of this file.
1
39#ifndef OPENSWMMVIS_MESH_TERRAINSIZEFIELD_H
40#define OPENSWMMVIS_MESH_TERRAINSIZEFIELD_H
41
42#include <QPointF>
43#include <QString>
44#include <QVector>
45
46#include <functional>
47
48class GDALDataset;
49
50namespace mesh
51{
52
54 double tolerance = 0.0;
55 int maxLevel = 10;
56 int outLevel = 2;
58 qint64 maxBandBytes = 256ll * 1024 * 1024;
60
64 std::function<void(const float *, int, int, int)> rowSink;
65 bool rowsOnly = false;
69 int decimation = 1;
70};
71
73{
74public:
108 bool build(GDALDataset *ds, int band, int col0, int row0, int cols, int rows,
109 const TerrainSizeOptions &opt, const std::function<bool(double)> &progress = {});
110
139 bool buildFromFile(const QString &path, int band, double gx0, double gy0, double gx1,
140 double gy1, const TerrainSizeOptions &opt,
141 const std::function<bool(double)> &progress = {});
142
157 [[nodiscard]] double sizeAtGeo(double x, double y) const;
166 [[nodiscard]] double pixelSize() const { return m_pixelSize; }
182 [[nodiscard]] QPointF windowPixelToGeo(double px, double py) const;
183
206 bool buildFromGrid(const float *z, int cols, int rows, const TerrainSizeOptions &opt);
207
225 [[nodiscard]] double sizePixelsAt(double px, double py) const;
226
233 [[nodiscard]] bool isValid() const { return m_outCols > 0 && m_outRows > 0; }
239 [[nodiscard]] int outCols() const { return m_outCols; }
245 [[nodiscard]] int outRows() const { return m_outRows; }
252 [[nodiscard]] int outLevel() const { return m_outLevel; }
259 [[nodiscard]] int levelsUsed() const { return m_maxLevel; }
268 [[nodiscard]] const QVector<float> &cells() const { return m_h; }
276 [[nodiscard]] QString errorMsg() const { return m_errorMsg; }
277
278private:
298 void processBand(const float *z, int cols, int bandRows, int bandRow0, double tol);
310 void dilateMinimum();
311
312 QVector<float> m_h;
313 int m_outCols = 0, m_outRows = 0;
314 int m_outLevel = 2, m_maxLevel = 10;
315 int m_col0 = 0, m_row0 = 0, m_cols = 0, m_rows = 0;
316 int m_decimation = 1;
317 double m_geo[6] = {0, 1, 0, 0, 0, 1};
318 double m_invGeo[6] = {0, 1, 0, 0, 0, 1};
319 double m_pixelSize = 0.0;
320 QString m_errorMsg;
321};
322
323} // namespace mesh
324
325#endif // OPENSWMMVIS_MESH_TERRAINSIZEFIELD_H
int band
Definition blocks.cpp:29
Definition terrainsizefield.h:73
QString errorMsg() const
Copy the latest checked build diagnostic.
Definition terrainsizefield.h:276
bool buildFromFile(const QString &path, int band, double gx0, double gy0, double gx1, double gy1, const TerrainSizeOptions &opt, const std::function< bool(double)> &progress={})
Open a read-only raster and build over the clipped pixel envelope of a native-CRS box.
Definition terrainsizefield.cpp:309
bool buildFromGrid(const float *z, int cols, int rows, const TerrainSizeOptions &opt)
Build from a borrowed in-memory row-major float elevation grid using aligned dyadic bands.
Definition terrainsizefield.cpp:181
int outLevel() const
Read the retained output-grid dyadic exponent.
Definition terrainsizefield.h:252
QPointF windowPixelToGeo(double px, double py) const
Transform a fractional window-stream pixel coordinate to the retained native raster frame.
Definition terrainsizefield.cpp:366
bool isValid() const
Check whether stored output dimensions are positive.
Definition terrainsizefield.h:233
int levelsUsed() const
Read the retained maximum dyadic level available to the computation.
Definition terrainsizefield.h:259
bool build(GDALDataset *ds, int band, int col0, int row0, int cols, int rows, const TerrainSizeOptions &opt, const std::function< bool(double)> &progress={})
Replace this terrain-size grid by streaming a borrowed raster window, or stream rows only.
Definition terrainsizefield.cpp:212
int outCols() const
Read allocated terrain-size output column count.
Definition terrainsizefield.h:239
double sizeAtGeo(double x, double y) const
Read resolved pixel size multiplied by mean native raster pixel spacing.
Definition terrainsizefield.cpp:357
const QVector< float > & cells() const
Borrow the row-major resolved-size grid owned by this field.
Definition terrainsizefield.h:268
double sizePixelsAt(double px, double py) const
Read the nearest output-cell resolved size using absolute source-raster pixel coordinates.
Definition terrainsizefield.cpp:374
int outRows() const
Read allocated terrain-size output row count.
Definition terrainsizefield.h:245
double pixelSize() const
Read mean absolute diagonal geotransform pixel spacing stored by buildFromFile().
Definition terrainsizefield.h:166
QString path
Populated by the worker only after its own successful atomic creation.
Definition extensiontimeseriesaccess.cpp:32
GDALDataset * ds
Definition meshassignmentsampling.cpp:78
Definition meshcommands.h:38
Definition terrainsizefield.h:53
int maxLevel
Largest block tested: 2^maxLevel pixels (1024).
Definition terrainsizefield.h:55
int decimation
Definition terrainsizefield.h:69
std::function< void(const float *, int, int, int)> rowSink
Definition terrainsizefield.h:64
bool rowsOnly
Stream rows without allocating or computing a size grid.
Definition terrainsizefield.h:65
double tolerance
Vertical tolerance in the DEM's units. <= 0 = no field.
Definition terrainsizefield.h:54
int outLevel
Definition terrainsizefield.h:56
qint64 maxBandBytes
a full-width band of 2^maxLevel rows would exceed it.
Definition terrainsizefield.h:58
int rows
Definition terrainerrorfield.cpp:54
int y
Definition terrainerrorfield.cpp:60
int cols
Definition terrainerrorfield.cpp:54
int x
Definition terrainerrorfield.cpp:60
const ExportProgress * progress
Definition vectorexport.cpp:211