MeteoIODoc  2.10.0
Grid2DObject.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 /***********************************************************************************/
3 /* Copyright 2009 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
4 /***********************************************************************************/
5 /* This file is part of MeteoIO.
6  MeteoIO is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  MeteoIO is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
18 */
19 #ifndef GRID2DOBJECT_H
20 #define GRID2DOBJECT_H
21 
25 
26 #include <iostream>
27 
28 namespace mio {
29 
30 class IOInterface;
31 class GridsManager;
32 
42 class Grid2DObject {
43  friend class IOInterface;
44  friend class GridsManager;
45 
46  public:
48  typedef struct GRID_POINT_2D {
49  size_t ix;
50  size_t iy;
51  } grid_point_2d;
52 
53  double& operator ()(const size_t& ix, const size_t& iy);
54  double operator ()(const size_t& ix, const size_t& iy) const;
55  double& operator ()(const size_t& i);
56  double operator ()(const size_t& i) const;
57 
58  const std::string toString() const;
59  friend std::ostream& operator<<(std::ostream& os, const Grid2DObject& grid);
60  friend std::istream& operator>>(std::istream& is, Grid2DObject& grid);
61 
66  Grid2DObject();
67  Grid2DObject(const size_t& ncols, const size_t& nrows,
68  const double& cellsize, const Coords& i_llcorner);
69 
70  Grid2DObject(const size_t& ncols, const size_t& nrows,
71  const double& cellsize, const Coords& i_llcorner, const double& init);
72 
73  Grid2DObject(const Grid2DObject& i_grid, const double& init);
74 
75  Grid2DObject(const double& cellsize, const Coords& i_llcorner, const Array2D<double>& grid2D_in);
76 
85  Grid2DObject(const Grid2DObject& i_grid2Dobj,
86  const size_t& i_nx, const size_t& i_ny, //Point in the plane
87  const size_t& i_ncols, const size_t& i_nrows); //dimensions of the sub-plane
88 
97  bool gridify(Coords& point) const;
98 
109  bool gridify(std::vector<Coords>& vec_points, const bool& keep_invalid=false) const;
110  bool gridify(std::vector<StationData>& vec_points, const bool& keep_invalid=false) const;
111 
119  void set(const size_t& ncols, const size_t& nrows,
120  const double& cellsize, const Coords& i_llcorner);
128  void set(const double& cellsize, const Coords& i_llcorner, const Array2D<double>& grid2D_in);
129 
130  void set(const size_t& ncols, const size_t& nrows,
131  const double& cellsize, const Coords& i_llcorner, const double& init);
132 
133  void set(const Grid2DObject& i_grid, const double& init);
134 
139  void rescale(const double& i_cellsize);
140 
145  void compute_spatial_mean(const double& radius);
146 
147  void size(size_t& o_ncols, size_t& o_nrows) const;
148  size_t size() const;
149  size_t getNx() const;
150  size_t getNy() const;
151 
155  void clear();
156 
161  bool empty() const;
162 
163  bool allNodata() const;
164 
172  bool isSameGeolocalization(const Grid2DObject& target) const;
173 
184  void binning(const std::vector<double>& thresholds, const std::vector<double>& ids);
185 
191  std::vector< double > extractPoints(const std::vector< std::pair<size_t, size_t> >& Pts) const;
192 
193  Grid2DObject& operator=(const double& value);
194 
195  Grid2DObject& operator+=(const double& rhs);
196  const Grid2DObject operator+(const double& rhs) const;
197  Grid2DObject& operator+=(const Grid2DObject& rhs);
198  const Grid2DObject operator+(const Grid2DObject& rhs) const;
199 
200  Grid2DObject& operator-=(const double& rhs);
201  const Grid2DObject operator-(const double& rhs) const;
202  Grid2DObject& operator-=(const Grid2DObject& rhs);
203  const Grid2DObject operator-(const Grid2DObject& rhs) const;
204 
205  Grid2DObject& operator*=(const double& rhs);
206  const Grid2DObject operator*(const double& rhs) const;
207  Grid2DObject& operator*=(const Grid2DObject& rhs);
208  const Grid2DObject operator*(const Grid2DObject& rhs) const;
209 
210  Grid2DObject& operator/=(const double& rhs);
211  const Grid2DObject operator/(const double& rhs) const;
212  Grid2DObject& operator/=(const Grid2DObject& rhs);
213  const Grid2DObject operator/(const Grid2DObject& rhs) const;
214 
215  bool operator==(const Grid2DObject& in) const;
216  bool operator!=(const Grid2DObject& in) const;
217 
220  double cellsize;
221 
222  protected:
223  void setValues(const double& cellsize, const Coords& i_llcorner);
224 
230  bool WGS84_to_grid(Coords& point) const;
231 
237  bool grid_to_WGS84(Coords& point) const;
238 
239  bool isLatlon() const {return isLatLon;}
240 
241  void reproject();
242 
243  static double calculate_XYcellsize(const std::vector<double>& vecX, const std::vector<double>& vecY);
244  double calculate_cellsize(const double& i_ur_lat, const double& i_ur_lon) const;
245  void setLatLon(const double& i_ur_lat, const double& i_ur_lon) {ur_lat=i_ur_lat; ur_lon=i_ur_lon; isLatLon=true;}
246 
247  double ur_lat, ur_lon;
248  bool isLatLon;
249 };
250 } //end namespace
251 
252 #endif
size_t iy
grid index along Y
Definition: Grid2DObject.h:50
size_t ix
grid index along X
Definition: Grid2DObject.h:49
structure to contain the grid coordinates of a point in a 2D grid
Definition: Grid2DObject.h:48
A class to handle geographic coordinate systems. This class offers an easy way to transparently conve...
Definition: Coords.h:82
A class to represent 2D Grids. Typical application as DEM or Landuse Model.
Definition: Grid2DObject.h:42
bool grid_to_WGS84(Coords &point) const
Converts grid coordinates (i,j) into WGS84 coordinates.
Definition: Grid2DObject.cc:236
bool isLatlon() const
Definition: Grid2DObject.h:239
bool operator!=(const Grid2DObject &in) const
Operator that tests for inequality.
Definition: Grid2DObject.cc:144
bool allNodata() const
Definition: Grid2DObject.cc:462
Grid2DObject & operator=(const double &value)
Assignement operator.
Definition: Grid2DObject.cc:31
const Grid2DObject operator+(const double &rhs) const
Definition: Grid2DObject.cc:41
Grid2DObject & operator+=(const double &rhs)
Definition: Grid2DObject.cc:36
const std::string toString() const
Definition: Grid2DObject.cc:571
double ur_lat
Definition: Grid2DObject.h:247
friend std::ostream & operator<<(std::ostream &os, const Grid2DObject &grid)
Definition: Grid2DObject.cc:582
double calculate_cellsize(const double &i_ur_lat, const double &i_ur_lon) const
Definition: Grid2DObject.cc:535
double cellsize
dimension in meters of a cell (considered to be square)
Definition: Grid2DObject.h:220
Grid2DObject()
Default constructor. Initializes all variables to 0, except lat/long which are initialized to IOUtils...
Definition: Grid2DObject.cc:152
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:338
Array2D< double > grid2D
the grid itself (simple 2D table containing the values for each point)
Definition: Grid2DObject.h:218
const Grid2DObject operator*(const double &rhs) const
Definition: Grid2DObject.cc:93
bool gridify(Coords &point) const
Compute the positional parameters that are not already known This means that the Coords::point object...
Definition: Grid2DObject.cc:218
size_t getNx() const
Definition: Grid2DObject.cc:445
bool isSameGeolocalization(const Grid2DObject &target) const
check if the current Grid2DObject has the same geolocalization attributes as another Grid2DObject (as...
Definition: Grid2DObject.cc:476
Grid2DObject & operator/=(const double &rhs)
Definition: Grid2DObject.cc:114
void rescale(const double &i_cellsize)
Rescale (bilinear resampling) the grid to match the given cell size.
Definition: Grid2DObject.cc:367
std::vector< double > extractPoints(const std::vector< std::pair< size_t, size_t > > &Pts) const
extract point values from grid
Definition: Grid2DObject.cc:507
void reproject()
Definition: Grid2DObject.cc:550
Grid2DObject & operator-=(const double &rhs)
Definition: Grid2DObject.cc:62
void setValues(const double &cellsize, const Coords &i_llcorner)
Definition: Grid2DObject.cc:470
size_t size() const
Definition: Grid2DObject.cc:441
double & operator()(const size_t &ix, const size_t &iy)
Definition: Grid2DObject.cc:555
void compute_spatial_mean(const double &radius)
Spatially average the grid over a given radius.
Definition: Grid2DObject.cc:382
bool operator==(const Grid2DObject &in) const
Operator that tests for equality.
Definition: Grid2DObject.cc:140
void clear()
deletes the data, but keeps geolocalization
Definition: Grid2DObject.cc:454
bool isLatLon
Definition: Grid2DObject.h:248
const Grid2DObject operator/(const double &rhs) const
Definition: Grid2DObject.cc:119
double ur_lon
Definition: Grid2DObject.h:247
bool WGS84_to_grid(Coords &point) const
Converts WGS84 coordinates into grid coordinates (i,j)
Definition: Grid2DObject.cc:286
size_t getNy() const
Definition: Grid2DObject.cc:449
const Grid2DObject operator-(const double &rhs) const
Definition: Grid2DObject.cc:67
Grid2DObject & operator*=(const double &rhs)
Definition: Grid2DObject.cc:88
void setLatLon(const double &i_ur_lat, const double &i_ur_lon)
Definition: Grid2DObject.h:245
Coords llcorner
lower left corner of the grid
Definition: Grid2DObject.h:219
void binning(const std::vector< double > &thresholds, const std::vector< double > &ids)
Partitional algorithm to classify each point of the grid into a 'bin'. The classification is given by...
Definition: Grid2DObject.cc:488
bool empty() const
Check if a grid does not contain any data (but it can contain geolocalization)
Definition: Grid2DObject.cc:458
friend std::istream & operator>>(std::istream &is, Grid2DObject &grid)
Definition: Grid2DObject.cc:592
static double calculate_XYcellsize(const std::vector< double > &vecX, const std::vector< double > &vecY)
Definition: Grid2DObject.cc:523
Definition: GridsManager.h:33
A class representing the IO Layer of the software Alpine3D. For each type of IO (File,...
Definition: IOInterface.h:98
Definition: Config.cc:30