30 #ifndef VIRTUALDATASET_H_INCLUDED
31 #define VIRTUALDATASET_H_INCLUDED
33 #include "gdal_priv.h"
41 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
43 double *padfX,
double *padfY,
double *padfZ,
45 void* VRTDeserializeWarpedOverviewTransformer(
CPLXMLNode *psTree );
79 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
80 void *pData,
int nBufXSize,
int nBufYSize,
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; }
124 int bGeoTransformSet;
125 double adfGeoTransform[6];
129 char *pszGCPProjection;
138 int bCompatibleForDatasetIO;
139 int CheckCompatibleForDatasetIO();
148 void SetNeedsFlush() { bNeedsFlush = TRUE; }
151 void SetWritable(
int bWritable) { this->bWritable = bWritable; }
161 virtual CPLErr
SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
162 virtual CPLErr
SetMetadataItem(
const char *pszName,
const char *pszValue,
163 const char *pszDomain =
"" );
169 const char *pszGCPProjection );
172 char **papszOptions=NULL );
177 int nXOff,
int nYOff,
int nXSize,
int nYSize,
178 void * pData,
int nBufXSize,
int nBufYSize,
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 * );
193 int nXSize,
int nYSize,
int nBands,
195 static CPLErr Delete(
const char * pszFilename );
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 * );
233 char **papszOptions=NULL );
237 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
255 int bHideNoDataValue;
256 double dfNoDataValue;
263 char **papszCategoryNames;
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 );
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 );
305 virtual double GetScale(
int *pbSuccess = NULL );
311 virtual CPLErr
GetHistogram(
double dfMin,
double dfMax,
312 int nBuckets,
int * panHistogram,
313 int bIncludeOutOfRange,
int bApproxOK,
314 GDALProgressFunc,
void *pProgressData );
317 int *pnBuckets,
int ** ppanHistogram,
319 GDALProgressFunc,
void *pProgressData);
322 int nBuckets,
int *panHistogram );
326 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
327 int *pnMaxSize, CPLHashSet* hSetFiles);
338 void SetIsMaskBand();
340 CPLErr UnsetNoDataValue();
342 virtual int CloseDependentDatasets();
344 virtual int IsSourcedRasterBand() {
return FALSE; }
354 int bAntiRecursionFlag;
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,
378 const char * pszDomain =
"" );
379 virtual char **
GetMetadata(
const char * pszDomain =
"" );
381 const char * pszDomain =
"" );
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 );
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 );
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);
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);
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; }
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 * );
476 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
480 static CPLErr AddPixelFunction
481 (
const char *pszFuncName, GDALDerivedPixelFunc pfnPixelFunc);
482 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName);
484 void SetPixelFunctionName(
const char *pszFuncName);
487 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
488 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
500 RawRasterBand *poRawRaster;
502 char *pszSourceFilename;
510 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
511 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
513 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
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 =
"" );
549 const char * pszDomain =
"" );
552 void AddSourceParser(
const char *pszElementName,
553 VRTSourceParser pfnParser );
580 double dfNoDataValue;
586 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
587 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
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,
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"; }
631 CPLErr DatasetRasterIO(
632 int nXOff,
int nYOff,
int nXSize,
int nYSize,
633 void * pData,
int nBufXSize,
int nBufYSize,
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,
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,
681 int nPixelSpace,
int nLineSpace );
687 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
688 void *pData,
int nBufXSize,
int nBufYSize,
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;
731 int nSupportedTypesCount;
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,
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,
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;