Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

gdal_priv.h

00001 /******************************************************************************
00002  * $Id: gdal_priv_h-source.html,v 1.9 2001/07/05 13:24:08 warmerda Exp $
00003  *
00004  * Name:     gdal_priv.h
00005  * Project:  GDAL Core
00006  * Purpose:  GDAL Core C++/Private declarations. 
00007  * Author:   Frank Warmerdam, warmerda@home.com
00008  *
00009  ******************************************************************************
00010  * Copyright (c) 1998, Frank Warmerdam
00011  *
00012  * Permission is hereby granted, free of charge, to any person obtaining a
00013  * copy of this software and associated documentation files (the "Software"),
00014  * to deal in the Software without restriction, including without limitation
00015  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00016  * and/or sell copies of the Software, and to permit persons to whom the
00017  * Software is furnished to do so, subject to the following conditions:
00018  *
00019  * The above copyright notice and this permission notice shall be included
00020  * in all copies or substantial portions of the Software.
00021  *
00022  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00023  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00024  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00025  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00026  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00027  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00028  * DEALINGS IN THE SOFTWARE.
00029  ******************************************************************************
00030  *
00031  * $Log: gdal_priv_h-source.html,v $
00031  * Revision 1.9  2001/07/05 13:24:08  warmerda
00031  * *** empty log message ***
00031  *
00032  * Revision 1.24  2001/06/20 16:08:54  warmerda
00033  * GDALDefaultOverviews now remembers ovr filename, and allows explicit setting
00034  *
00035  * Revision 1.23  2001/02/06 16:30:21  warmerda
00036  * Added gdal_frmts.h
00037  *
00038  * Revision 1.22  2000/10/06 15:26:08  warmerda
00039  * added SetNoDataValue, SetCategoryNames
00040  *
00041  * Revision 1.21  2000/07/20 13:38:26  warmerda
00042  * make GetGDALDriverManager public with CPL_DLL
00043  *
00044  * Revision 1.20  2000/04/30 23:22:16  warmerda
00045  * added CreateCopy support
00046  *
00047  * Revision 1.19  2000/04/21 21:55:01  warmerda
00048  * majorobject updates, and overview building
00049  *
00050  * Revision 1.18  2000/04/04 23:44:29  warmerda
00051  * added AutoLoadDrivers() to GDALDriverManager
00052  *
00053  * Revision 1.17  2000/03/31 13:41:24  warmerda
00054  * added gcps
00055  *
00056  * Revision 1.16  2000/03/24 00:09:05  warmerda
00057  * rewrote cache management
00058  *
00059  * Revision 1.15  2000/03/09 23:22:03  warmerda
00060  * added GetHistogram
00061  *
00062  * Revision 1.14  2000/03/06 02:20:35  warmerda
00063  * added colortables, overviews, etc
00064  *
00065  * Revision 1.12  2000/01/31 15:00:25  warmerda
00066  * added some documentation
00067  *
00068  * Revision 1.11  2000/01/31 14:24:36  warmerda
00069  * implemented dataset delete
00070  *
00071  * Revision 1.10  1999/11/11 21:59:07  warmerda
00072  * added GetDriver() for datasets
00073  *
00074  * Revision 1.9  1999/10/21 13:23:45  warmerda
00075  * Added a bit of driver related documentation.
00076  *
00077  * Revision 1.8  1999/10/21 12:04:11  warmerda
00078  * Reorganized header.
00079  *
00080  * Revision 1.7  1999/10/01 14:44:02  warmerda
00081  * added documentation
00082  *
00083  * Revision 1.6  1999/04/21 04:16:25  warmerda
00084  * experimental docs
00085  *
00086  * Revision 1.5  1999/01/11 15:36:18  warmerda
00087  * Added projections support, and a few other things.
00088  *
00089  * Revision 1.4  1998/12/31 18:54:25  warmerda
00090  * Implement initial GDALRasterBlock support, and block cache
00091  *
00092  * Revision 1.3  1998/12/06 22:17:09  warmerda
00093  * Fill out rasterio support.
00094  *
00095  * Revision 1.2  1998/12/03 18:34:06  warmerda
00096  * Update to use CPL
00097  *
00098  * Revision 1.1  1998/10/18 06:15:11  warmerda
00099  * Initial implementation.
00100  *
00101  */
00102 
00103 #ifndef GDAL_PRIV_H_INCLUDED
00104 #define GDAL_PRIV_H_INCLUDED
00105 
00106 /* -------------------------------------------------------------------- */
00107 /*      Predeclare various classes before pulling in gdal.h, the        */
00108 /*      public declarations.                                            */
00109 /* -------------------------------------------------------------------- */
00110 class GDALMajorObject;
00111 class GDALDataset;
00112 class GDALRasterBand;
00113 class GDALDriver;
00114 
00115 /* -------------------------------------------------------------------- */
00116 /*      Pull in the public declarations.  This gets the C apis, and     */
00117 /*      also various constants.  However, we will still get to          */
00118 /*      provide the real class definitions for the GDAL classes.        */
00119 /* -------------------------------------------------------------------- */
00120 
00121 #include "gdal.h"
00122 #include "gdal_frmts.h"
00123 #include "cpl_vsi.h"
00124 #include "cpl_conv.h"
00125 
00126 /* ******************************************************************** */
00127 /*                           GDALMajorObject                            */
00128 /*                                                                      */
00129 /*      Base class providing metadata, description and other            */
00130 /*      services shared by major objects.                               */
00131 /* ******************************************************************** */
00132 
00133 class CPL_DLL GDALMajorObject
00134 {
00135   protected:
00136     char             *pszDescription;
00137     char            **papszMetadata;
00138     
00139   public:
00140                         GDALMajorObject();
00141     virtual            ~GDALMajorObject();
00142                         
00143     const char *        GetDescription() const;
00144     void                SetDescription( const char * );
00145 
00146     virtual char      **GetMetadata( const char * pszDomain = "" );
00147     virtual CPLErr      SetMetadata( char ** papszMetadata,
00148                                      const char * pszDomain = "" );
00149     virtual const char *GetMetadataItem( const char * pszName,
00150                                          const char * pszDomain = "" );
00151     virtual CPLErr      SetMetadataItem( const char * pszName,
00152                                          const char * pszValue,
00153                                          const char * pszDomain = "" );
00154 };
00155 
00156 /* ******************************************************************** */
00157 /*                             GDALProjDef                              */
00158 /* ******************************************************************** */
00159 
00161 
00162 class CPL_DLL GDALProjDef
00163 {
00164     void        *psPJ;
00165 
00166     char        *pszProjection;
00167 
00168   public:
00169                 GDALProjDef( const char * = NULL );
00170                 ~GDALProjDef();
00171 
00172     CPLErr      ToLongLat( double * padfX, double * padfY );
00173     CPLErr      FromLongLat( double * padfX, double * padfY );
00174 
00175     const char  *GetProjectionString( void ) { return pszProjection; }
00176     CPLErr      SetProjectionString( const char * );
00177 };
00178 
00179 /* ******************************************************************** */
00180 /*                         GDALDefaultOverviews                         */
00181 /* ******************************************************************** */
00182 class GDALDefaultOverviews
00183 {
00184     GDALDataset *poDS;
00185     GDALDataset *poODS;
00186     
00187     char        *pszOvrFilename;
00188     
00189   public:
00190                GDALDefaultOverviews();
00191                ~GDALDefaultOverviews();
00192 
00193     void       Initialize( GDALDataset *poDS, const char *pszName = NULL, 
00194                            int bNameIsOVR = FALSE );
00195     int        IsInitialized() { return poDS != NULL; }
00196 
00197     int        GetOverviewCount(int);
00198     GDALRasterBand *GetOverview(int,int);
00199 
00200     CPLErr     BuildOverviews( const char * pszBasename,
00201                                const char * pszResampling, 
00202                                int nOverviews, int * panOverviewList,
00203                                int nBands, int * panBandList,
00204                                GDALProgressFunc pfnProgress,
00205                                void *pProgressData );
00206 };
00207 
00208 /* ******************************************************************** */
00209 /*                             GDALDataset                              */
00210 /* ******************************************************************** */
00211 
00218 class CPL_DLL GDALDataset : public GDALMajorObject
00219 {
00220     friend GDALDatasetH GDALOpen( const char *, GDALAccess);
00221     
00222   protected:
00223     GDALDriver  *poDriver;
00224     GDALAccess  eAccess;
00225     
00226     // Stored raster information.
00227     int         nRasterXSize;
00228     int         nRasterYSize;
00229     int         nBands;
00230     GDALRasterBand **papoBands;
00231 
00232     int         nRefCount;
00233 
00234                 GDALDataset(void);
00235     void        RasterInitialize( int, int );
00236     void        SetBand( int, GDALRasterBand * );
00237 
00238     GDALDefaultOverviews oOvManager;
00239     
00240     virtual CPLErr IBuildOverviews( const char *, int, int *,
00241                                     int, int *, GDALProgressFunc, void * );
00242     
00243     friend class GDALRasterBand;
00244     
00245   public:
00246     virtual     ~GDALDataset();
00247 
00248     int         GetRasterXSize( void );
00249     int         GetRasterYSize( void );
00250     int         GetRasterCount( void );
00251     GDALRasterBand *GetRasterBand( int );
00252 
00253     virtual void FlushCache(void);
00254 
00255     virtual const char *GetProjectionRef(void);
00256     virtual CPLErr SetProjection( const char * );
00257 
00258     virtual CPLErr GetGeoTransform( double * );
00259     virtual CPLErr SetGeoTransform( double * );
00260 
00261     virtual void *GetInternalHandle( const char * );
00262     virtual GDALDriver *GetDriver(void);
00263 
00264     virtual int    GetGCPCount();
00265     virtual const char *GetGCPProjection();
00266     virtual const GDAL_GCP *GetGCPs();
00267  
00268     int           Reference();
00269     int           Dereference();
00270     GDALAccess    GetAccess() { return eAccess; }
00271 
00272     CPLErr BuildOverviews( const char *, int, int *,
00273                            int, int *, GDALProgressFunc, void * );
00274 };
00275 
00276 /* ******************************************************************** */
00277 /*                           GDALRasterBlock                            */
00278 /* ******************************************************************** */
00279 
00282 class CPL_DLL GDALRasterBlock
00283 {
00284     GDALDataType        eType;
00285     
00286     int                 nAge;
00287     int                 bDirty;
00288 
00289     int                 nXOff;
00290     int                 nYOff;
00291        
00292     int                 nXSize;
00293     int                 nYSize;
00294     
00295     void                *pData;
00296 
00297     GDALRasterBand      *poBand;
00298     
00299     GDALRasterBlock     *poNext;
00300     GDALRasterBlock     *poPrevious;
00301 
00302   public:
00303                 GDALRasterBlock( GDALRasterBand *, int, int );
00304     virtual     ~GDALRasterBlock();
00305 
00306     CPLErr      Internalize( void );    /* make copy of data */
00307     void        Touch( void );          /* update age */
00308     void        MarkDirty( void );      /* data has been modified since read */
00309     void        MarkClean( void );
00310 
00311     CPLErr      Write();
00312 
00313     GDALDataType GetDataType() { return eType; }
00314     int         GetXOff() { return nXOff; }
00315     int         GetYOff() { return nYOff; }
00316     int         GetXSize() { return nXSize; }
00317     int         GetYSize() { return nYSize; }
00318     int         GetAge() { return nAge; }
00319     int         GetDirty() { return bDirty; }
00320 
00321     void        *GetDataRef( void ) { return pData; }
00322 
00323     GDALRasterBand *GetBand() { return poBand; }
00324 
00325     static void FlushOldestBlock();
00326     static void Verify();
00327 
00328 };
00329 
00330 
00331 /* ******************************************************************** */
00332 /*                             GDALColorTable                           */
00333 /* ******************************************************************** */
00334 
00335 class CPL_DLL GDALColorTable
00336 {
00337     GDALPaletteInterp eInterp;
00338 
00339     int         nEntryCount;
00340     GDALColorEntry *paoEntries;
00341 
00342 public:
00343                 GDALColorTable( GDALPaletteInterp = GPI_RGB );
00344                 ~GDALColorTable();
00345 
00346     GDALColorTable *Clone() const;
00347 
00348     GDALPaletteInterp GetPaletteInterpretation() const;
00349 
00350     int           GetColorEntryCount() const;
00351     const GDALColorEntry *GetColorEntry( int ) const;
00352     int           GetColorEntryAsRGB( int, GDALColorEntry * ) const;
00353     void          SetColorEntry( int, const GDALColorEntry * );
00354 };
00355 
00356 /* ******************************************************************** */
00357 /*                            GDALRasterBand                            */
00358 /* ******************************************************************** */
00359 
00361 
00362 class CPL_DLL GDALRasterBand : public GDALMajorObject
00363 {
00364   protected:
00365     GDALDataset *poDS;
00366     int         nBand; /* 1 based */
00367 
00368     int         nRasterXSize;
00369     int         nRasterYSize;
00370     
00371     GDALDataType eDataType;
00372     GDALAccess  eAccess;
00373 
00374     /* stuff related to blocking, and raster cache */
00375     int         nBlockXSize;
00376     int         nBlockYSize;
00377     int         nBlocksPerRow;
00378     int         nBlocksPerColumn;
00379 
00380     GDALRasterBlock **papoBlocks;
00381 
00382     friend class GDALDataset;
00383     friend class GDALRasterBlock;
00384 
00385   protected:
00386     virtual CPLErr IReadBlock( int, int, void * ) = 0;
00387     virtual CPLErr IWriteBlock( int, int, void * );
00388     virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00389                               void *, int, int, GDALDataType,
00390                               int, int );
00391     CPLErr         OverviewRasterIO( GDALRWFlag, int, int, int, int,
00392                                      void *, int, int, GDALDataType,
00393                                      int, int );
00394 
00395     CPLErr         AdoptBlock( int, int, GDALRasterBlock * );
00396     void           InitBlockInfo();
00397 
00398   public:
00399                 GDALRasterBand();
00400                 
00401     virtual     ~GDALRasterBand();
00402 
00403     int         GetXSize();
00404     int         GetYSize();
00405 
00406     GDALDataType GetRasterDataType( void );
00407     void        GetBlockSize( int *, int * );
00408     GDALAccess  GetAccess();
00409     
00410     CPLErr      RasterIO( GDALRWFlag, int, int, int, int,
00411                           void *, int, int, GDALDataType,
00412                           int, int );
00413     CPLErr      ReadBlock( int, int, void * );
00414 
00415     CPLErr      WriteBlock( int, int, void * );
00416 
00417     GDALRasterBlock *GetBlockRef( int, int );
00418     CPLErr      FlushCache();
00419     CPLErr      FlushBlock( int = -1, int = -1 );
00420 
00421     // New OpengIS CV_SampleDimension stuff.
00422 
00423     virtual const char  *GetDescription();
00424     virtual char **GetCategoryNames();
00425     virtual double GetNoDataValue( int *pbSuccess = NULL );
00426     virtual double GetMinimum( int *pbSuccess = NULL );
00427     virtual double GetMaximum(int *pbSuccess = NULL );
00428     virtual double GetOffset( int *pbSuccess = NULL );
00429     virtual double GetScale( int *pbSuccess = NULL );
00430     virtual const char *GetUnitType();
00431     virtual GDALColorInterp GetColorInterpretation();
00432     virtual GDALColorTable *GetColorTable();
00433 
00434     virtual CPLErr SetCategoryNames( char ** );
00435     virtual CPLErr SetNoDataValue( double );
00436     virtual CPLErr SetColorTable( GDALColorTable * ); 
00437 
00438     virtual int HasArbitraryOverviews();
00439     virtual int GetOverviewCount();
00440     virtual GDALRasterBand *GetOverview(int);
00441     virtual CPLErr BuildOverviews( const char *, int, int *,
00442                                    GDALProgressFunc, void * );
00443 
00444     CPLErr  GetHistogram( double dfMin, double dfMax,
00445                           int nBuckets, int * panHistogram,
00446                           int bIncludeOutOfRange, int bApproxOK,
00447                           GDALProgressFunc, void *pProgressData );
00448 };
00449 
00450 /* ******************************************************************** */
00451 /*                             GDALOpenInfo                             */
00452 /*                                                                      */
00453 /*      Structure of data about dataset for open functions.             */
00454 /* ******************************************************************** */
00455 
00456 class CPL_DLL GDALOpenInfo
00457 {
00458   public:
00459 
00460                 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn );
00461                 ~GDALOpenInfo( void );
00462     
00463     char        *pszFilename;
00464 
00465     GDALAccess  eAccess;
00466 
00467     GBool       bStatOK;
00468     VSIStatBuf  sStat;
00469     
00470     FILE        *fp;
00471 
00472     int         nHeaderBytes;
00473     GByte       *pabyHeader;
00474 
00475 };
00476 
00477 /* ******************************************************************** */
00478 /*                              GDALDriver                              */
00479 /* ******************************************************************** */
00480 
00490 class CPL_DLL GDALDriver : public GDALMajorObject
00491 {
00492   public:
00493                         GDALDriver();
00494                         ~GDALDriver();
00495 
00497     char                *pszShortName;
00498 
00500     char                *pszLongName;
00501 
00503     char                *pszHelpTopic;
00504     
00505     GDALDataset         *(*pfnOpen)( GDALOpenInfo * );
00506 
00507     GDALDataset         *(*pfnCreate)( const char * pszName,
00508                                        int nXSize, int nYSize, int nBands,
00509                                        GDALDataType eType,
00510                                        char ** papszOptions );
00511 
00512     GDALDataset         *Create( const char * pszName,
00513                                  int nXSize, int nYSize, int nBands,
00514                                  GDALDataType eType, char ** papszOptions );
00515 
00516     CPLErr              (*pfnDelete)( const char * pszName );
00517 
00518     CPLErr              Delete( const char * pszName );
00519 
00520     GDALDataset         *CreateCopy( const char *, GDALDataset *, 
00521                                      int, char **,
00522                                      GDALProgressFunc pfnProgress, 
00523                                      void * pProgressData );
00524     
00525     GDALDataset         *(*pfnCreateCopy)( const char *, GDALDataset *, 
00526                                            int, char **,
00527                                            GDALProgressFunc pfnProgress, 
00528                                            void * pProgressData );
00529 };
00530 
00531 /* ******************************************************************** */
00532 /*                          GDALDriverManager                           */
00533 /* ******************************************************************** */
00534 
00542 class CPL_DLL GDALDriverManager : public GDALMajorObject
00543 {
00544     int         nDrivers;
00545     GDALDriver  **papoDrivers;
00546 
00547     char        *pszHome;
00548     
00549  public:
00550                 GDALDriverManager();
00551                 ~GDALDriverManager();
00552                 
00553     int         GetDriverCount( void );
00554     GDALDriver  *GetDriver( int );
00555     GDALDriver  *GetDriverByName( const char * );
00556 
00557     int         RegisterDriver( GDALDriver * );
00558     void        MoveDriver( GDALDriver *, int );
00559     void        DeregisterDriver( GDALDriver * );
00560 
00561     void        AutoLoadDrivers();
00562 
00563     const char *GetHome();
00564     void        SetHome( const char * );
00565 };
00566 
00567 CPL_C_START
00568 GDALDriverManager CPL_DLL * GetGDALDriverManager( void );
00569 CPL_C_END
00570 
00571 /* ==================================================================== */
00572 /*      An assortment of overview related stuff.                        */
00573 /* ==================================================================== */
00574 
00575 CPL_C_START
00576 
00577 CPLErr 
00578 GTIFFBuildOverviews( const char * pszFilename,
00579                      int nBands, GDALRasterBand **papoBandList, 
00580                      int nOverviews, int * panOverviewList,
00581                      const char * pszResampling, 
00582                      GDALProgressFunc pfnProgress, void * pProgressData );
00583 
00584 CPLErr
00585 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename,
00586                            const char * pszResampling, 
00587                            int nOverviews, int * panOverviewList,
00588                            int nBands, int * panBandList,
00589                            GDALProgressFunc pfnProgress, void * pProgressData);
00590                            
00591 
00592 CPLErr
00593 GDALRegenerateOverviews( GDALRasterBand *, int, GDALRasterBand **,
00594                          const char *, GDALProgressFunc, void * );
00595 
00596 CPL_C_END
00597 
00598 #endif /* ndef GDAL_PRIV_H_INCLUDED */

Generated at Thu Jul 5 09:16:12 2001 for GDAL by doxygen1.2.3-20001105 written by Dimitri van Heesch, © 1997-2000