|
GDAL
|
00001 /****************************************************************************** 00002 * $Id: gdal_pam.h 36501 2016-11-25 14:09:24Z rouault $ 00003 * 00004 * Project: GDAL Core 00005 * Purpose: Declaration for Peristable Auxiliary Metadata classes. 00006 * Author: Frank Warmerdam, warmerdam@pobox.com 00007 * 00008 ****************************************************************************** 00009 * Copyright (c) 2005, Frank Warmerdam <warmerdam@pobox.com> 00010 * 00011 * Permission is hereby granted, free of charge, to any person obtaining a 00012 * copy of this software and associated documentation files (the "Software"), 00013 * to deal in the Software without restriction, including without limitation 00014 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00015 * and/or sell copies of the Software, and to permit persons to whom the 00016 * Software is furnished to do so, subject to the following conditions: 00017 * 00018 * The above copyright notice and this permission notice shall be included 00019 * in all copies or substantial portions of the Software. 00020 * 00021 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00022 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00023 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00024 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00025 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00026 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00027 * DEALINGS IN THE SOFTWARE. 00028 ****************************************************************************/ 00029 00030 #ifndef GDAL_PAM_H_INCLUDED 00031 #define GDAL_PAM_H_INCLUDED 00032 00034 00035 #include "gdal_priv.h" 00036 00037 class GDALPamRasterBand; 00038 00039 /* Clone Info Flags */ 00040 00041 #define GCIF_GEOTRANSFORM 0x01 00042 #define GCIF_PROJECTION 0x02 00043 #define GCIF_METADATA 0x04 00044 #define GCIF_GCPS 0x08 00045 00046 #define GCIF_NODATA 0x001000 00047 #define GCIF_CATEGORYNAMES 0x002000 00048 #define GCIF_MINMAX 0x004000 00049 #define GCIF_SCALEOFFSET 0x008000 00050 #define GCIF_UNITTYPE 0x010000 00051 #define GCIF_COLORTABLE 0x020000 00052 #define GCIF_COLORINTERP 0x020000 00053 #define GCIF_BAND_METADATA 0x040000 00054 #define GCIF_RAT 0x080000 00055 #define GCIF_MASK 0x100000 00056 #define GCIF_BAND_DESCRIPTION 0x200000 00057 00058 #define GCIF_ONLY_IF_MISSING 0x10000000 00059 #define GCIF_PROCESS_BANDS 0x20000000 00060 00061 #define GCIF_PAM_DEFAULT (GCIF_GEOTRANSFORM | GCIF_PROJECTION | \ 00062 GCIF_METADATA | GCIF_GCPS | \ 00063 GCIF_NODATA | GCIF_CATEGORYNAMES | \ 00064 GCIF_MINMAX | GCIF_SCALEOFFSET | \ 00065 GCIF_UNITTYPE | GCIF_COLORTABLE | \ 00066 GCIF_COLORINTERP | GCIF_BAND_METADATA | \ 00067 GCIF_RAT | GCIF_MASK | \ 00068 GCIF_ONLY_IF_MISSING | GCIF_PROCESS_BANDS|\ 00069 GCIF_BAND_DESCRIPTION) 00070 00071 /* GDAL PAM Flags */ 00072 /* ERO 2011/04/13 : GPF_AUXMODE seems to be unimplemented */ 00073 #define GPF_DIRTY 0x01 // .pam file needs to be written on close 00074 #define GPF_TRIED_READ_FAILED 0x02 // no need to keep trying to read .pam. 00075 #define GPF_DISABLED 0x04 // do not try any PAM stuff. 00076 #define GPF_AUXMODE 0x08 // store info in .aux (HFA) file. 00077 #define GPF_NOSAVE 0x10 // do not try to save pam info. 00078 00079 /* ==================================================================== */ 00080 /* GDALDatasetPamInfo */ 00081 /* */ 00082 /* We make these things a separate structure of information */ 00083 /* primarily so we can modify it without altering the size of */ 00084 /* the GDALPamDataset. It is an effort to reduce ABI churn for */ 00085 /* driver plugins. */ 00086 /* ==================================================================== */ 00087 class GDALDatasetPamInfo 00088 { 00089 public: 00090 char *pszPamFilename; 00091 00092 char *pszProjection; 00093 00094 int bHaveGeoTransform; 00095 double adfGeoTransform[6]; 00096 00097 int nGCPCount; 00098 GDAL_GCP *pasGCPList; 00099 char *pszGCPProjection; 00100 00101 CPLString osPhysicalFilename; 00102 CPLString osSubdatasetName; 00103 CPLString osAuxFilename; 00104 00105 int bHasMetadata; 00106 }; 00108 00109 /* ******************************************************************** */ 00110 /* GDALPamDataset */ 00111 /* ******************************************************************** */ 00112 00114 class CPL_DLL GDALPamDataset : public GDALDataset 00115 { 00116 friend class GDALPamRasterBand; 00117 00118 private: 00119 int IsPamFilenameAPotentialSiblingFile(); 00120 00121 protected: 00122 00123 GDALPamDataset(void); 00125 int nPamFlags; 00126 GDALDatasetPamInfo *psPam; 00127 00128 virtual CPLXMLNode *SerializeToXML( const char *); 00129 virtual CPLErr XMLInit( CPLXMLNode *, const char * ); 00130 00131 virtual CPLErr TryLoadXML(char **papszSiblingFiles = NULL); 00132 virtual CPLErr TrySaveXML(); 00133 00134 CPLErr TryLoadAux(char **papszSiblingFiles = NULL); 00135 CPLErr TrySaveAux(); 00136 00137 virtual const char *BuildPamFilename(); 00138 00139 void PamInitialize(); 00140 void PamClear(); 00141 00142 void SetPhysicalFilename( const char * ); 00143 const char *GetPhysicalFilename(); 00144 void SetSubdatasetName( const char *); 00145 const char *GetSubdatasetName(); 00147 00148 public: 00149 virtual ~GDALPamDataset(); 00150 00151 virtual void FlushCache(void) CPL_OVERRIDE; 00152 00153 virtual const char *GetProjectionRef(void) CPL_OVERRIDE; 00154 virtual CPLErr SetProjection( const char * ) CPL_OVERRIDE; 00155 00156 virtual CPLErr GetGeoTransform( double * ) CPL_OVERRIDE; 00157 virtual CPLErr SetGeoTransform( double * ) CPL_OVERRIDE; 00158 00159 virtual int GetGCPCount() CPL_OVERRIDE; 00160 virtual const char *GetGCPProjection() CPL_OVERRIDE; 00161 virtual const GDAL_GCP *GetGCPs() CPL_OVERRIDE; 00162 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList, 00163 const char *pszGCPProjection ) CPL_OVERRIDE; 00164 00165 virtual CPLErr SetMetadata( char ** papszMetadata, 00166 const char * pszDomain = "" ) CPL_OVERRIDE; 00167 virtual CPLErr SetMetadataItem( const char * pszName, 00168 const char * pszValue, 00169 const char * pszDomain = "" ) CPL_OVERRIDE; 00170 virtual char **GetMetadata( const char * pszDomain = "" ) CPL_OVERRIDE; 00171 virtual const char *GetMetadataItem( const char * pszName, 00172 const char * pszDomain = "" ) CPL_OVERRIDE; 00173 00174 virtual char **GetFileList(void) CPL_OVERRIDE; 00175 00177 virtual CPLErr CloneInfo( GDALDataset *poSrcDS, int nCloneInfoFlags ); 00178 00179 virtual CPLErr IBuildOverviews( const char *pszResampling, 00180 int nOverviews, int *panOverviewList, 00181 int nListBands, int *panBandList, 00182 GDALProgressFunc pfnProgress, 00183 void * pProgressData ) CPL_OVERRIDE; 00184 00185 // "semi private" methods. 00186 void MarkPamDirty() { nPamFlags |= GPF_DIRTY; } 00187 GDALDatasetPamInfo *GetPamInfo() { return psPam; } 00188 int GetPamFlags() { return nPamFlags; } 00189 void SetPamFlags(int nValue ) { nPamFlags = nValue; } 00191 00192 private: 00193 CPL_DISALLOW_COPY_ASSIGN(GDALPamDataset) 00194 }; 00195 00197 /* ==================================================================== */ 00198 /* GDALRasterBandPamInfo */ 00199 /* */ 00200 /* We make these things a separate structure of information */ 00201 /* primarily so we can modify it without altering the size of */ 00202 /* the GDALPamDataset. It is an effort to reduce ABI churn for */ 00203 /* driver plugins. */ 00204 /* ==================================================================== */ 00205 typedef struct { 00206 GDALPamDataset *poParentDS; 00207 00208 int bNoDataValueSet; 00209 double dfNoDataValue; 00210 00211 GDALColorTable *poColorTable; 00212 00213 GDALColorInterp eColorInterp; 00214 00215 char *pszUnitType; 00216 char **papszCategoryNames; 00217 00218 double dfOffset; 00219 double dfScale; 00220 00221 int bHaveMinMax; 00222 double dfMin; 00223 double dfMax; 00224 00225 int bHaveStats; 00226 double dfMean; 00227 double dfStdDev; 00228 00229 CPLXMLNode *psSavedHistograms; 00230 00231 GDALRasterAttributeTable *poDefaultRAT; 00232 00233 } GDALRasterBandPamInfo; 00235 /* ******************************************************************** */ 00236 /* GDALPamRasterBand */ 00237 /* ******************************************************************** */ 00238 00240 class CPL_DLL GDALPamRasterBand : public GDALRasterBand 00241 { 00242 friend class GDALPamDataset; 00243 00244 protected: 00246 virtual CPLXMLNode *SerializeToXML( const char *pszVRTPath ); 00247 virtual CPLErr XMLInit( CPLXMLNode *, const char * ); 00248 00249 void PamInitialize(); 00250 void PamClear(); 00251 00252 GDALRasterBandPamInfo *psPam; 00254 00255 public: 00256 GDALPamRasterBand(); 00258 explicit GDALPamRasterBand(int bForceCachedIO); 00260 virtual ~GDALPamRasterBand(); 00261 00262 virtual void SetDescription( const char * ) CPL_OVERRIDE; 00263 00264 virtual CPLErr SetNoDataValue( double ) CPL_OVERRIDE; 00265 virtual double GetNoDataValue( int *pbSuccess = NULL ) CPL_OVERRIDE; 00266 virtual CPLErr DeleteNoDataValue() CPL_OVERRIDE; 00267 00268 virtual CPLErr SetColorTable( GDALColorTable * ) CPL_OVERRIDE; 00269 virtual GDALColorTable *GetColorTable() CPL_OVERRIDE; 00270 00271 virtual CPLErr SetColorInterpretation( GDALColorInterp ) CPL_OVERRIDE; 00272 virtual GDALColorInterp GetColorInterpretation() CPL_OVERRIDE; 00273 00274 virtual const char *GetUnitType() CPL_OVERRIDE; 00275 CPLErr SetUnitType( const char * ) CPL_OVERRIDE; 00276 00277 virtual char **GetCategoryNames() CPL_OVERRIDE; 00278 virtual CPLErr SetCategoryNames( char ** ) CPL_OVERRIDE; 00279 00280 virtual double GetOffset( int *pbSuccess = NULL ) CPL_OVERRIDE; 00281 CPLErr SetOffset( double ) CPL_OVERRIDE; 00282 virtual double GetScale( int *pbSuccess = NULL ) CPL_OVERRIDE; 00283 CPLErr SetScale( double ) CPL_OVERRIDE; 00284 00285 virtual CPLErr GetHistogram( double dfMin, double dfMax, 00286 int nBuckets, GUIntBig * panHistogram, 00287 int bIncludeOutOfRange, int bApproxOK, 00288 GDALProgressFunc, void *pProgressData ) CPL_OVERRIDE; 00289 00290 virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax, 00291 int *pnBuckets, GUIntBig ** ppanHistogram, 00292 int bForce, 00293 GDALProgressFunc, void *pProgressData) CPL_OVERRIDE; 00294 00295 virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax, 00296 int nBuckets, GUIntBig *panHistogram ) CPL_OVERRIDE; 00297 00298 virtual CPLErr SetMetadata( char ** papszMetadata, 00299 const char * pszDomain = "" ) CPL_OVERRIDE; 00300 virtual CPLErr SetMetadataItem( const char * pszName, 00301 const char * pszValue, 00302 const char * pszDomain = "" ) CPL_OVERRIDE; 00303 00304 virtual GDALRasterAttributeTable *GetDefaultRAT() CPL_OVERRIDE; 00305 virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * ) CPL_OVERRIDE; 00306 00308 // new in GDALPamRasterBand. 00309 virtual CPLErr CloneInfo( GDALRasterBand *poSrcBand, int nCloneInfoFlags ); 00310 00311 // "semi private" methods. 00312 GDALRasterBandPamInfo *GetPamInfo() { return psPam; } 00314 private: 00315 CPL_DISALLOW_COPY_ASSIGN(GDALPamRasterBand) 00316 }; 00317 00319 // These are mainly helper functions for internal use. 00320 int CPL_DLL PamParseHistogram( CPLXMLNode *psHistItem, 00321 double *pdfMin, double *pdfMax, 00322 int *pnBuckets, GUIntBig **ppanHistogram, 00323 int *pbIncludeOutOfRange, int *pbApproxOK ); 00324 CPLXMLNode CPL_DLL * 00325 PamFindMatchingHistogram( CPLXMLNode *psSavedHistograms, 00326 double dfMin, double dfMax, int nBuckets, 00327 int bIncludeOutOfRange, int bApproxOK ); 00328 CPLXMLNode CPL_DLL * 00329 PamHistogramToXMLTree( double dfMin, double dfMax, 00330 int nBuckets, GUIntBig * panHistogram, 00331 int bIncludeOutOfRange, int bApprox ); 00332 00333 // For managing the proxy file database. 00334 const char CPL_DLL * PamGetProxy( const char * ); 00335 const char CPL_DLL * PamAllocateProxy( const char * ); 00336 const char CPL_DLL * PamDeallocateProxy( const char * ); 00337 void CPL_DLL PamCleanProxyDB( void ); 00338 00340 00341 #endif /* ndef GDAL_PAM_H_INCLUDED */
1.7.6.1.