30 #ifndef VIRTUALDATASET_H_INCLUDED
31 #define VIRTUALDATASET_H_INCLUDED
33 #include "gdal_priv.h"
36 #include "cpl_hash_set.h"
38 int VRTApplyMetadata( CPLXMLNode *, GDALMajorObject * );
39 CPLXMLNode *VRTSerializeMetadata( GDALMajorObject * );
41 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
43 double *padfX,
double *padfY,
double *padfZ,
45 void* VRTDeserializeWarpedOverviewTransformer( CPLXMLNode *psTree );
55 GDALRasterBand *poBand;
62 else if( poBand->GetDataset()->GetShared() )
63 GDALClose( (GDALDatasetH) poBand->GetDataset() );
65 poBand->GetDataset()->Dereference();
79 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
80 void *pData,
int nBufXSize,
int nBufYSize,
81 GDALDataType eBufType,
82 int nPixelSpace,
int nLineSpace ) = 0;
84 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
85 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
86 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax ) = 0;
87 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
89 double *pdfMin,
double *pdfMax,
90 double *pdfMean,
double *pdfStdDev,
91 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
92 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
93 double dfMin,
double dfMax,
94 int nBuckets,
int * panHistogram,
95 int bIncludeOutOfRange,
int bApproxOK,
96 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
98 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * ) = 0;
99 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) = 0;
101 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
102 int *pnMaxSize, CPLHashSet* hSetFiles);
104 virtual int IsSimpleSource() {
return FALSE; }
107 typedef VRTSource *(*VRTSourceParser)(CPLXMLNode *,
const char *);
109 VRTSource *VRTParseCoreSources( CPLXMLNode *psTree,
const char * );
110 VRTSource *VRTParseFilterSources( CPLXMLNode *psTree,
const char * );
124 int bGeoTransformSet;
125 double adfGeoTransform[6];
128 GDAL_GCP *pasGCPList;
129 char *pszGCPProjection;
138 int bCompatibleForDatasetIO;
139 int CheckCompatibleForDatasetIO();
142 virtual int CloseDependentDatasets();
148 void SetNeedsFlush() { bNeedsFlush = TRUE; }
149 virtual void FlushCache();
151 void SetWritable(
int bWritable) { this->bWritable = bWritable; }
153 virtual CPLErr CreateMaskBand(
int nFlags );
156 virtual const char *GetProjectionRef(
void);
157 virtual CPLErr SetProjection(
const char * );
158 virtual CPLErr GetGeoTransform(
double * );
159 virtual CPLErr SetGeoTransform(
double * );
161 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
162 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
163 const char *pszDomain =
"" );
165 virtual int GetGCPCount();
166 virtual const char *GetGCPProjection();
167 virtual const GDAL_GCP *GetGCPs();
168 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
169 const char *pszGCPProjection );
171 virtual CPLErr AddBand( GDALDataType eType,
172 char **papszOptions=NULL );
174 virtual char **GetFileList();
176 virtual CPLErr IRasterIO( GDALRWFlag eRWFlag,
177 int nXOff,
int nYOff,
int nXSize,
int nYSize,
178 void * pData,
int nBufXSize,
int nBufYSize,
179 GDALDataType eBufType,
180 int nBandCount,
int *panBandMap,
181 int nPixelSpace,
int nLineSpace,
int nBandSpace);
183 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath);
184 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
187 GDALDataset* GetSingleSimpleSource();
189 static int Identify( GDALOpenInfo * );
190 static GDALDataset *Open( GDALOpenInfo * );
191 static GDALDataset *OpenXML(
const char *,
const char * = NULL, GDALAccess eAccess = GA_ReadOnly );
192 static GDALDataset *Create(
const char * pszName,
193 int nXSize,
int nYSize,
int nBands,
194 GDALDataType eType,
char ** papszOptions );
195 static CPLErr Delete(
const char * pszFilename );
202 class GDALWarpOperation;
209 GDALWarpOperation *poWarper;
214 virtual int CloseDependentDatasets();
224 CPLErr Initialize(
void * );
226 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
227 int,
int *, GDALProgressFunc,
void * );
229 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
230 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
232 virtual CPLErr AddBand( GDALDataType eType,
233 char **papszOptions=NULL );
235 virtual char **GetFileList();
237 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
239 void GetBlockSize(
int *,
int * );
255 int bHideNoDataValue;
256 double dfNoDataValue;
258 GDALColorTable *poColorTable;
260 GDALColorInterp eColorInterp;
263 char **papszCategoryNames;
268 CPLXMLNode *psSavedHistograms;
270 void Initialize(
int nXSize,
int nYSize );
272 std::vector<VRTOverviewInfo> apoOverviews;
281 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
282 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
284 virtual CPLErr SetNoDataValue(
double );
285 virtual double GetNoDataValue(
int *pbSuccess = NULL );
287 virtual CPLErr SetColorTable( GDALColorTable * );
288 virtual GDALColorTable *GetColorTable();
290 virtual CPLErr SetColorInterpretation( GDALColorInterp );
291 virtual GDALColorInterp GetColorInterpretation();
293 virtual const char *GetUnitType();
294 CPLErr SetUnitType(
const char * );
296 virtual char **GetCategoryNames();
297 virtual CPLErr SetCategoryNames(
char ** );
299 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
300 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
301 const char *pszDomain =
"" );
303 virtual double GetOffset(
int *pbSuccess = NULL );
304 CPLErr SetOffset(
double );
305 virtual double GetScale(
int *pbSuccess = NULL );
306 CPLErr SetScale(
double );
308 virtual int GetOverviewCount();
309 virtual GDALRasterBand *GetOverview(
int);
311 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
312 int nBuckets,
int * panHistogram,
313 int bIncludeOutOfRange,
int bApproxOK,
314 GDALProgressFunc,
void *pProgressData );
316 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
317 int *pnBuckets,
int ** ppanHistogram,
319 GDALProgressFunc,
void *pProgressData);
321 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
322 int nBuckets,
int *panHistogram );
324 CPLErr CopyCommonInfoFrom( GDALRasterBand * );
326 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
327 int *pnMaxSize, CPLHashSet* hSetFiles);
329 virtual void SetDescription(
const char * );
331 virtual GDALRasterBand *GetMaskBand();
332 virtual int GetMaskFlags();
334 virtual CPLErr CreateMaskBand(
int nFlags );
338 void SetIsMaskBand();
340 CPLErr UnsetNoDataValue();
342 virtual int CloseDependentDatasets();
344 virtual int IsSourcedRasterBand() {
return FALSE; }
354 int bAntiRecursionFlag;
355 CPLString osLastLocationInfo;
356 char **papszSourceList;
358 void Initialize(
int nXSize,
int nYSize );
367 int nXSize,
int nYSize );
370 int nXSize,
int nYSize );
373 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
374 void *,
int,
int, GDALDataType,
377 virtual const char *GetMetadataItem(
const char * pszName,
378 const char * pszDomain =
"" );
379 virtual char **GetMetadata(
const char * pszDomain =
"" );
380 virtual CPLErr SetMetadata(
char ** papszMetadata,
381 const char * pszDomain =
"" );
382 virtual CPLErr SetMetadataItem(
const char * pszName,
383 const char * pszValue,
384 const char * pszDomain =
"" );
386 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
387 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
389 virtual double GetMinimum(
int *pbSuccess = NULL );
390 virtual double GetMaximum(
int *pbSuccess = NULL );
391 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double* adfMinMax );
392 virtual CPLErr ComputeStatistics(
int bApproxOK,
393 double *pdfMin,
double *pdfMax,
394 double *pdfMean,
double *pdfStdDev,
395 GDALProgressFunc pfnProgress,
void *pProgressData );
396 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
397 int nBuckets,
int * panHistogram,
398 int bIncludeOutOfRange,
int bApproxOK,
399 GDALProgressFunc pfnProgress,
void *pProgressData );
402 CPLErr AddSimpleSource( GDALRasterBand *poSrcBand,
403 int nSrcXOff=-1,
int nSrcYOff=-1,
404 int nSrcXSize=-1,
int nSrcYSize=-1,
405 int nDstXOff=-1,
int nDstYOff=-1,
406 int nDstXSize=-1,
int nDstYSize=-1,
407 const char *pszResampling =
"near",
408 double dfNoDataValue = VRT_NODATA_UNSET);
409 CPLErr AddComplexSource( GDALRasterBand *poSrcBand,
410 int nSrcXOff=-1,
int nSrcYOff=-1,
411 int nSrcXSize=-1,
int nSrcYSize=-1,
412 int nDstXOff=-1,
int nDstYOff=-1,
413 int nDstXSize=-1,
int nDstYSize=-1,
414 double dfScaleOff=0.0,
415 double dfScaleRatio=1.0,
416 double dfNoDataValue = VRT_NODATA_UNSET,
417 int nColorTableComponent = 0);
419 CPLErr AddMaskBandSource( GDALRasterBand *poSrcBand,
420 int nSrcXOff=-1,
int nSrcYOff=-1,
421 int nSrcXSize=-1,
int nSrcYSize=-1,
422 int nDstXOff=-1,
int nDstYOff=-1,
423 int nDstXSize=-1,
int nDstYSize=-1 );
425 CPLErr AddFuncSource( VRTImageReadFunc pfnReadFunc,
void *hCBData,
426 double dfNoDataValue = VRT_NODATA_UNSET );
429 virtual CPLErr IReadBlock(
int,
int,
void * );
431 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
432 int *pnMaxSize, CPLHashSet* hSetFiles);
434 virtual int CloseDependentDatasets();
436 virtual int IsSourcedRasterBand() {
return TRUE; }
447 GDALDataType eType = GDT_Unknown );
450 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
451 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
453 virtual CPLErr IReadBlock(
int,
int,
void * );
454 virtual CPLErr IWriteBlock(
int,
int,
void * );
456 virtual int GetOverviewCount();
457 virtual GDALRasterBand *GetOverview(
int);
469 GDALDataType eSourceTransferType;
473 GDALDataType eType,
int nXSize,
int nYSize);
476 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
477 void *,
int,
int, GDALDataType,
480 static CPLErr AddPixelFunction
481 (
const char *pszFuncName, GDALDerivedPixelFunc pfnPixelFunc);
482 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName);
484 void SetPixelFunctionName(
const char *pszFuncName);
485 void SetSourceTransferType(GDALDataType eDataType);
487 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
488 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
500 RawRasterBand *poRawRaster;
502 char *pszSourceFilename;
507 GDALDataType eType = GDT_Unknown );
510 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
511 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
513 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
514 void *,
int,
int, GDALDataType,
517 virtual CPLErr IReadBlock(
int,
int,
void * );
518 virtual CPLErr IWriteBlock(
int,
int,
void * );
520 CPLErr SetRawLink(
const char *pszFilename,
521 const char *pszVRTPath,
523 vsi_l_offset nImageOffset,
524 int nPixelOffset,
int nLineOffset,
525 const char *pszByteOrder );
529 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
530 int *pnMaxSize, CPLHashSet* hSetFiles);
539 void *pDeserializerData;
545 char **papszSourceParsers;
547 virtual char **GetMetadata(
const char * pszDomain =
"" );
548 virtual CPLErr SetMetadata(
char ** papszMetadata,
549 const char * pszDomain =
"" );
551 VRTSource *ParseSource( CPLXMLNode *psSrc,
const char *pszVRTPath );
552 void AddSourceParser(
const char *pszElementName,
553 VRTSourceParser pfnParser );
563 GDALRasterBand *poRasterBand;
567 GDALRasterBand *poMaskBandMainBand;
580 double dfNoDataValue;
586 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * );
587 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
589 void SetSrcBand( GDALRasterBand * );
590 void SetSrcMaskBand( GDALRasterBand * );
591 void SetSrcWindow(
int,
int,
int,
int );
592 void SetDstWindow(
int,
int,
int,
int );
593 void SetNoDataValue(
double dfNoDataValue );
595 int GetSrcDstWindow(
int,
int,
int,
int,
int,
int,
596 int *,
int *,
int *,
int *,
597 int *,
int *,
int *,
int * );
599 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
600 void *pData,
int nBufXSize,
int nBufYSize,
601 GDALDataType eBufType,
602 int nPixelSpace,
int nLineSpace );
604 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
605 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
606 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
607 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
609 double *pdfMin,
double *pdfMax,
610 double *pdfMean,
double *pdfStdDev,
611 GDALProgressFunc pfnProgress,
void *pProgressData );
612 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
613 double dfMin,
double dfMax,
614 int nBuckets,
int * panHistogram,
615 int bIncludeOutOfRange,
int bApproxOK,
616 GDALProgressFunc pfnProgress,
void *pProgressData );
618 void DstToSrc(
double dfX,
double dfY,
619 double &dfXOut,
double &dfYOut );
620 void SrcToDst(
double dfX,
double dfY,
621 double &dfXOut,
double &dfYOut );
623 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
624 int *pnMaxSize, CPLHashSet* hSetFiles);
626 virtual int IsSimpleSource() {
return TRUE; }
627 virtual const char* GetType() {
return "SimpleSource"; }
629 GDALRasterBand* GetBand();
631 CPLErr DatasetRasterIO(
632 int nXOff,
int nYOff,
int nXSize,
int nYSize,
633 void * pData,
int nBufXSize,
int nBufYSize,
634 GDALDataType eBufType,
635 int nBandCount,
int *panBandMap,
636 int nPixelSpace,
int nLineSpace,
int nBandSpace);
647 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
648 void *pData,
int nBufXSize,
int nBufYSize,
649 GDALDataType eBufType,
650 int nPixelSpace,
int nLineSpace );
652 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
653 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
654 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
655 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
657 double *pdfMin,
double *pdfMax,
658 double *pdfMean,
double *pdfStdDev,
659 GDALProgressFunc pfnProgress,
void *pProgressData );
660 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
661 double dfMin,
double dfMax,
662 int nBuckets,
int * panHistogram,
663 int bIncludeOutOfRange,
int bApproxOK,
664 GDALProgressFunc pfnProgress,
void *pProgressData );
666 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
667 virtual const char* GetType() {
return "AveragedSource"; }
677 CPLErr RasterIOInternal(
int nReqXOff,
int nReqYOff,
678 int nReqXSize,
int nReqYSize,
679 void *pData,
int nOutXSize,
int nOutYSize,
680 GDALDataType eBufType,
681 int nPixelSpace,
int nLineSpace );
687 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
688 void *pData,
int nBufXSize,
int nBufYSize,
689 GDALDataType eBufType,
690 int nPixelSpace,
int nLineSpace );
692 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
693 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
694 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
695 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
697 double *pdfMin,
double *pdfMax,
698 double *pdfMean,
double *pdfStdDev,
699 GDALProgressFunc pfnProgress,
void *pProgressData );
700 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
701 double dfMin,
double dfMax,
702 int nBuckets,
int * panHistogram,
703 int bIncludeOutOfRange,
int bApproxOK,
704 GDALProgressFunc pfnProgress,
void *pProgressData );
706 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
707 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
708 virtual const char* GetType() {
return "ComplexSource"; }
710 double LookupValue(
double dfInput );
715 double *padfLUTInputs;
716 double *padfLUTOutputs;
718 int nColorTableComponent;
728 int IsTypeSupported( GDALDataType eType );
731 int nSupportedTypesCount;
732 GDALDataType aeSupportedTypes[20];
734 int nExtraEdgePixels;
740 void SetExtraEdgePixels(
int );
741 void SetFilteringDataTypesSupported(
int, GDALDataType * );
743 virtual CPLErr FilterData(
int nXSize,
int nYSize, GDALDataType eType,
744 GByte *pabySrcData, GByte *pabyDstData ) = 0;
746 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
747 void *pData,
int nBufXSize,
int nBufYSize,
748 GDALDataType eBufType,
749 int nPixelSpace,
int nLineSpace );
761 double *padfKernelCoefs;
769 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * );
770 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
772 virtual CPLErr FilterData(
int nXSize,
int nYSize, GDALDataType eType,
773 GByte *pabySrcData, GByte *pabyDstData );
775 CPLErr SetKernel(
int nKernelSize,
double *padfCoefs );
776 void SetNormalized(
int );
789 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * );
790 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
802 virtual CPLErr XMLInit( CPLXMLNode *,
const char *) {
return CE_Failure; }
803 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
805 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
806 void *pData,
int nBufXSize,
int nBufYSize,
807 GDALDataType eBufType,
808 int nPixelSpace,
int nLineSpace );
810 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
811 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
812 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
813 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
815 double *pdfMin,
double *pdfMax,
816 double *pdfMean,
double *pdfStdDev,
817 GDALProgressFunc pfnProgress,
void *pProgressData );
818 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
819 double dfMin,
double dfMax,
820 int nBuckets,
int * panHistogram,
821 int bIncludeOutOfRange,
int bApproxOK,
822 GDALProgressFunc pfnProgress,
void *pProgressData );
824 VRTImageReadFunc pfnReadFunc;
Definition: vrtdataset.h:756
Definition: vrtdataset.h:643
Definition: vrtdataset.h:249
Definition: vrtdataset.h:74
Definition: vrtdataset.h:725
Definition: vrtdataset.h:351
Definition: vrtdataset.h:118
Definition: vrtdataset.h:50
Definition: vrtdataset.h:783
Definition: vrtdataset.h:498
Definition: vrtdataset.h:443
Definition: vrtdataset.h:464
Definition: vrtdataset.h:796
Definition: vrtdataset.h:674
Definition: vrtdataset.h:560
Definition: vrtdataset.h:537
Definition: vrtdataset.h:205