31 #ifndef VIRTUALDATASET_H_INCLUDED
32 #define VIRTUALDATASET_H_INCLUDED
34 #include "gdal_priv.h"
37 #include "cpl_hash_set.h"
39 int VRTApplyMetadata( CPLXMLNode *, GDALMajorObject * );
40 CPLXMLNode *VRTSerializeMetadata( GDALMajorObject * );
42 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
44 double *padfX,
double *padfY,
double *padfZ,
46 void* VRTDeserializeWarpedOverviewTransformer( CPLXMLNode *psTree );
56 GDALRasterBand *poBand;
63 else if( poBand->GetDataset()->GetShared() )
64 GDALClose( (GDALDatasetH) poBand->GetDataset() );
66 poBand->GetDataset()->Dereference();
80 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
81 void *pData,
int nBufXSize,
int nBufYSize,
82 GDALDataType eBufType,
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; }
108 typedef VRTSource *(*VRTSourceParser)(CPLXMLNode *,
const char *);
110 VRTSource *VRTParseCoreSources( CPLXMLNode *psTree,
const char * );
111 VRTSource *VRTParseFilterSources( CPLXMLNode *psTree,
const char * );
125 int bGeoTransformSet;
126 double adfGeoTransform[6];
129 GDAL_GCP *pasGCPList;
130 char *pszGCPProjection;
139 int bCompatibleForDatasetIO;
140 int CheckCompatibleForDatasetIO();
143 virtual int CloseDependentDatasets();
149 void SetNeedsFlush() { bNeedsFlush = TRUE; }
150 virtual void FlushCache();
152 void SetWritable(
int bWritable) { this->bWritable = bWritable; }
154 virtual CPLErr CreateMaskBand(
int nFlags );
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();
168 virtual const GDAL_GCP *GetGCPs();
169 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
170 const char *pszGCPProjection );
172 virtual CPLErr AddBand( GDALDataType eType,
173 char **papszOptions=NULL );
175 virtual char **GetFileList();
177 virtual CPLErr IRasterIO( GDALRWFlag eRWFlag,
178 int nXOff,
int nYOff,
int nXSize,
int nYSize,
179 void * pData,
int nBufXSize,
int nBufYSize,
180 GDALDataType eBufType,
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 * );
188 GDALDataset* GetSingleSimpleSource();
190 static int Identify( GDALOpenInfo * );
191 static GDALDataset *Open( GDALOpenInfo * );
192 static GDALDataset *OpenXML(
const char *,
const char * = NULL, GDALAccess eAccess = GA_ReadOnly );
193 static GDALDataset *Create(
const char * pszName,
194 int nXSize,
int nYSize,
int nBands,
195 GDALDataType eType,
char ** papszOptions );
196 static CPLErr Delete(
const char * pszFilename );
203 class GDALWarpOperation;
210 GDALWarpOperation *poWarper;
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 * );
233 virtual CPLErr AddBand( GDALDataType eType,
234 char **papszOptions=NULL );
236 virtual char **GetFileList();
238 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
240 void GetBlockSize(
int *,
int * );
256 int bHideNoDataValue;
257 double dfNoDataValue;
259 GDALColorTable *poColorTable;
261 GDALColorInterp eColorInterp;
264 char **papszCategoryNames;
269 CPLXMLNode *psSavedHistograms;
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 );
288 virtual CPLErr SetColorTable( GDALColorTable * );
289 virtual GDALColorTable *GetColorTable();
291 virtual CPLErr SetColorInterpretation( GDALColorInterp );
292 virtual GDALColorInterp GetColorInterpretation();
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();
310 virtual GDALRasterBand *GetOverview(
int);
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 );
325 CPLErr CopyCommonInfoFrom( GDALRasterBand * );
327 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
328 int *pnMaxSize, CPLHashSet* hSetFiles);
330 virtual void SetDescription(
const char * );
332 virtual GDALRasterBand *GetMaskBand();
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;
358 CPLString osLastLocationInfo;
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,
379 void *,
int,
int, GDALDataType,
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 );
408 CPLErr AddSimpleSource( GDALRasterBand *poSrcBand,
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);
415 CPLErr AddComplexSource( GDALRasterBand *poSrcBand,
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);
425 CPLErr AddMaskBandSource( GDALRasterBand *poSrcBand,
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 );
435 GDALRasterBand *poSrcBand,
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; }
460 GDALDataType eType = GDT_Unknown );
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();
470 virtual GDALRasterBand *GetOverview(
int);
482 GDALDataType eSourceTransferType;
486 GDALDataType eType,
int nXSize,
int nYSize);
489 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
490 void *,
int,
int, GDALDataType,
493 static CPLErr AddPixelFunction
494 (
const char *pszFuncName, GDALDerivedPixelFunc pfnPixelFunc);
495 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName);
497 void SetPixelFunctionName(
const char *pszFuncName);
498 void SetSourceTransferType(GDALDataType eDataType);
500 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
501 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
513 RawRasterBand *poRawRaster;
515 char *pszSourceFilename;
520 GDALDataType eType = GDT_Unknown );
523 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
524 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
526 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
527 void *,
int,
int, GDALDataType,
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 =
"" );
565 VRTSource *ParseSource( CPLXMLNode *psSrc,
const char *pszVRTPath );
566 void AddSourceParser(
const char *pszElementName,
567 VRTSourceParser pfnParser );
577 GDALRasterBand *poRasterBand;
581 GDALRasterBand *poMaskBandMainBand;
594 double dfNoDataValue;
600 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * );
601 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath );
603 void SetSrcBand( GDALRasterBand * );
604 void SetSrcMaskBand( GDALRasterBand * );
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,
615 GDALDataType eBufType,
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"; }
643 GDALRasterBand* GetBand();
645 CPLErr DatasetRasterIO(
646 int nXOff,
int nYOff,
int nXSize,
int nYSize,
647 void * pData,
int nBufXSize,
int nBufYSize,
648 GDALDataType eBufType,
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,
663 GDALDataType eBufType,
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,
715 GDALDataType eBufType,
716 int nPixelSpace,
int nLineSpace );
722 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
723 void *pData,
int nBufXSize,
int nBufYSize,
724 GDALDataType eBufType,
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;
768 int IsTypeSupported( GDALDataType eType );
771 int nSupportedTypesCount;
772 GDALDataType aeSupportedTypes[20];
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,
788 GDALDataType eBufType,
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,
847 GDALDataType eBufType,
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;
Definition: vrtdataset.h:796
Definition: vrtdataset.h:657
Definition: vrtdataset.h:250
Definition: vrtdataset.h:75
Definition: vrtdataset.h:765
Definition: vrtdataset.h:354
Definition: vrtdataset.h:119
Definition: vrtdataset.h:51
Definition: vrtdataset.h:823
Definition: vrtdataset.h:511
Definition: vrtdataset.h:456
Definition: vrtdataset.h:477
Definition: vrtdataset.h:836
Definition: vrtdataset.h:695
Definition: vrtdataset.h:574
Definition: vrtdataset.h:550
Definition: vrtdataset.h:206