MeteoIODoc  MeteoIODoc-2.9.0
Grid3DObject.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2009 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of MeteoIO.
5  MeteoIO is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  MeteoIO is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef GRID3DOBJECT_H
19 #define GRID3DOBJECT_H
20 
24 
25 #include <iostream>
26 
27 namespace mio {
28 
39  public:
40  typedef struct GRID_POINT_3D { //TODO: this potentially conflicts with the definition in Grid2DObject
41  size_t ix;
42  size_t iy;
43  size_t iz;
44  } grid_point_3d;
45 
46  double& operator ()(const size_t& ix, const size_t& iy, const size_t& iz);
47  double operator ()(const size_t& ix, const size_t& iy, const size_t& iz) const;
48  double& operator ()(const size_t& i);
49  double operator ()(const size_t& i) const;
50 
51  const std::string toString() const;
52  friend std::ostream& operator<<(std::ostream& os, const Grid3DObject& grid);
53  friend std::istream& operator>>(std::istream& is, Grid3DObject& grid);
54 
59  Grid3DObject();
60 
66  Grid3DObject(const Grid3DObject& i_grid3D,
67  const size_t& i_nx, const size_t& i_ny, const size_t& i_nz,
68  const size_t& i_ncols, const size_t& i_nrows, const size_t& i_ndepths);
69 
70  Grid3DObject(const size_t& ncols, const size_t& nrows, const size_t& ndepths,
71  const double& cellsize, const Coords& i_llcorner);
72 
73  Grid3DObject(const size_t& ncols, const size_t& nrows, const size_t& ndepths,
74  const double& cellsize, const Coords& i_llcorner, const double& init);
75 
76  Grid3DObject(const Grid3DObject& i_grid, const double& init);
77 
78  Grid3DObject(const double& cellsize, const Coords& i_llcorner, const Array3D<double>& grid3D);
79 
88  void set(const size_t& ncols, const size_t& nrows, const size_t& depths,
89  const double& cellsize, const Coords& i_llcorner);
98  void set(const double& cellsize, const Coords& i_llcorner, const Array3D<double>& grid3D_in);
99 
100  void set(const size_t& ncols, const size_t& nrows, const size_t& ndepths,
101  const double& cellsize, const Coords& i_llcorner, const double& init);
102 
103  void set(const Grid3DObject& i_grid, const double& init);
104 
105  void size(size_t& o_ncols, size_t& o_nrows, size_t& o_ndepths) const;
106  size_t size() const;
107  size_t getNx() const;
108  size_t getNy() const;
109  size_t getNz() const;
110 
114  void clear();
115 
120  bool empty() const;
121 
130  bool gridify(Coords& point) const;
131 
142  bool gridify(std::vector<Coords>& vec_points, const bool& keep_invalid=false) const;
143 
151  bool isSameGeolocalization(const Grid3DObject& target) const;
152 
158  void extractLayer(const size_t& i_z, Grid2DObject& layer);
159 
161  Grid3DObject& operator=(const double& value);
162 
163  Grid3DObject& operator+=(const double& rhs);
164  const Grid3DObject operator+(const double& rhs) const;
165  Grid3DObject& operator+=(const Grid3DObject& rhs);
166  const Grid3DObject operator+(const Grid3DObject& rhs) const;
167 
168  Grid3DObject& operator-=(const double& rhs);
169  const Grid3DObject operator-(const double& rhs) const;
170  Grid3DObject& operator-=(const Grid3DObject& rhs);
171  const Grid3DObject operator-(const Grid3DObject& rhs) const;
172 
173  Grid3DObject& operator*=(const double& rhs);
174  const Grid3DObject operator*(const double& rhs) const;
175  Grid3DObject& operator*=(const Grid3DObject& rhs);
176  const Grid3DObject operator*(const Grid3DObject& rhs) const;
177 
178  Grid3DObject& operator/=(const double& rhs);
179  const Grid3DObject operator/(const double& rhs) const;
180  Grid3DObject& operator/=(const Grid3DObject& rhs);
181  const Grid3DObject operator/(const Grid3DObject& rhs) const;
182 
183  bool operator==(const Grid3DObject& in) const;
184  bool operator!=(const Grid3DObject& in) const;
185 
187  std::vector<double> z;
189  double cellsize;
191 
192  protected:
193  void setValues(const double& cellsize, const Coords& i_llcorner);
194 
200  bool WGS84_to_grid(Coords point) const;
201 
207  bool grid_to_WGS84(Coords& point) const;
208 };
209 } //end namespace
210 
211 #endif
Grid3DObject & operator-=(const double &rhs)
Definition: Grid3DObject.cc:68
const Grid3DObject operator+(const double &rhs) const
Definition: Grid3DObject.cc:47
const Grid3DObject operator/(const double &rhs) const
Definition: Grid3DObject.cc:125
Definition: Config.cc:28
Definition: Grid3DObject.h:40
Array3D< double > grid3D
Definition: Grid3DObject.h:186
Grid3DObject & operator*=(const double &rhs)
Definition: Grid3DObject.cc:94
std::vector< double > z
Definition: Grid3DObject.h:187
Coords llcorner
Vector of depths
Definition: Grid3DObject.h:188
size_t getNz() const
Definition: Grid3DObject.cc:376
A class to represent 3D Grids. Typical application: wind field.
Definition: Grid3DObject.h:38
bool gridify(Coords &point) const
Compute the positional parameters that are not already known This means that the Coords::point object...
Definition: Grid3DObject.cc:208
bool operator==(const Grid3DObject &in) const
Operator that tests for equality.
Definition: Grid3DObject.cc:146
Grid3DObject & operator/=(const double &rhs)
Definition: Grid3DObject.cc:120
A class to handle geographic coordinate systems. This class offers an easy way to transparently conve...
Definition: Coords.h:81
friend std::istream & operator>>(std::istream &is, Grid3DObject &grid)
Definition: Grid3DObject.cc:458
const Grid3DObject operator*(const double &rhs) const
Definition: Grid3DObject.cc:99
bool z_is_absolute
Definition: Grid3DObject.h:190
size_t size() const
Definition: Grid3DObject.cc:364
bool isSameGeolocalization(const Grid3DObject &target) const
check if the current Grid3DObject has the same geolocalization attributes as another Grid3DObject...
Definition: Grid3DObject.cc:394
void extractLayer(const size_t &i_z, Grid2DObject &layer)
Extract a 2D grid for a given height.
Definition: Grid3DObject.cc:407
void clear()
deletes the data, but keeps geolocalization
Definition: Grid3DObject.cc:380
size_t iy
grid index along Y
Definition: Grid3DObject.h:42
Grid3DObject & operator=(const Grid3DObject &)
Assignement operator.
Definition: Grid3DObject.cc:26
const Grid3DObject operator-(const double &rhs) const
Definition: Grid3DObject.cc:73
size_t getNy() const
Definition: Grid3DObject.cc:372
bool grid_to_WGS84(Coords &point) const
Converts grid coordinates (i,j) into WGS84 coordinates.
Definition: Grid3DObject.cc:226
friend std::ostream & operator<<(std::ostream &os, const Grid3DObject &grid)
Definition: Grid3DObject.cc:445
size_t getNx() const
Definition: Grid3DObject.cc:368
double & operator()(const size_t &ix, const size_t &iy, const size_t &iz)
Definition: Grid3DObject.cc:419
bool operator!=(const Grid3DObject &in) const
Operator that tests for inequality.
Definition: Grid3DObject.cc:150
double cellsize
Definition: Grid3DObject.h:189
void setValues(const double &cellsize, const Coords &i_llcorner)
Are z coordinates absolute or relative to a DEM?
Definition: Grid3DObject.cc:388
bool empty() const
Check if a grid does not contain any data (but it can contain geolocalization)
Definition: Grid3DObject.cc:384
size_t iz
grid index along Z
Definition: Grid3DObject.h:43
Grid3DObject()
Definition: Grid3DObject.cc:154
Grid3DObject & operator+=(const double &rhs)
Definition: Grid3DObject.cc:42
size_t ix
grid index along X
Definition: Grid3DObject.h:41
const std::string toString() const
Definition: Grid3DObject.cc:435
bool WGS84_to_grid(Coords point) const
Converts WGS84 coordinates into grid coordinates (i,j)
Definition: Grid3DObject.cc:273