31 #ifndef VIRTUALDATASET_H_INCLUDED 32 #define VIRTUALDATASET_H_INCLUDED 34 #include "gdal_priv.h" 43 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
45 double *padfX,
double *padfY,
double *padfZ,
47 void* VRTDeserializeWarpedOverviewTransformer(
CPLXMLNode *psTree );
82 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
83 void *pData,
int nBufXSize,
int nBufYSize,
88 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
89 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
90 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax ) = 0;
91 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
93 double *pdfMin,
double *pdfMax,
94 double *pdfMean,
double *pdfStdDev,
95 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
96 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
97 double dfMin,
double dfMax,
98 int nBuckets, GUIntBig * panHistogram,
99 int bIncludeOutOfRange,
int bApproxOK,
100 GDALProgressFunc pfnProgress,
void *pProgressData ) = 0;
102 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * ) = 0;
103 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) = 0;
105 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
106 int *pnMaxSize, CPLHashSet* hSetFiles);
108 virtual int IsSimpleSource() {
return FALSE; }
128 int bGeoTransformSet;
129 double adfGeoTransform[6];
133 char *pszGCPProjection;
142 int bCompatibleForDatasetIO;
143 int CheckCompatibleForDatasetIO();
146 virtual int CloseDependentDatasets();
152 void SetNeedsFlush() { bNeedsFlush = TRUE; }
155 void SetWritable(
int bWritable) { this->bWritable = bWritable; }
160 virtual const char *GetProjectionRef(
void);
161 virtual CPLErr SetProjection(
const char * );
162 virtual CPLErr GetGeoTransform(
double * );
163 virtual CPLErr SetGeoTransform(
double * );
165 virtual CPLErr
SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
166 virtual CPLErr
SetMetadataItem(
const char *pszName,
const char *pszValue,
167 const char *pszDomain =
"" );
169 virtual int GetGCPCount();
170 virtual const char *GetGCPProjection();
172 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
173 const char *pszGCPProjection );
176 char **papszOptions=NULL );
178 virtual char **GetFileList();
181 int nXOff,
int nYOff,
int nXSize,
int nYSize,
182 void * pData,
int nBufXSize,
int nBufYSize,
184 int nBandCount,
int *panBandMap,
189 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath);
190 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
195 void UnsetPreservedRelativeFilenames();
201 int nXSize,
int nYSize,
int nBands,
203 static CPLErr Delete(
const char * pszFilename );
223 void CreateImplicitOverviews();
228 virtual int CloseDependentDatasets();
234 CPLErr Initialize(
void * );
236 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
237 int,
int *, GDALProgressFunc,
void * );
239 virtual CPLErr
SetMetadataItem(
const char *pszName,
const char *pszValue,
240 const char *pszDomain =
"" );
242 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
243 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
246 char **papszOptions=NULL );
248 virtual char **GetFileList();
250 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
268 int bHideNoDataValue;
269 double dfNoDataValue;
276 char **papszCategoryNames;
283 void Initialize(
int nXSize,
int nYSize );
285 std::vector<VRTOverviewInfo> apoOverviews;
294 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
295 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
297 virtual CPLErr SetNoDataValue(
double );
298 virtual double GetNoDataValue(
int *pbSuccess = NULL );
306 virtual const char *GetUnitType();
307 CPLErr SetUnitType(
const char * );
309 virtual char **GetCategoryNames();
310 virtual CPLErr SetCategoryNames(
char ** );
312 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" );
313 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
314 const char *pszDomain =
"" );
316 virtual double GetOffset(
int *pbSuccess = NULL );
317 CPLErr SetOffset(
double );
318 virtual double GetScale(
int *pbSuccess = NULL );
319 CPLErr SetScale(
double );
321 virtual int GetOverviewCount();
324 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
325 int nBuckets, GUIntBig * panHistogram,
326 int bIncludeOutOfRange,
int bApproxOK,
327 GDALProgressFunc,
void *pProgressData );
329 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
330 int *pnBuckets, GUIntBig ** ppanHistogram,
332 GDALProgressFunc,
void *pProgressData);
334 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
335 int nBuckets, GUIntBig *panHistogram );
339 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
340 int *pnMaxSize, CPLHashSet* hSetFiles);
342 virtual void SetDescription(
const char * );
345 virtual int GetMaskFlags();
347 virtual CPLErr CreateMaskBand(
int nFlags );
351 void SetIsMaskBand();
353 CPLErr UnsetNoDataValue();
355 virtual int CloseDependentDatasets();
357 virtual int IsSourcedRasterBand() {
return FALSE; }
369 int nRecursionCounter;
371 char **papszSourceList;
373 void Initialize(
int nXSize,
int nYSize );
375 int CanUseSourcesMinMaxImplementations();
384 int nXSize,
int nYSize );
387 int nXSize,
int nYSize );
390 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
395 virtual char **GetMetadataDomainList();
396 virtual const char *GetMetadataItem(
const char * pszName,
397 const char * pszDomain =
"" );
398 virtual char **GetMetadata(
const char * pszDomain =
"" );
399 virtual CPLErr SetMetadata(
char ** papszMetadata,
400 const char * pszDomain =
"" );
401 virtual CPLErr SetMetadataItem(
const char * pszName,
402 const char * pszValue,
403 const char * pszDomain =
"" );
405 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
406 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
408 virtual double GetMinimum(
int *pbSuccess = NULL );
409 virtual double GetMaximum(
int *pbSuccess = NULL );
410 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double* adfMinMax );
411 virtual CPLErr ComputeStatistics(
int bApproxOK,
412 double *pdfMin,
double *pdfMax,
413 double *pdfMean,
double *pdfStdDev,
414 GDALProgressFunc pfnProgress,
void *pProgressData );
415 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
416 int nBuckets, GUIntBig * panHistogram,
417 int bIncludeOutOfRange,
int bApproxOK,
418 GDALProgressFunc pfnProgress,
void *pProgressData );
422 int nSrcXOff=-1,
int nSrcYOff=-1,
423 int nSrcXSize=-1,
int nSrcYSize=-1,
424 int nDstXOff=-1,
int nDstYOff=-1,
425 int nDstXSize=-1,
int nDstYSize=-1,
426 const char *pszResampling =
"near",
427 double dfNoDataValue = VRT_NODATA_UNSET);
429 int nSrcXOff=-1,
int nSrcYOff=-1,
430 int nSrcXSize=-1,
int nSrcYSize=-1,
431 int nDstXOff=-1,
int nDstYOff=-1,
432 int nDstXSize=-1,
int nDstYSize=-1,
433 double dfScaleOff=0.0,
434 double dfScaleRatio=1.0,
435 double dfNoDataValue = VRT_NODATA_UNSET,
436 int nColorTableComponent = 0);
439 int nSrcXOff=-1,
int nSrcYOff=-1,
440 int nSrcXSize=-1,
int nSrcYSize=-1,
441 int nDstXOff=-1,
int nDstYOff=-1,
442 int nDstXSize=-1,
int nDstYSize=-1 );
444 CPLErr AddFuncSource( VRTImageReadFunc pfnReadFunc,
void *hCBData,
445 double dfNoDataValue = VRT_NODATA_UNSET );
450 int nSrcXOff,
int nSrcYOff,
451 int nSrcXSize,
int nSrcYSize,
452 int nDstXOff,
int nDstYOff,
453 int nDstXSize,
int nDstYSize);
455 virtual CPLErr IReadBlock(
int,
int,
void * );
457 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
458 int *pnMaxSize, CPLHashSet* hSetFiles);
460 virtual int CloseDependentDatasets();
462 virtual int IsSourcedRasterBand() {
return TRUE; }
476 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
477 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
479 virtual CPLErr IReadBlock(
int,
int,
void * );
480 virtual CPLErr IWriteBlock(
int,
int,
void * );
482 virtual int GetOverviewCount();
502 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
507 static CPLErr AddPixelFunction
508 (
const char *pszFuncName, GDALDerivedPixelFunc pfnPixelFunc);
509 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName);
511 void SetPixelFunctionName(
const char *pszFuncName);
514 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
515 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
527 RawRasterBand *poRawRaster;
529 char *pszSourceFilename;
537 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
538 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
540 virtual CPLErr IRasterIO(
GDALRWFlag,
int,
int,
int,
int,
545 virtual CPLErr IReadBlock(
int,
int,
void * );
546 virtual CPLErr IWriteBlock(
int,
int,
void * );
548 CPLErr SetRawLink(
const char *pszFilename,
549 const char *pszVRTPath,
551 vsi_l_offset nImageOffset,
552 int nPixelOffset,
int nLineOffset,
553 const char *pszByteOrder );
557 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
558 int *pnMaxSize, CPLHashSet* hSetFiles);
567 void *pDeserializerData;
573 char **papszSourceParsers;
575 virtual char **GetMetadataDomainList();
576 virtual char **GetMetadata(
const char * pszDomain =
"" );
577 virtual CPLErr SetMetadata(
char ** papszMetadata,
578 const char * pszDomain =
"" );
581 void AddSourceParser(
const char *pszElementName,
582 VRTSourceParser pfnParser );
609 double dfNoDataValue;
612 int bRelativeToVRTOri;
619 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
620 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
624 void SetSrcWindow(
int,
int,
int,
int );
625 void SetDstWindow(
int,
int,
int,
int );
626 void SetNoDataValue(
double dfNoDataValue );
627 const CPLString& GetResampling()
const {
return osResampling; }
628 void SetResampling(
const char* pszResampling );
630 int GetSrcDstWindow(
int,
int,
int,
int,
int,
int,
631 double *pdfReqXOff,
double *pdfReqYOff,
632 double *pdfReqXSize,
double *pdfReqYSize,
633 int *,
int *,
int *,
int *,
634 int *,
int *,
int *,
int * );
636 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
637 void *pData,
int nBufXSize,
int nBufYSize,
642 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
643 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
644 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
645 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
647 double *pdfMin,
double *pdfMax,
648 double *pdfMean,
double *pdfStdDev,
649 GDALProgressFunc pfnProgress,
void *pProgressData );
650 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
651 double dfMin,
double dfMax,
652 int nBuckets, GUIntBig * panHistogram,
653 int bIncludeOutOfRange,
int bApproxOK,
654 GDALProgressFunc pfnProgress,
void *pProgressData );
656 void DstToSrc(
double dfX,
double dfY,
657 double &dfXOut,
double &dfYOut );
658 void SrcToDst(
double dfX,
double dfY,
659 double &dfXOut,
double &dfYOut );
661 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
662 int *pnMaxSize, CPLHashSet* hSetFiles);
664 virtual int IsSimpleSource() {
return TRUE; }
665 virtual const char* GetType() {
return "SimpleSource"; }
669 CPLErr DatasetRasterIO(
670 int nXOff,
int nYOff,
int nXSize,
int nYSize,
671 void * pData,
int nBufXSize,
int nBufYSize,
673 int nBandCount,
int *panBandMap,
678 void UnsetPreservedRelativeFilenames();
689 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
690 void *pData,
int nBufXSize,
int nBufYSize,
695 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
696 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
697 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
698 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
700 double *pdfMin,
double *pdfMax,
701 double *pdfMean,
double *pdfStdDev,
702 GDALProgressFunc pfnProgress,
void *pProgressData );
703 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
704 double dfMin,
double dfMax,
705 int nBuckets, GUIntBig * panHistogram,
706 int bIncludeOutOfRange,
int bApproxOK,
707 GDALProgressFunc pfnProgress,
void *pProgressData );
709 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
710 virtual const char* GetType() {
return "AveragedSource"; }
721 VRT_SCALING_EXPONENTIAL,
722 } VRTComplexSourceScaling;
727 VRTComplexSourceScaling eScalingType;
732 int bSrcMinMaxDefined;
739 int nColorTableComponent;
741 CPLErr RasterIOInternal(
int nReqXOff,
int nReqYOff,
742 int nReqXSize,
int nReqYSize,
743 void *pData,
int nOutXSize,
int nOutYSize,
752 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
753 void *pData,
int nBufXSize,
int nBufYSize,
758 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
759 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
760 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
761 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
763 double *pdfMin,
double *pdfMax,
764 double *pdfMean,
double *pdfStdDev,
765 GDALProgressFunc pfnProgress,
void *pProgressData );
766 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
767 double dfMin,
double dfMax,
768 int nBuckets, GUIntBig * panHistogram,
769 int bIncludeOutOfRange,
int bApproxOK,
770 GDALProgressFunc pfnProgress,
void *pProgressData );
772 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
773 virtual CPLErr XMLInit(
CPLXMLNode *,
const char * );
774 virtual const char* GetType() {
return "ComplexSource"; }
776 double LookupValue(
double dfInput );
778 void SetLinearScaling(
double dfOffset,
double dfScale);
779 void SetPowerScaling(
double dfExponent,
784 void SetColorTableComponent(
int nComponent);
786 double *padfLUTInputs;
787 double *padfLUTOutputs;
802 int nSupportedTypesCount;
805 int nExtraEdgePixels;
811 void SetExtraEdgePixels(
int );
812 void SetFilteringDataTypesSupported(
int,
GDALDataType * );
814 virtual CPLErr FilterData(
int nXSize,
int nYSize,
GDALDataType eType,
815 GByte *pabySrcData, GByte *pabyDstData ) = 0;
817 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
818 void *pData,
int nBufXSize,
int nBufYSize,
833 double *padfKernelCoefs;
841 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
842 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
844 virtual CPLErr FilterData(
int nXSize,
int nYSize,
GDALDataType eType,
845 GByte *pabySrcData, GByte *pabyDstData );
847 CPLErr SetKernel(
int nKernelSize,
double *padfCoefs );
848 void SetNormalized(
int );
861 virtual CPLErr XMLInit(
CPLXMLNode *psTree,
const char * );
862 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
874 virtual CPLErr XMLInit(
CPLXMLNode *,
const char *) {
return CE_Failure; }
875 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
877 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
878 void *pData,
int nBufXSize,
int nBufYSize,
883 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess );
884 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess );
885 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
double* adfMinMax );
886 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
888 double *pdfMin,
double *pdfMax,
889 double *pdfMean,
double *pdfStdDev,
890 GDALProgressFunc pfnProgress,
void *pProgressData );
891 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
892 double dfMin,
double dfMax,
893 int nBuckets, GUIntBig * panHistogram,
894 int bIncludeOutOfRange,
int bApproxOK,
895 GDALProgressFunc pfnProgress,
void *pProgressData );
897 VRTImageReadFunc pfnReadFunc;
GDALDataType
Definition: gdal.h:57
Document node structure.
Definition: cpl_minixml.h:65
Definition: vrtdataset.h:828
Definition: vrtdataset.h:685
Definition: vrtdataset.h:262
virtual CPLErr SetMetadata(char **papszMD, const char *pszDomain="")
Set metadata.
Definition: vrtrasterband.cpp:142
Definition: vrtdataset.h:77
Definition: vrtdataset.h:796
GDALRWFlag
Definition: gdal.h:101
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:227
Definition: vrtdataset.h:366
Definition: vrtdataset.h:122
void GetBlockSize(int *, int *)
Fetch the "natural" block size of this band.
Definition: gdalrasterband.cpp:684
int GetShared()
Returns shared flag.
Definition: gdaldataset.cpp:1136
Definition: vrtdataset.h:53
Convenient string class based on std::string.
Definition: cpl_string.h:236
Definition: vrtdataset.h:855
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:913
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition: gdal.h:245
Definition: vrtdataset.h:525
int Dereference()
Subtract one from dataset reference count.
Definition: gdaldataset.cpp:1102
Definition: vrtdataset.h:469
Definition: vrtdataset.h:490
Definition: gdal_priv.h:223
High level image warping class.
Definition: gdalwarper.h:348
Definition: vrtdataset.h:868
Definition: vrtdataset.h:724
void GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition: gdaldataset.cpp:2771
Definition: vrtdataset.h:589
Object with metadata.
Definition: gdal_priv.h:112
virtual CPLErr CreateMaskBand(int nFlags)
Adds a mask band to the current band.
Definition: vrtrasterband.cpp:1059
GDALDataset * GetDataset()
Fetch the owning dataset handle.
Definition: gdalrasterband.cpp:2813
A single raster band (or channel).
Definition: gdal_priv.h:611
GDALAccess
Definition: gdal.h:95
Definition: vrtdataset.h:565
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:276
Definition: vrtdataset.h:213
GDALColorInterp
Definition: gdal.h:170
Public (C callable) entry points for virtual GDAL dataset objects.
Format specific driver.
Definition: gdal_priv.h:877
Definition: gdal_priv.h:582
Ground Control Point.
Definition: gdal.h:442