00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef GDAL_PROXY_H_INCLUDED
00031 #define GDAL_PROXY_H_INCLUDED
00032
00033 #include "gdal.h"
00034
00035 #ifdef __cplusplus
00036
00037 #include "gdal_priv.h"
00038 #include "cpl_hash_set.h"
00039
00040
00041
00042
00043
00044 class CPL_DLL GDALProxyDataset : public GDALDataset
00045 {
00046 protected:
00047 virtual GDALDataset *RefUnderlyingDataset() = 0;
00048 virtual void UnrefUnderlyingDataset(GDALDataset* poUnderlyingDataset);
00049
00050 virtual CPLErr IBuildOverviews( const char *, int, int *,
00051 int, int *, GDALProgressFunc, void * );
00052 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00053 void *, int, int, GDALDataType,
00054 int, int *, int, int, int );
00055 public:
00056
00057 virtual char **GetMetadata( const char * pszDomain );
00058 virtual CPLErr SetMetadata( char ** papszMetadata,
00059 const char * pszDomain );
00060 virtual const char *GetMetadataItem( const char * pszName,
00061 const char * pszDomain );
00062 virtual CPLErr SetMetadataItem( const char * pszName,
00063 const char * pszValue,
00064 const char * pszDomain );
00065
00066 virtual void FlushCache(void);
00067
00068 virtual const char *GetProjectionRef(void);
00069 virtual CPLErr SetProjection( const char * );
00070
00071 virtual CPLErr GetGeoTransform( double * );
00072 virtual CPLErr SetGeoTransform( double * );
00073
00074 virtual void *GetInternalHandle( const char * );
00075 virtual GDALDriver *GetDriver(void);
00076 virtual char **GetFileList(void);
00077
00078 virtual int GetGCPCount();
00079 virtual const char *GetGCPProjection();
00080 virtual const GDAL_GCP *GetGCPs();
00081 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList,
00082 const char *pszGCPProjection );
00083
00084 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00085 int nBufXSize, int nBufYSize,
00086 GDALDataType eDT,
00087 int nBandCount, int *panBandList,
00088 char **papszOptions );
00089
00090 virtual CPLErr CreateMaskBand( int nFlags );
00091
00092 };
00093
00094
00095
00096
00097
00098 class CPL_DLL GDALProxyRasterBand : public GDALRasterBand
00099 {
00100 protected:
00101 virtual GDALRasterBand* RefUnderlyingRasterBand() = 0;
00102 virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
00103
00104 virtual CPLErr IReadBlock( int, int, void * );
00105 virtual CPLErr IWriteBlock( int, int, void * );
00106 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00107 void *, int, int, GDALDataType,
00108 int, int );
00109
00110 public:
00111
00112 virtual char **GetMetadata( const char * pszDomain );
00113 virtual CPLErr SetMetadata( char ** papszMetadata,
00114 const char * pszDomain );
00115 virtual const char *GetMetadataItem( const char * pszName,
00116 const char * pszDomain );
00117 virtual CPLErr SetMetadataItem( const char * pszName,
00118 const char * pszValue,
00119 const char * pszDomain );
00120 virtual CPLErr FlushCache();
00121 virtual char **GetCategoryNames();
00122 virtual double GetNoDataValue( int *pbSuccess = NULL );
00123 virtual double GetMinimum( int *pbSuccess = NULL );
00124 virtual double GetMaximum(int *pbSuccess = NULL );
00125 virtual double GetOffset( int *pbSuccess = NULL );
00126 virtual double GetScale( int *pbSuccess = NULL );
00127 virtual const char *GetUnitType();
00128 virtual GDALColorInterp GetColorInterpretation();
00129 virtual GDALColorTable *GetColorTable();
00130 virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0);
00131
00132 virtual CPLErr SetCategoryNames( char ** );
00133 virtual CPLErr SetNoDataValue( double );
00134 virtual CPLErr SetColorTable( GDALColorTable * );
00135 virtual CPLErr SetColorInterpretation( GDALColorInterp );
00136 virtual CPLErr SetOffset( double );
00137 virtual CPLErr SetScale( double );
00138 virtual CPLErr SetUnitType( const char * );
00139
00140 virtual CPLErr GetStatistics( int bApproxOK, int bForce,
00141 double *pdfMin, double *pdfMax,
00142 double *pdfMean, double *padfStdDev );
00143 virtual CPLErr ComputeStatistics( int bApproxOK,
00144 double *pdfMin, double *pdfMax,
00145 double *pdfMean, double *pdfStdDev,
00146 GDALProgressFunc, void *pProgressData );
00147 virtual CPLErr SetStatistics( double dfMin, double dfMax,
00148 double dfMean, double dfStdDev );
00149 virtual CPLErr ComputeRasterMinMax( int, double* );
00150
00151 virtual int HasArbitraryOverviews();
00152 virtual int GetOverviewCount();
00153 virtual GDALRasterBand *GetOverview(int);
00154 virtual GDALRasterBand *GetRasterSampleOverview( int );
00155 virtual CPLErr BuildOverviews( const char *, int, int *,
00156 GDALProgressFunc, void * );
00157
00158 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00159 int nBufXSize, int nBufYSize,
00160 GDALDataType eDT, char **papszOptions );
00161
00162 virtual CPLErr GetHistogram( double dfMin, double dfMax,
00163 int nBuckets, int * panHistogram,
00164 int bIncludeOutOfRange, int bApproxOK,
00165 GDALProgressFunc, void *pProgressData );
00166
00167 virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax,
00168 int *pnBuckets, int ** ppanHistogram,
00169 int bForce,
00170 GDALProgressFunc, void *pProgressData);
00171 virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax,
00172 int nBuckets, int *panHistogram );
00173
00174 virtual const GDALRasterAttributeTable *GetDefaultRAT();
00175 virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * );
00176
00177 virtual GDALRasterBand *GetMaskBand();
00178 virtual int GetMaskFlags();
00179 virtual CPLErr CreateMaskBand( int nFlags );
00180
00181 };
00182
00183
00184
00185
00186
00187
00188 typedef struct _GDALProxyPoolCacheEntry GDALProxyPoolCacheEntry;
00189 class GDALProxyPoolRasterBand;
00190
00191 class CPL_DLL GDALProxyPoolDataset : public GDALProxyDataset
00192 {
00193 private:
00194 GIntBig responsiblePID;
00195
00196 char *pszProjectionRef;
00197 double adfGeoTransform[6];
00198 int bHasSrcProjection;
00199 int bHasSrcGeoTransform;
00200 char *pszGCPProjection;
00201 int nGCPCount;
00202 GDAL_GCP *pasGCPList;
00203 CPLHashSet *metadataSet;
00204 CPLHashSet *metadataItemSet;
00205
00206 GDALProxyPoolCacheEntry* cacheEntry;
00207
00208 protected:
00209 virtual GDALDataset *RefUnderlyingDataset();
00210 virtual void UnrefUnderlyingDataset(GDALDataset* poUnderlyingDataset);
00211
00212 friend class GDALProxyPoolRasterBand;
00213
00214 public:
00215 GDALProxyPoolDataset(const char* pszSourceDatasetDescription,
00216 int nRasterXSize, int nRasterYSize,
00217 GDALAccess eAccess = GA_ReadOnly,
00218 int bShared = FALSE,
00219 const char * pszProjectionRef = NULL,
00220 double * padfGeoTransform = NULL);
00221 ~GDALProxyPoolDataset();
00222
00223 void AddSrcBandDescription( GDALDataType eDataType, int nBlockXSize, int nBlockYSize);
00224
00225 virtual const char *GetProjectionRef(void);
00226 virtual CPLErr SetProjection( const char * );
00227
00228 virtual CPLErr GetGeoTransform( double * );
00229 virtual CPLErr SetGeoTransform( double * );
00230
00231
00232
00233
00234 virtual char **GetMetadata( const char * pszDomain );
00235 virtual const char *GetMetadataItem( const char * pszName,
00236 const char * pszDomain );
00237
00238 virtual void *GetInternalHandle( const char * pszRequest );
00239
00240 virtual const char *GetGCPProjection();
00241 virtual const GDAL_GCP *GetGCPs();
00242 };
00243
00244
00245
00246
00247
00248 class GDALProxyPoolOverviewRasterBand;
00249 class GDALProxyPoolMaskBand;
00250
00251 class CPL_DLL GDALProxyPoolRasterBand : public GDALProxyRasterBand
00252 {
00253 private:
00254 CPLHashSet *metadataSet;
00255 CPLHashSet *metadataItemSet;
00256 char *pszUnitType;
00257 char **papszCategoryNames;
00258 GDALColorTable *poColorTable;
00259
00260 int nSizeProxyOverviewRasterBand;
00261 GDALProxyPoolOverviewRasterBand **papoProxyOverviewRasterBand;
00262 GDALProxyPoolMaskBand *poProxyMaskBand;
00263
00264 void Init();
00265
00266 protected:
00267 virtual GDALRasterBand* RefUnderlyingRasterBand();
00268 virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
00269
00270 friend class GDALProxyPoolOverviewRasterBand;
00271 friend class GDALProxyPoolMaskBand;
00272
00273 public:
00274 GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS, int nBand,
00275 GDALDataType eDataType,
00276 int nBlockXSize, int nBlockYSize);
00277 GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS,
00278 GDALRasterBand* poUnderlyingRasterBand);
00279 ~GDALProxyPoolRasterBand();
00280
00281
00282
00283
00284 virtual char **GetMetadata( const char * pszDomain );
00285 virtual const char *GetMetadataItem( const char * pszName,
00286 const char * pszDomain );
00287 virtual char **GetCategoryNames();
00288 virtual const char *GetUnitType();
00289 virtual GDALColorTable *GetColorTable();
00290 virtual GDALRasterBand *GetOverview(int);
00291 virtual GDALRasterBand *GetRasterSampleOverview( int nDesiredSamples);
00292 virtual GDALRasterBand *GetMaskBand();
00293
00294 };
00295
00296
00297
00298
00299
00300 class GDALProxyPoolOverviewRasterBand : public GDALProxyPoolRasterBand
00301 {
00302 private:
00303 GDALProxyPoolRasterBand *poMainBand;
00304 int nOverviewBand;
00305
00306 GDALRasterBand *poUnderlyingMainRasterBand;
00307 int nRefCountUnderlyingMainRasterBand;
00308
00309 protected:
00310 virtual GDALRasterBand* RefUnderlyingRasterBand();
00311 virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
00312
00313 public:
00314 GDALProxyPoolOverviewRasterBand(GDALProxyPoolDataset* poDS,
00315 GDALRasterBand* poUnderlyingOverviewBand,
00316 GDALProxyPoolRasterBand* poMainBand,
00317 int nOverviewBand);
00318 ~GDALProxyPoolOverviewRasterBand();
00319 };
00320
00321
00322
00323
00324
00325 class GDALProxyPoolMaskBand : public GDALProxyPoolRasterBand
00326 {
00327 private:
00328 GDALProxyPoolRasterBand *poMainBand;
00329
00330 GDALRasterBand *poUnderlyingMainRasterBand;
00331 int nRefCountUnderlyingMainRasterBand;
00332
00333 protected:
00334 virtual GDALRasterBand* RefUnderlyingRasterBand();
00335 virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
00336
00337 public:
00338 GDALProxyPoolMaskBand(GDALProxyPoolDataset* poDS,
00339 GDALRasterBand* poUnderlyingMaskBand,
00340 GDALProxyPoolRasterBand* poMainBand);
00341 ~GDALProxyPoolMaskBand();
00342 };
00343
00344 #endif
00345
00346
00347
00348
00349
00350
00351
00352 CPL_C_START
00353
00354 typedef struct GDALProxyPoolDatasetHS *GDALProxyPoolDatasetH;
00355
00356 GDALProxyPoolDatasetH CPL_DLL GDALProxyPoolDatasetCreate(const char* pszSourceDatasetDescription,
00357 int nRasterXSize, int nRasterYSize,
00358 GDALAccess eAccess, int bShared,
00359 const char * pszProjectionRef,
00360 double * padfGeoTransform);
00361
00362 void CPL_DLL GDALProxyPoolDatasetDelete(GDALProxyPoolDatasetH hProxyPoolDataset);
00363
00364 void CPL_DLL GDALProxyPoolDatasetAddSrcBandDescription( GDALProxyPoolDatasetH hProxyPoolDataset,
00365 GDALDataType eDataType,
00366 int nBlockXSize, int nBlockYSize);
00367
00368 CPL_C_END
00369
00370 #endif