31 #ifndef VIRTUALDATASET_H_INCLUDED 32 #define VIRTUALDATASET_H_INCLUDED 34 #include "gdal_priv.h" 42 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
44 double *padfX,
double *padfY,
double *padfZ,
46 void* VRTDeserializeWarpedOverviewTransformer(
CPLXMLNode *psTree );
80 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
81 void *pData,
int nBufXSize,
int nBufYSize,
83 int nPixelSpace,
int nLineSpace ) = 0;
85 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
86 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
87 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax ) = 0;
88 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
90 double *pdfMin,
double *pdfMax,
91 double *pdfMean,
double *pdfStdDev,
92 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
93 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
94 double dfMin,
double dfMax,
95 int nBuckets,
int * panHistogram,
96 int bIncludeOutOfRange,
int bApproxOK,
97 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
99 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * ) = 0;
100 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) = 0;
102 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
103 int *pnMaxSize, CPLHashSet* hSetFiles);
105 virtual int IsSimpleSource() {
return FALSE; }
125 int bGeoTransformSet;
126 double adfGeoTransform[6];
130 char *pszGCPProjection;
139 int bCompatibleForDatasetIO;
140 int CheckCompatibleForDatasetIO();
143 virtual int CloseDependentDatasets();
149 void SetNeedsFlush() { bNeedsFlush = TRUE; }
152 void SetWritable(
int bWritable) { this->bWritable = bWritable; }
157 virtual const char *GetProjectionRef(
void);
158 virtual CPLErr SetProjection(
const char * );
159 virtual CPLErr GetGeoTransform(
double * );
160 virtual CPLErr SetGeoTransform(
double * );
162 virtual CPLErr
SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
163 virtual CPLErr
SetMetadataItem(
const char *pszName,
const char *pszValue,
164 const char *pszDomain =
"" );
166 virtual int GetGCPCount();
167 virtual const char *GetGCPProjection();
169 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
170 const char *pszGCPProjection );
173 char **papszOptions=NULL );
175 virtual char **GetFileList();
178 int nXOff,
int nYOff,
int nXSize,
int nYSize,
179 void * pData,
int nBufXSize,
int nBufYSize,
181 int nBandCount,
int *panBandMap,
182 int nPixelSpace,
int nLineSpace,
int nBandSpace);
184 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath);
185 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
194 int nXSize,
int nYSize,
int nBands,
196 static CPLErr Delete(
const char * pszFilename );
215 virtual int CloseDependentDatasets();
225 CPLErr Initialize(
void * );
227 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
228 int,
int *, GDALProgressFunc,
void * );
230 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
231 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
234 char **papszOptions=NULL );
236 virtual char **GetFileList();
238 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
256 int bHideNoDataValue;
257 double dfNoDataValue;
264 char **papszCategoryNames;
271 void Initialize(
int nXSize,
int nYSize );
273 std::vector<VRTOverviewInfo> apoOverviews;
282 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
283 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
285 virtual CPLErr SetNoDataValue(
double );
286 virtual double GetNoDataValue(
int *pbSuccess = NULL );
294 virtual const char *GetUnitType();
295 CPLErr SetUnitType(
const char * );
297 virtual char **GetCategoryNames();
298 virtual CPLErr SetCategoryNames(
char ** );
300 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
301 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
302 const char *pszDomain =
"" );
304 virtual double GetOffset(
int *pbSuccess = NULL );
305 CPLErr SetOffset(
double );
306 virtual double GetScale(
int *pbSuccess = NULL );
307 CPLErr SetScale(
double );
309 virtual int GetOverviewCount();
312 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
313 int nBuckets,
int * panHistogram,
314 int bIncludeOutOfRange,
int bApproxOK,
315 GDALProgressFunc,
void *pProgressData );
317 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
318 int *pnBuckets,
int ** ppanHistogram,
320 GDALProgressFunc,
void *pProgressData);
322 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
323 int nBuckets,
int *panHistogram );
327 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
328 int *pnMaxSize, CPLHashSet* hSetFiles);
330 virtual void SetDescription(
const char * );
333 virtual int GetMaskFlags();
335 virtual CPLErr CreateMaskBand(
int nFlags );
339 void SetIsMaskBand();
341 CPLErr UnsetNoDataValue();
343 virtual int CloseDependentDatasets();
345 virtual int IsSourcedRasterBand() {
return FALSE; }
357 int nRecursionCounter;
359 char **papszSourceList;
361 void Initialize(
int nXSize,
int nYSize );
363 int CanUseSourcesMinMaxImplementations();
372 int nXSize,
int nYSize );
375 int nXSize,
int nYSize );
378 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
382 virtual char **GetMetadataDomainList();
383 virtual const char *GetMetadataItem(
const char * pszName,
384 const char * pszDomain =
"" );
385 virtual char **GetMetadata(
const char * pszDomain =
"" );
386 virtual CPLErr SetMetadata(
char ** papszMetadata,
387 const char * pszDomain =
"" );
388 virtual CPLErr SetMetadataItem(
const char * pszName,
389 const char * pszValue,
390 const char * pszDomain =
"" );
392 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
393 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
395 virtual double GetMinimum(
int *pbSuccess = NULL );
396 virtual double GetMaximum(
int *pbSuccess = NULL );
397 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double* adfMinMax );
398 virtual CPLErr ComputeStatistics(
int bApproxOK,
399 double *pdfMin,
double *pdfMax,
400 double *pdfMean,
double *pdfStdDev,
401 GDALProgressFunc pfnProgress,
void *pProgressData );
402 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
403 int nBuckets,
int * panHistogram,
404 int bIncludeOutOfRange,
int bApproxOK,
405 GDALProgressFunc pfnProgress,
void *pProgressData );
409 int nSrcXOff=-1,
int nSrcYOff=-1,
410 int nSrcXSize=-1,
int nSrcYSize=-1,
411 int nDstXOff=-1,
int nDstYOff=-1,
412 int nDstXSize=-1,
int nDstYSize=-1,
413 const char *pszResampling =
"near",
414 double dfNoDataValue = VRT_NODATA_UNSET);
416 int nSrcXOff=-1,
int nSrcYOff=-1,
417 int nSrcXSize=-1,
int nSrcYSize=-1,
418 int nDstXOff=-1,
int nDstYOff=-1,
419 int nDstXSize=-1,
int nDstYSize=-1,
420 double dfScaleOff=0.0,
421 double dfScaleRatio=1.0,
422 double dfNoDataValue = VRT_NODATA_UNSET,
423 int nColorTableComponent = 0);
426 int nSrcXOff=-1,
int nSrcYOff=-1,
427 int nSrcXSize=-1,
int nSrcYSize=-1,
428 int nDstXOff=-1,
int nDstYOff=-1,
429 int nDstXSize=-1,
int nDstYSize=-1 );
431 CPLErr AddFuncSource( VRTImageReadFunc pfnReadFunc,
void *hCBData,
432 double dfNoDataValue = VRT_NODATA_UNSET );
437 int nSrcXOff,
int nSrcYOff,
438 int nSrcXSize,
int nSrcYSize,
439 int nDstXOff,
int nDstYOff,
440 int nDstXSize,
int nDstYSize);
442 virtual CPLErr IReadBlock(
int,
int,
void * );
444 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
445 int *pnMaxSize, CPLHashSet* hSetFiles);
447 virtual int CloseDependentDatasets();
449 virtual int IsSourcedRasterBand() {
return TRUE; }
463 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
464 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
466 virtual CPLErr IReadBlock(
int,
int,
void * );
467 virtual CPLErr IWriteBlock(
int,
int,
void * );
469 virtual int GetOverviewCount();
489 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
493 static CPLErr AddPixelFunction
494 (
const char *pszFuncName, GDALDerivedPixelFunc pfnPixelFunc);
495 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName);
497 void SetPixelFunctionName(
const char *pszFuncName);
500 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
501 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
513 RawRasterBand *poRawRaster;
515 char *pszSourceFilename;
523 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
524 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
526 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
530 virtual CPLErr IReadBlock(
int,
int,
void * );
531 virtual CPLErr IWriteBlock(
int,
int,
void * );
533 CPLErr SetRawLink(
const char *pszFilename,
534 const char *pszVRTPath,
536 vsi_l_offset nImageOffset,
537 int nPixelOffset,
int nLineOffset,
538 const char *pszByteOrder );
542 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
543 int *pnMaxSize, CPLHashSet* hSetFiles);
552 void *pDeserializerData;
558 char **papszSourceParsers;
560 virtual char **GetMetadataDomainList();
561 virtual char **GetMetadata(
const char * pszDomain =
"" );
562 virtual CPLErr SetMetadata(
char ** papszMetadata,
563 const char * pszDomain =
"" );
566 void AddSourceParser(
const char *pszElementName,
567 VRTSourceParser pfnParser );
594 double dfNoDataValue;
600 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
601 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
605 void SetSrcWindow(
int,
int,
int,
int );
606 void SetDstWindow(
int,
int,
int,
int );
607 void SetNoDataValue(
double dfNoDataValue );
609 int GetSrcDstWindow(
int,
int,
int,
int,
int,
int,
610 int *,
int *,
int *,
int *,
611 int *,
int *,
int *,
int * );
613 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
614 void *pData,
int nBufXSize,
int nBufYSize,
616 int nPixelSpace,
int nLineSpace );
618 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
619 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
620 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
621 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
623 double *pdfMin,
double *pdfMax,
624 double *pdfMean,
double *pdfStdDev,
625 GDALProgressFunc pfnProgress,
void *pProgressData );
626 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
627 double dfMin,
double dfMax,
628 int nBuckets,
int * panHistogram,
629 int bIncludeOutOfRange,
int bApproxOK,
630 GDALProgressFunc pfnProgress,
void *pProgressData );
632 void DstToSrc(
double dfX,
double dfY,
633 double &dfXOut,
double &dfYOut );
634 void SrcToDst(
double dfX,
double dfY,
635 double &dfXOut,
double &dfYOut );
637 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
638 int *pnMaxSize, CPLHashSet* hSetFiles);
640 virtual int IsSimpleSource() {
return TRUE; }
641 virtual const char* GetType() {
return "SimpleSource"; }
645 CPLErr DatasetRasterIO(
646 int nXOff,
int nYOff,
int nXSize,
int nYSize,
647 void * pData,
int nBufXSize,
int nBufYSize,
649 int nBandCount,
int *panBandMap,
650 int nPixelSpace,
int nLineSpace,
int nBandSpace);
661 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
662 void *pData,
int nBufXSize,
int nBufYSize,
664 int nPixelSpace,
int nLineSpace );
666 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
667 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
668 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
669 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
671 double *pdfMin,
double *pdfMax,
672 double *pdfMean,
double *pdfStdDev,
673 GDALProgressFunc pfnProgress,
void *pProgressData );
674 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
675 double dfMin,
double dfMax,
676 int nBuckets,
int * panHistogram,
677 int bIncludeOutOfRange,
int bApproxOK,
678 GDALProgressFunc pfnProgress,
void *pProgressData );
680 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
681 virtual const char* GetType() {
return "AveragedSource"; }
692 VRT_SCALING_EXPONENTIAL,
693 } VRTComplexSourceScaling;
698 VRTComplexSourceScaling eScalingType;
703 int bSrcMinMaxDefined;
710 int nColorTableComponent;
712 CPLErr RasterIOInternal(
int nReqXOff,
int nReqYOff,
713 int nReqXSize,
int nReqYSize,
714 void *pData,
int nOutXSize,
int nOutYSize,
716 int nPixelSpace,
int nLineSpace );
722 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
723 void *pData,
int nBufXSize,
int nBufYSize,
725 int nPixelSpace,
int nLineSpace );
727 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
728 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
729 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
730 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
732 double *pdfMin,
double *pdfMax,
733 double *pdfMean,
double *pdfStdDev,
734 GDALProgressFunc pfnProgress,
void *pProgressData );
735 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
736 double dfMin,
double dfMax,
737 int nBuckets,
int * panHistogram,
738 int bIncludeOutOfRange,
int bApproxOK,
739 GDALProgressFunc pfnProgress,
void *pProgressData );
741 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
742 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
743 virtual const char* GetType() {
return "ComplexSource"; }
745 double LookupValue(
double dfInput );
747 void SetLinearScaling(
double dfOffset,
double dfScale);
748 void SetPowerScaling(
double dfExponent,
753 void SetColorTableComponent(
int nComponent);
755 double *padfLUTInputs;
756 double *padfLUTOutputs;
771 int nSupportedTypesCount;
774 int nExtraEdgePixels;
780 void SetExtraEdgePixels(
int );
781 void SetFilteringDataTypesSupported(
int,
GDALDataType * );
783 virtual CPLErr FilterData(
int nXSize,
int nYSize,
GDALDataType eType,
784 GByte *pabySrcData, GByte *pabyDstData ) = 0;
786 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
787 void *pData,
int nBufXSize,
int nBufYSize,
789 int nPixelSpace,
int nLineSpace );
801 double *padfKernelCoefs;
809 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
810 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
812 virtual CPLErr FilterData(
int nXSize,
int nYSize,
GDALDataType eType,
813 GByte *pabySrcData, GByte *pabyDstData );
815 CPLErr SetKernel(
int nKernelSize,
double *padfCoefs );
816 void SetNormalized(
int );
829 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
830 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
842 virtual CPLErr XMLInit(
CPLXMLNode *,
const char *) {
return CE_Failure; }
843 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
845 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
846 void *pData,
int nBufXSize,
int nBufYSize,
848 int nPixelSpace,
int nLineSpace );
850 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
851 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
852 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
853 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
855 double *pdfMin,
double *pdfMax,
856 double *pdfMean,
double *pdfStdDev,
857 GDALProgressFunc pfnProgress,
void *pProgressData );
858 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
859 double dfMin,
double dfMax,
860 int nBuckets,
int * panHistogram,
861 int bIncludeOutOfRange,
int bApproxOK,
862 GDALProgressFunc pfnProgress,
void *pProgressData );
864 VRTImageReadFunc pfnReadFunc;
GDALDataType
Definition: gdal.h:55
Document node structure.
Definition: cpl_minixml.h:65
Definition: vrtdataset.h:796
Definition: vrtdataset.h:657
Definition: vrtdataset.h:250
virtual CPLErr SetMetadata(char **papszMD, const char *pszDomain="")
Set metadata.
Definition: vrtrasterband.cpp:142
Definition: vrtdataset.h:75
Definition: vrtdataset.h:765
GDALRWFlag
Definition: gdal.h:99
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:162
Definition: vrtdataset.h:354
Definition: vrtdataset.h:119
void GetBlockSize(int *, int *)
Fetch the "natural" block size of this band.
Definition: gdalrasterband.cpp:621
int GetShared()
Returns shared flag.
Definition: gdaldataset.cpp:1092
Definition: vrtdataset.h:51
Convenient string class based on std::string.
Definition: cpl_string.h:226
Definition: vrtdataset.h:823
virtual CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain="")
Set single metadata item.
Definition: vrtrasterband.cpp:155
virtual CPLErr FlushCache()
Flush raster data cache.
Definition: gdalrasterband.cpp:850
Definition: vrtdataset.h:511
int Dereference()
Subtract one from dataset reference count.
Definition: gdaldataset.cpp:1058
Definition: vrtdataset.h:456
Definition: vrtdataset.h:477
Definition: gdal_priv.h:220
High level image warping class.
Definition: gdalwarper.h:326
Definition: vrtdataset.h:836
Definition: vrtdataset.h:695
void GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition: gdaldataset.cpp:2482
Definition: vrtdataset.h:574
Object with metadata.
Definition: gdal_priv.h:109
virtual CPLErr CreateMaskBand(int nFlags)
Adds a mask band to the current band.
Definition: vrtrasterband.cpp:1057
GDALDataset * GetDataset()
Fetch the owning dataset handle.
Definition: gdalrasterband.cpp:2634
A single raster band (or channel).
Definition: gdal_priv.h:475
GDALAccess
Definition: gdal.h:93
Definition: vrtdataset.h:550
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:254
Definition: vrtdataset.h:206
GDALColorInterp
Definition: gdal.h:105
Public (C callable) entry points for virtual GDAL dataset objects.
Format specific driver.
Definition: gdal_priv.h:722
Definition: gdal_priv.h:447
Ground Control Point.
Definition: gdal.h:255