LCOV - code coverage report
Current view: top level - frmts/ilwis - ilwisdataset.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 8 12 66.7 %
Date: 2024-11-21 22:18:42 Functions: 4 6 66.7 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  ILWIS Driver
       4             :  * Purpose:  GDALDataset driver for ILWIS translator for read/write support.
       5             :  * Author:   Lichun Wang, lichun@itc.nl
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2004, ITC
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #ifndef ILWISDATASET_H_INCLUDED
      14             : #define ILWISDATASET_H_INCLUDED
      15             : 
      16             : #include "gdal_pam.h"
      17             : #include "cpl_csv.h"
      18             : #include "ogr_spatialref.h"
      19             : 
      20             : #include <cstdio>
      21             : #include <cstdlib>
      22             : 
      23             : #include <map>
      24             : #include <string>
      25             : 
      26             : #define shUNDEF -32767
      27             : #define iUNDEF -2147483647
      28             : #define flUNDEF ((float)-1e38)
      29             : #define rUNDEF ((double)-1e308)
      30             : 
      31             : namespace GDAL
      32             : {
      33             : 
      34             : enum ilwisStoreType
      35             : {
      36             :     stByte,
      37             :     stInt,
      38             :     stLong,
      39             :     stFloat,
      40             :     stReal
      41             : };
      42             : 
      43             : class ValueRange
      44             : {
      45             :   public:
      46             :     ValueRange(double min, double max);  // step = 1
      47             :     ValueRange(double min, double max, double step);
      48             :     explicit ValueRange(const std::string &str);
      49             :     std::string ToString() const;
      50             : 
      51             :     ilwisStoreType get_NeededStoreType() const
      52             :     {
      53             :         return st;
      54             :     }
      55             : 
      56       16884 :     double get_rLo() const
      57             :     {
      58       16884 :         return _rLo;
      59             :     }
      60             : 
      61       16792 :     double get_rHi() const
      62             :     {
      63       16792 :         return _rHi;
      64             :     }
      65             : 
      66          12 :     double get_rStep() const
      67             :     {
      68          12 :         return _rStep;
      69             :     }
      70             : 
      71           0 :     double get_rRaw0() const
      72             :     {
      73           0 :         return _r0;
      74             :     }
      75             : 
      76           0 :     int get_iDec() const
      77             :     {
      78           0 :         return _iDec;
      79             :     }
      80             : 
      81             :     double rValue(int raw) const;
      82             :     int iRaw(double value) const;
      83             : 
      84             :   private:
      85             :     void init(double rRaw0);
      86             :     void init();
      87             :     double _rLo, _rHi;
      88             :     double _rStep;
      89             :     int _iDec;
      90             :     double _r0;
      91             :     int iRawUndef;
      92             :     short _iWidth;
      93             :     ilwisStoreType st;
      94             : };
      95             : 
      96             : /************************************************************************/
      97             : /*                     ILWISInfo                                        */
      98             : /************************************************************************/
      99             : 
     100             : struct ILWISInfo
     101             : {
     102          80 :     ILWISInfo() : bUseValueRange(false), vr(0, 0), stStoreType(stByte)
     103             :     {
     104          80 :     }
     105             : 
     106             :     bool bUseValueRange;
     107             :     ValueRange vr;
     108             :     ilwisStoreType stStoreType;
     109             :     std::string stDomain;
     110             : };
     111             : 
     112             : /************************************************************************/
     113             : /*                           ILWISRasterBand                            */
     114             : /************************************************************************/
     115             : 
     116             : class ILWISDataset;
     117             : 
     118             : class ILWISRasterBand final : public GDALPamRasterBand
     119             : {
     120             :     friend class ILWISDataset;
     121             : 
     122             :   public:
     123             :     VSILFILE *fpRaw;
     124             :     ILWISInfo psInfo;
     125             :     int nSizePerPixel;
     126             : 
     127             :     ILWISRasterBand(ILWISDataset *, int, const std::string &sBandNameIn);
     128             :     virtual ~ILWISRasterBand();
     129             :     CPLErr GetILWISInfo(const std::string &pszFileName);
     130             :     void ILWISOpen(const std::string &pszFilename);
     131             : 
     132             :     virtual CPLErr IReadBlock(int, int, void *) override;
     133             :     virtual CPLErr IWriteBlock(int, int, void *) override;
     134             :     virtual double GetNoDataValue(int *pbSuccess) override;
     135             : 
     136             :   private:
     137             :     void FillWithNoData(void *pImage);
     138             :     void SetValue(void *pImage, int i, double rV);
     139             :     double GetValue(void *pImage, int i);
     140             :     void ReadValueDomainProperties(const std::string &pszFileName);
     141             : };
     142             : 
     143             : /************************************************************************/
     144             : /*                         ILWISDataset                                 */
     145             : /************************************************************************/
     146             : class ILWISDataset final : public GDALPamDataset
     147             : {
     148             :     friend class ILWISRasterBand;
     149             :     CPLString osFileName;
     150             :     std::string pszIlwFileName;
     151             :     OGRSpatialReference m_oSRS{};
     152             :     double adfGeoTransform[6];
     153             :     int bGeoDirty;
     154             :     int bNewDataset;          /* product of Create() */
     155             :     std::string pszFileType;  // indicating the input dataset: Map/MapList
     156             :     CPLErr ReadProjection(const std::string &csyFileName);
     157             :     CPLErr WriteProjection();
     158             :     void WriteGeoReference();
     159             :     void CollectTransformCoef(std::string &pszRefFile);
     160             : 
     161             :   public:
     162             :     ILWISDataset();
     163             :     virtual ~ILWISDataset();
     164             : 
     165             :     static GDALDataset *Open(GDALOpenInfo *);
     166             : 
     167             :     static GDALDataset *CreateCopy(const char *pszFilename,
     168             :                                    GDALDataset *poSrcDS, int bStrict,
     169             :                                    char **papszOptions,
     170             :                                    GDALProgressFunc pfnProgress,
     171             :                                    void *pProgressData);
     172             : 
     173             :     static GDALDataset *Create(const char *pszFilename, int nXSize, int nYSize,
     174             :                                int nBands, GDALDataType eType,
     175             :                                char **papszParamList);
     176             : 
     177             :     virtual CPLErr GetGeoTransform(double *padfTransform) override;
     178             :     virtual CPLErr SetGeoTransform(double *) override;
     179             : 
     180             :     const OGRSpatialReference *GetSpatialRef() const override;
     181             :     CPLErr SetSpatialRef(const OGRSpatialReference *poSRS) override;
     182             : 
     183             :     virtual CPLErr FlushCache(bool bAtClosing) override;
     184             : };
     185             : 
     186             : // IniFile.h: interface for the IniFile class.
     187             : //
     188             : //////////////////////////////////////////////////////////////////////
     189             : 
     190             : class CompareAsNum
     191             : {
     192             :   public:
     193             :     bool operator()(const std::string &, const std::string &) const;
     194             : };
     195             : 
     196             : typedef std::map<std::string, std::string> SectionEntries;
     197             : typedef std::map<std::string, SectionEntries *> Sections;
     198             : 
     199             : class IniFile
     200             : {
     201             :   public:
     202             :     explicit IniFile(const std::string &filename);
     203             :     virtual ~IniFile();
     204             : 
     205             :     void SetKeyValue(const std::string &section, const std::string &key,
     206             :                      const std::string &value);
     207             :     std::string GetKeyValue(const std::string &section, const std::string &key);
     208             : 
     209             :     void RemoveKeyValue(const std::string &section, const std::string &key);
     210             :     void RemoveSection(const std::string &section);
     211             : 
     212             :   private:
     213             :     std::string filename;
     214             :     Sections sections;
     215             :     bool bChanged;
     216             : 
     217             :     void Load();
     218             :     void Store();
     219             : };
     220             : 
     221             : std::string ReadElement(const std::string &section, const std::string &entry,
     222             :                         const std::string &filename);
     223             : bool WriteElement(const std::string &sSection, const std::string &sEntry,
     224             :                   const std::string &fn, const std::string &sValue);
     225             : bool WriteElement(const std::string &sSection, const std::string &sEntry,
     226             :                   const std::string &fn, int nValue);
     227             : bool WriteElement(const std::string &sSection, const std::string &sEntry,
     228             :                   const std::string &fn, double dValue);
     229             : 
     230             : }  // namespace GDAL
     231             : 
     232             : #endif  // ILWISDATASET_H_INCLUDED

Generated by: LCOV version 1.14