OGS
Raster.h
Go to the documentation of this file.
1 
14 #pragma once
15 
16 #include <array>
17 #include <utility>
18 
19 #include "MathLib/Point3d.h"
20 
21 namespace GeoLib {
22 
25 {
26  std::size_t n_cols; // width
27  std::size_t n_rows; // height
28  std::size_t n_depth; // depth (for 3d image)
29  MathLib::Point3d origin; // lower left corner
30  double cell_size; // edge length of each pixel
31  double no_data; // no data value
32 };
33 
42 class Raster {
43 public:
44  using const_iterator = const double*;
45  using iterator = double*;
46 
56  template <typename InputIterator>
57  Raster(RasterHeader header, InputIterator begin, InputIterator end)
58  : _header(std::move(header)),
59  _raster_data(new double[_header.n_cols * _header.n_rows])
60  {
62  }
63 
64  Raster(Raster const&) = delete;
65  Raster(Raster&&) = delete;
66  Raster& operator=(Raster const&) = delete;
67  Raster& operator=(Raster&&) = delete;
68 
70  RasterHeader const& getHeader() const { return _header; }
71 
75  void refineRaster(std::size_t scaling);
76 
81  const_iterator begin() const { return _raster_data; }
87 
91  double getValueAtPoint(const MathLib::Point3d &pnt) const;
92 
94  double interpolateValueAtPoint(const MathLib::Point3d &pnt) const;
95 
97  bool isPntOnRaster(MathLib::Point3d const& pnt) const;
98 
99  ~Raster();
100 
101 private:
102  void setCellSize(double cell_size);
103  void setNoDataVal (double no_data_val);
104 
106  double* _raster_data;
107 };
108 
109 } // namespace GeoLib
Definition of the Point3d class.
Class Raster is used for managing raster data.
Definition: Raster.h:42
Raster & operator=(Raster &&)=delete
GeoLib::RasterHeader _header
Definition: Raster.h:105
double * iterator
Definition: Raster.h:45
const double * const_iterator
Definition: Raster.h:44
Raster(RasterHeader header, InputIterator begin, InputIterator end)
Constructor for an object of class Raster. The raster data have to be handed over via input iterators...
Definition: Raster.h:57
void setNoDataVal(double no_data_val)
void refineRaster(std::size_t scaling)
Definition: Raster.cpp:25
double * _raster_data
Definition: Raster.h:106
Raster(Raster &&)=delete
double getValueAtPoint(const MathLib::Point3d &pnt) const
Definition: Raster.cpp:63
bool isPntOnRaster(MathLib::Point3d const &pnt) const
Checks if the given point is located within the (x,y)-extension of the raster.
Definition: Raster.cpp:158
double interpolateValueAtPoint(const MathLib::Point3d &pnt) const
Interpolates the elevation of the given point based on the 8-neighbourhood of the raster cell it is l...
Definition: Raster.cpp:92
Raster(Raster const &)=delete
const_iterator begin() const
Definition: Raster.h:81
RasterHeader const & getHeader() const
Returns the complete header information.
Definition: Raster.h:70
void setCellSize(double cell_size)
const_iterator end() const
Definition: Raster.h:86
Raster & operator=(Raster const &)=delete
void copy(PETScVector const &x, PETScVector &y)
Definition: LinAlg.cpp:37
Contains the relevant information when storing a geoscientific raster data.
Definition: Raster.h:25
std::size_t n_depth
Definition: Raster.h:28
double cell_size
Definition: Raster.h:30
MathLib::Point3d origin
Definition: Raster.h:29
std::size_t n_cols
Definition: Raster.h:26
std::size_t n_rows
Definition: Raster.h:27