MeteoIODoc  MeteoIODoc-2.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Grid2DObject.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 GRID2DOBJECT_H
19 #define GRID2DOBJECT_H
20 
23 
24 #include <iostream>
25 
26 namespace mio {
27 
37 class Grid2DObject {
38  public:
40  typedef struct GRID_POINT_2D {
41  size_t ix;
42  size_t iy;
43  } grid_point_2d;
44 
45  double& operator ()(const size_t& ix, const size_t& iy);
46  double operator ()(const size_t& ix, const size_t& iy) const;
47  double& operator ()(const size_t& i);
48  double operator ()(const size_t& i) const;
49 
50  const std::string toString() const;
51  friend std::iostream& operator<<(std::iostream& os, const Grid2DObject& grid);
52  friend std::iostream& operator>>(std::iostream& is, Grid2DObject& grid);
53 
58  Grid2DObject();
59  Grid2DObject(const size_t& ncols, const size_t& nrows,
60  const double& cellsize, const Coords& i_llcorner);
61 
62  Grid2DObject(const size_t& ncols, const size_t& nrows,
63  const double& cellsize, const Coords& i_llcorner, const double& init);
64 
65  Grid2DObject(const Grid2DObject& i_grid, const double& init);
66 
67  Grid2DObject(const double& cellsize, const Coords& i_llcorner, const Array2D<double>& grid2D_in);
68 
69  virtual ~Grid2DObject() {}
70 
79  Grid2DObject(const Grid2DObject& i_grid2Dobj,
80  const size_t& i_nx, const size_t& i_ny, //Point in the plane
81  const size_t& i_ncols, const size_t& i_nrows); //dimensions of the sub-plane
82 
91  bool gridify(Coords& point) const;
92 
103  bool gridify(std::vector<Coords>& vec_points, const bool& keep_invalid=false) const;
104 
112  void set(const size_t& ncols, const size_t& nrows,
113  const double& cellsize, const Coords& i_llcorner);
121  void set(const double& cellsize, const Coords& i_llcorner, const Array2D<double>& grid2D_in);
122 
123  void set(const size_t& ncols, const size_t& nrows,
124  const double& cellsize, const Coords& i_llcorner, const double& init);
125 
126  void set(const Grid2DObject& i_grid, const double& init);
127 
132  void rescale(const double& i_cellsize);
133 
134  void size(size_t& o_ncols, size_t& o_nrows) const;
135  size_t size() const;
136  size_t getNx() const;
137  size_t getNy() const;
138 
142  void clear();
143 
148  bool empty() const;
149 
157  bool isSameGeolocalization(const Grid2DObject& target) const;
158 
168  bool clusterization(const std::vector<double>& thresholds, const std::vector<double>& ids);
169 
171  Grid2DObject& operator=(const double& value);
172 
173  Grid2DObject& operator+=(const double& rhs);
174  const Grid2DObject operator+(const double& rhs) const;
175  Grid2DObject& operator+=(const Grid2DObject& rhs);
176  const Grid2DObject operator+(const Grid2DObject& rhs) const;
177 
178  Grid2DObject& operator-=(const double& rhs);
179  const Grid2DObject operator-(const double& rhs) const;
180  Grid2DObject& operator-=(const Grid2DObject& rhs);
181  const Grid2DObject operator-(const Grid2DObject& rhs) const;
182 
183  Grid2DObject& operator*=(const double& rhs);
184  const Grid2DObject operator*(const double& rhs) const;
185  Grid2DObject& operator*=(const Grid2DObject& rhs);
186  const Grid2DObject operator*(const Grid2DObject& rhs) const;
187 
188  Grid2DObject& operator/=(const double& rhs);
189  const Grid2DObject operator/(const double& rhs) const;
190  Grid2DObject& operator/=(const Grid2DObject& rhs);
191  const Grid2DObject operator/(const Grid2DObject& rhs) const;
192 
193  bool operator==(const Grid2DObject& in) const;
194  bool operator!=(const Grid2DObject& in) const;
195 
198  double cellsize;
199 
200  protected:
201  void setValues(const double& cellsize, const Coords& i_llcorner);
202 
208  bool WGS84_to_grid(Coords& point) const;
209 
215  bool grid_to_WGS84(Coords& point) const;
216 };
217 } //end namespace
218 
219 #endif
size_t iy
grid index along Y
Definition: Grid2DObject.h:42
friend std::iostream & operator<<(std::iostream &os, const Grid2DObject &grid)
Definition: Grid2DObject.cc:440
size_t ix
grid index along X
Definition: Grid2DObject.h:41
size_t size() const
Definition: Grid2DObject.cc:353
bool WGS84_to_grid(Coords &point) const
Converts WGS84 coordinates into grid coordinates (i,j)
Definition: Grid2DObject.cc:266
bool empty() const
Check if a grid does not contain any data (but it can contain geolocalization)
Definition: Grid2DObject.cc:370
bool isSameGeolocalization(const Grid2DObject &target) const
check if the current Grid2DObject has the same geolocalization attributes as another Grid2DObject (as...
Definition: Grid2DObject.cc:380
friend std::iostream & operator>>(std::iostream &is, Grid2DObject &grid)
Definition: Grid2DObject.cc:447
size_t getNy() const
Definition: Grid2DObject.cc:361
Grid2DObject & operator=(const Grid2DObject &)
Assignement operator.
Definition: Grid2DObject.cc:29
Grid2DObject & operator+=(const double &rhs)
Definition: Grid2DObject.cc:43
Grid2DObject & operator-=(const double &rhs)
Definition: Grid2DObject.cc:69
Array2D< double > grid2D
the grid itself (simple 2D table containing the values for each point)
Definition: Grid2DObject.h:196
A class to handle geographic coordinate systems. This class offers an easy way to transparently conve...
Definition: Coords.h:81
const Grid2DObject operator/(const double &rhs) const
Definition: Grid2DObject.cc:126
Grid2DObject & operator*=(const double &rhs)
Definition: Grid2DObject.cc:95
void set(const size_t &ncols, const size_t &nrows, const double &cellsize, const Coords &i_llcorner)
Set all variables in one go.
Definition: Grid2DObject.cc:311
bool grid_to_WGS84(Coords &point) const
Converts grid coordinates (i,j) into WGS84 coordinates.
Definition: Grid2DObject.cc:224
bool operator!=(const Grid2DObject &in) const
Operator that tests for inequality.
Definition: Grid2DObject.cc:151
const Grid2DObject operator-(const double &rhs) const
Definition: Grid2DObject.cc:74
structure to contain the grid coordinates of a point in a 2D grid
Definition: Grid2DObject.h:40
double & operator()(const size_t &ix, const size_t &iy)
Definition: Grid2DObject.cc:414
Grid2DObject()
Default constructor. Initializes all variables to 0, except lat/long which are initialized to IOUtils...
Definition: Grid2DObject.cc:159
A class to represent 2D Grids. Typical application as DEM or Landuse Model.
Definition: Grid2DObject.h:37
Coords llcorner
lower left corner of the grid
Definition: Grid2DObject.h:197
void setValues(const double &cellsize, const Coords &i_llcorner)
Definition: Grid2DObject.cc:374
bool clusterization(const std::vector< double > &thresholds, const std::vector< double > &ids)
Partitional algorithm to classify each point of the grid. The classification is given by a list of gr...
Definition: Grid2DObject.cc:392
const Grid2DObject operator+(const double &rhs) const
Definition: Grid2DObject.cc:48
void rescale(const double &i_cellsize)
Rescale (bilinear resampling) the grid to match the given cell size.
Definition: Grid2DObject.cc:337
const std::string toString() const
Definition: Grid2DObject.cc:430
size_t getNx() const
Definition: Grid2DObject.cc:357
virtual ~Grid2DObject()
Definition: Grid2DObject.h:69
Grid2DObject & operator/=(const double &rhs)
Definition: Grid2DObject.cc:121
bool gridify(Coords &point) const
Compute the positional parameters that are not already known This means that the Coords::point object...
Definition: Grid2DObject.cc:207
double cellsize
dimension in meters of a cell (considered to be square)
Definition: Grid2DObject.h:198
const Grid2DObject operator*(const double &rhs) const
Definition: Grid2DObject.cc:100
void clear()
deletes the data, but keeps geolocalization
Definition: Grid2DObject.cc:366
bool operator==(const Grid2DObject &in) const
Operator that tests for equality.
Definition: Grid2DObject.cc:147