GDAL
gdal_rat.h
1 /******************************************************************************
2  * $Id$
3  *
4  * Project: GDAL Core
5  * Purpose: GDALRasterAttributeTable class declarations.
6  * Author: Frank Warmerdam, warmerdam@pobox.com
7  *
8  ******************************************************************************
9  * Copyright (c) 2005, Frank Warmerdam <warmerdam@pobox.com>
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a
12  * copy of this software and associated documentation files (the "Software"),
13  * to deal in the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  * and/or sell copies of the Software, and to permit persons to whom the
16  * Software is furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included
19  * in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  * DEALINGS IN THE SOFTWARE.
28  ****************************************************************************/
29 
30 #ifndef GDAL_RAT_H_INCLUDED
31 #define GDAL_RAT_H_INCLUDED
32 
33 #include "cpl_minixml.h"
34 #include "gdal_priv.h"
35 
36 // Clone and Serialize are allowed to fail if GetRowCount()*GetColCount()
37 // greater than this number
38 #define RAT_MAX_ELEM_FOR_CLONE 1000000
39 
40 /************************************************************************/
41 /* GDALRasterAttributeTable */
42 /************************************************************************/
43 
46 
48 {
49 public:
50  virtual ~GDALRasterAttributeTable();
63  virtual GDALDefaultRasterAttributeTable *Clone() const = 0;
64 
72  virtual int GetColumnCount() const = 0;
73 
83  virtual const char *GetNameOfCol( int iCol ) const = 0;
84 
94  virtual GDALRATFieldUsage GetUsageOfCol( int iCol ) const = 0;
95 
105  virtual GDALRATFieldType GetTypeOfCol( int iCol ) const = 0;
106 
119  virtual int GetColOfUsage( GDALRATFieldUsage eUsage ) const = 0;
120 
128  virtual int GetRowCount() const = 0;
129 
147  virtual const char *GetValueAsString( int iRow, int iField ) const = 0;
148 
163  virtual int GetValueAsInt( int iRow, int iField ) const = 0;
164 
179  virtual double GetValueAsDouble( int iRow, int iField ) const = 0;
180 
194  virtual void SetValue( int iRow, int iField,
195  const char *pszValue ) = 0;
196 
210  virtual void SetValue( int iRow, int iField, int nValue ) = 0;
211 
225  virtual void SetValue( int iRow, int iField, double dfValue) = 0;
226 
239  virtual int ChangesAreWrittenToFile() = 0;
240 
241  virtual CPLErr ValuesIO( GDALRWFlag eRWFlag, int iField,
242  int iStartRow, int iLength,
243  double *pdfData);
244  virtual CPLErr ValuesIO( GDALRWFlag eRWFlag, int iField,
245  int iStartRow, int iLength, int *pnData);
246  virtual CPLErr ValuesIO( GDALRWFlag eRWFlag, int iField,
247  int iStartRow, int iLength,
248  char **papszStrList);
249 
250  virtual void SetRowCount( int iCount );
251  virtual int GetRowOfValue( double dfValue ) const;
252  virtual int GetRowOfValue( int nValue ) const;
253 
254  virtual CPLErr CreateColumn( const char *pszFieldName,
255  GDALRATFieldType eFieldType,
256  GDALRATFieldUsage eFieldUsage );
257  virtual CPLErr SetLinearBinning( double dfRow0Min,
258  double dfBinSize );
259  virtual int GetLinearBinning( double *pdfRow0Min,
260  double *pdfBinSize ) const;
261 
268  virtual CPLXMLNode *Serialize() const;
269  virtual void *SerializeJSON() const;
270  virtual CPLErr XMLInit( CPLXMLNode *, const char * );
271 
272  virtual CPLErr InitializeFromColorTable( const GDALColorTable * );
273  virtual GDALColorTable *TranslateToColorTable( int nEntryCount = -1 );
274 
275  virtual void DumpReadable( FILE * = nullptr );
276 
281  { return static_cast<GDALRasterAttributeTableH>(poRAT); }
282 
287  { return static_cast<GDALRasterAttributeTable*>(hRAT); }
288 };
289 
290 /************************************************************************/
291 /* GDALRasterAttributeField */
292 /* */
293 /* (private) */
294 /************************************************************************/
296 class GDALRasterAttributeField
297 {
298  public:
299  CPLString sName{};
300 
302 
304 
305  std::vector<GInt32> anValues{};
306  std::vector<double> adfValues{};
307  std::vector<CPLString> aosValues{};
308 };
310 
311 /************************************************************************/
312 /* GDALDefaultRasterAttributeTable */
313 /************************************************************************/
314 
316 
318 {
319  private:
320  std::vector<GDALRasterAttributeField> aoFields{};
321 
322  int bLinearBinning = false; // TODO(schwehr): Can this be a bool?
323  double dfRow0Min = -0.5;
324  double dfBinSize = 1.0;
325 
326  void AnalyseColumns();
327  int bColumnsAnalysed = false; // TODO(schwehr): Can this be a bool?
328  int nMinCol = -1;
329  int nMaxCol = -1;
330 
331  int nRowCount = 0;
332 
333  CPLString osWorkingResult{};
334 
335  public:
337 
338  GDALDefaultRasterAttributeTable *Clone() const override;
339 
340  int GetColumnCount() const override;
341 
342  const char *GetNameOfCol( int ) const override;
343  GDALRATFieldUsage GetUsageOfCol( int ) const override;
344  GDALRATFieldType GetTypeOfCol( int ) const override;
345 
346  int GetColOfUsage( GDALRATFieldUsage ) const override;
347 
348  int GetRowCount() const override;
349 
350  const char *GetValueAsString( int iRow, int iField ) const override;
351  int GetValueAsInt( int iRow, int iField ) const override;
352  double GetValueAsDouble( int iRow, int iField ) const override;
353 
354  void SetValue( int iRow, int iField,
355  const char *pszValue ) override;
356  void SetValue( int iRow, int iField, double dfValue) override;
357  void SetValue( int iRow, int iField, int nValue ) override;
358 
359  int ChangesAreWrittenToFile() override;
360  void SetRowCount( int iCount ) override;
361 
362  int GetRowOfValue( double dfValue ) const override;
363  int GetRowOfValue( int nValue ) const override;
364 
365  CPLErr CreateColumn( const char *pszFieldName,
366  GDALRATFieldType eFieldType,
367  GDALRATFieldUsage eFieldUsage ) override;
368  CPLErr SetLinearBinning( double dfRow0Min,
369  double dfBinSize ) override;
370  int GetLinearBinning( double *pdfRow0Min,
371  double *pdfBinSize ) const override;
372 };
373 
374 #endif /* ndef GDAL_RAT_H_INCLUDED */
static GDALRasterAttributeTableH ToHandle(GDALRasterAttributeTable *poRAT)
Convert a GDALRasterAttributeTable* to a GDALRasterAttributeTableH.
Definition: gdal_rat.h:280
The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute ...
Definition: gdal_rat.h:47
virtual int GetValueAsInt(int iRow, int iField) const =0
Fetch field value as a integer.
Raster Attribute Table container.
Definition: gdal_rat.h:317
Definition: gdal.h:1084
Document node structure.
Definition: cpl_minixml.h:66
Definitions for CPL mini XML Parser/Serializer.
C++ GDAL entry points.
virtual GDALRATFieldType GetTypeOfCol(int iCol) const =0
Fetch column type.
GDALRATFieldType
Field type of raster attribute table.
Definition: gdal.h:1076
virtual void SetValue(int iRow, int iField, const char *pszValue)=0
Set field value from string.
virtual int GetRowOfValue(double dfValue) const
Get row for pixel value.
Definition: gdal_rat.cpp:362
virtual void SetRowCount(int iCount)
Set row count.
Definition: gdal_rat.cpp:316
virtual int GetColOfUsage(GDALRATFieldUsage eUsage) const =0
Fetch column index for given usage.
GDALRWFlag
Definition: gdal.h:119
virtual GDALRATFieldUsage GetUsageOfCol(int iCol) const =0
Fetch column usage value.
Convenient string class based on std::string.
Definition: cpl_string.h:327
virtual GDALDefaultRasterAttributeTable * Clone() const =0
Copy Raster Attribute Table.
virtual int GetRowCount() const =0
Fetch row count.
virtual int GetLinearBinning(double *pdfRow0Min, double *pdfBinSize) const
Get linear binning information.
Definition: gdal_rat.cpp:531
static GDALRasterAttributeTable * FromHandle(GDALRasterAttributeTableH hRAT)
Convert a GDALRasterAttributeTableH to a GDALRasterAttributeTable*.
Definition: gdal_rat.h:286
void * GDALRasterAttributeTableH
Opaque type used for the C bindings of the C++ GDALRasterAttributeTable class.
Definition: gdal.h:267
virtual int ChangesAreWrittenToFile()=0
Determine whether changes made to this RAT are reflected directly in the dataset. ...
virtual CPLErr SetLinearBinning(double dfRow0Min, double dfBinSize)
Set linear binning information.
Definition: gdal_rat.cpp:487
virtual double GetValueAsDouble(int iRow, int iField) const =0
Fetch field value as a double.
virtual CPLErr CreateColumn(const char *pszFieldName, GDALRATFieldType eFieldType, GDALRATFieldUsage eFieldUsage)
Create new column.
Definition: gdal_rat.cpp:439
virtual const char * GetNameOfCol(int iCol) const =0
Fetch name of indicated column.
Definition: gdal.h:1077
GDALRATFieldUsage
Field usage of raster attribute table.
Definition: gdal.h:1083
virtual int GetColumnCount() const =0
Fetch table column count.
virtual const char * GetValueAsString(int iRow, int iField) const =0
Fetch field value as a string.
A color table / palette.
Definition: gdal_priv.h:937
CPLErr
Error category.
Definition: cpl_error.h:52

Generated for GDAL by doxygen 1.8.8.