Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
rastercoverage.h
1 #ifndef RASTERLAYER_H
2 #define RASTERLAYER_H
3 
4 #include "Kernel_global.h"
5 
6 namespace Ilwis {
7 
8 class Resource;
9 class Grid;
10 class PixelIterator;
26 class KERNELSHARED_EXPORT RasterCoverage : public Coverage
27 {
28 public:
29 
30  friend class PixelIterator;
31  friend class GridBlock;
32  friend class Grid;
33  friend class RasterInterpolator;
34 
39 
49  RasterCoverage(const Resource& resource);
50 
51  ~RasterCoverage();
52 
53  //@override
54  IlwisTypes ilwisType() const;
55 
62  virtual RasterCoverage *clone() ;
63 
64  //@override
65  const DataDefinition& datadef() const;
66 
67  //@override
68  DataDefinition& datadef();
69 
76  const Ilwis::IGeoReference &georeference() const;
77 
87  void georeference(const IGeoReference& grf) ;
88 
99  Size<> size() const;
100 
111  void size(const Size<>& sz);
112 
122  void copyBinary(const IlwisData<RasterCoverage> &raster, int index);
123 
134  double coord2value(const Coordinate &c){
135  if ( _georef->isValid() && c.isValid()) {
136  Pixeld pix = _georef->coord2Pixel(c);
137  return pix2value(pix);
138  }
139  return rUNDEF;
140  }
141 
154  double pix2value(const Pixeld& pix){
155  if ( _georef->isValid() && !connector().isNull()) {
156  if ( _grid.isNull()) {
157  _grid.reset(connector()->loadGridData(this));
158  if (_grid.isNull())
159  return rUNDEF;
160  }
161 
162  double v = _grid->value(pix);
163  return datadef().range()->ensure(v).value<double>();
164  }
165  return rUNDEF;
166  }
167 
168  //@override
169  Resource source(int mode=cmINPUT) const;
170 
174  void unloadBinary();
175 
176  PixelIterator end() ;
177  PixelIterator begin() ;
178 
179 protected:
180  Grid *grid();
181  QScopedPointer<Grid> _grid;
182  void copyTo(IlwisObject *obj);
183 
184 private:
185  DataDefinition _datadefCoverage;
186  IGeoReference _georef;
187  Size<> _size;
188  std::mutex _mutex;
189 };
190 
191 typedef IlwisData<RasterCoverage> IRasterCoverage;
192 }
193 
194 Q_DECLARE_METATYPE(Ilwis::IRasterCoverage)
195 
196 
197 #endif // RASTERLAYER_H