31 #ifndef VIRTUALDATASET_H_INCLUDED
32 #define VIRTUALDATASET_H_INCLUDED
36 #include "cpl_hash_set.h"
38 #include "gdal_priv.h"
44 int VRTApplyMetadata( CPLXMLNode *, GDALMajorObject * );
45 CPLXMLNode *VRTSerializeMetadata( GDALMajorObject * );
46 CPLErr GDALRegisterDefaultPixelFunc();
49 int VRTWarpedOverviewTransform(
void *pTransformArg,
int bDstToSrc,
51 double *padfX,
double *padfY,
double *padfZ,
53 void* VRTDeserializeWarpedOverviewTransformer( CPLXMLNode *psTree );
64 GDALRasterBand *poBand;
71 else if( poBand->GetDataset()->GetShared() )
72 GDALClose( poBand->GetDataset() );
74 poBand->GetDataset()->Dereference();
87 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
88 void *pData,
int nBufXSize,
int nBufYSize,
89 GDALDataType eBufType,
90 GSpacing nPixelSpace, GSpacing nLineSpace,
91 GDALRasterIOExtraArg* psExtraArg ) = 0;
93 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
94 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) = 0;
95 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
96 double* adfMinMax ) = 0;
97 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
99 double *pdfMin,
double *pdfMax,
100 double *pdfMean,
double *pdfStdDev,
101 GDALProgressFunc pfnProgress,
102 void *pProgressData ) = 0;
103 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
104 double dfMin,
double dfMax,
105 int nBuckets, GUIntBig * panHistogram,
106 int bIncludeOutOfRange,
int bApproxOK,
107 GDALProgressFunc pfnProgress,
108 void *pProgressData ) = 0;
110 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * ) = 0;
111 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) = 0;
113 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
114 int *pnMaxSize, CPLHashSet* hSetFiles);
116 virtual int IsSimpleSource() {
return FALSE; }
119 typedef VRTSource *(*VRTSourceParser)(CPLXMLNode *,
const char *);
121 VRTSource *VRTParseCoreSources( CPLXMLNode *psTree,
const char * );
122 VRTSource *VRTParseFilterSources( CPLXMLNode *psTree,
const char * );
134 char *m_pszProjection;
136 int m_bGeoTransformSet;
137 double m_adfGeoTransform[6];
140 GDAL_GCP *m_pasGCPList;
141 char *m_pszGCPProjection;
150 int m_bCompatibleForDatasetIO;
151 int CheckCompatibleForDatasetIO();
152 std::vector<GDALDataset*> m_apoOverviews;
153 std::vector<GDALDataset*> m_apoOverviewsBak;
154 char **m_papszXMLVRTMetadata;
157 virtual int CloseDependentDatasets() CPL_OVERRIDE;
163 void SetNeedsFlush() { m_bNeedsFlush = TRUE; }
164 virtual void FlushCache() CPL_OVERRIDE;
166 void SetWritable(
int bWritableIn) { m_bWritable = bWritableIn; }
168 virtual CPLErr CreateMaskBand(
int nFlags ) CPL_OVERRIDE;
171 virtual const char *GetProjectionRef() CPL_OVERRIDE;
172 virtual CPLErr SetProjection(
const char * ) CPL_OVERRIDE;
173 virtual CPLErr GetGeoTransform(
double * ) CPL_OVERRIDE;
174 virtual CPLErr SetGeoTransform(
double * ) CPL_OVERRIDE;
176 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" ) CPL_OVERRIDE;
177 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
178 const char *pszDomain =
"" ) CPL_OVERRIDE;
180 virtual char** GetMetadata(
const char *pszDomain =
"" ) CPL_OVERRIDE;
182 virtual int GetGCPCount() CPL_OVERRIDE;
183 virtual const char *GetGCPProjection() CPL_OVERRIDE;
184 virtual const GDAL_GCP *GetGCPs() CPL_OVERRIDE;
185 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
186 const char *pszGCPProjection ) CPL_OVERRIDE;
188 virtual CPLErr AddBand( GDALDataType eType,
189 char **papszOptions=NULL ) CPL_OVERRIDE;
191 virtual char **GetFileList() CPL_OVERRIDE;
193 virtual CPLErr IRasterIO( GDALRWFlag eRWFlag,
194 int nXOff,
int nYOff,
int nXSize,
int nYSize,
195 void * pData,
int nBufXSize,
int nBufYSize,
196 GDALDataType eBufType,
197 int nBandCount,
int *panBandMap,
198 GSpacing nPixelSpace, GSpacing nLineSpace,
200 GDALRasterIOExtraArg* psExtraArg) CPL_OVERRIDE;
202 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath);
203 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
205 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
206 int,
int *, GDALProgressFunc,
void * ) CPL_OVERRIDE;
209 GDALDataset* GetSingleSimpleSource();
210 void BuildVirtualOverviews();
212 void UnsetPreservedRelativeFilenames();
214 static int Identify( GDALOpenInfo * );
215 static GDALDataset *Open( GDALOpenInfo * );
216 static GDALDataset *OpenXML(
const char *,
const char * = NULL,
217 GDALAccess eAccess = GA_ReadOnly );
218 static GDALDataset *Create(
const char * pszName,
219 int nXSize,
int nYSize,
int nBands,
220 GDALDataType eType,
char ** papszOptions );
221 static CPLErr Delete(
const char * pszFilename );
228 class GDALWarpOperation;
235 GDALWarpOperation *m_poWarper;
237 int m_nOverviewCount;
241 void CreateImplicitOverviews();
243 struct VerticalShiftGrid
248 double dfToMeterDest;
249 CPLStringList aosOptions;
251 std::vector<VerticalShiftGrid> m_aoVerticalShiftGrids;
256 virtual int CloseDependentDatasets() CPL_OVERRIDE;
262 CPLErr Initialize(
void * );
264 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
265 int,
int *, GDALProgressFunc,
void * ) CPL_OVERRIDE;
267 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
268 const char *pszDomain =
"" ) CPL_OVERRIDE;
270 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
271 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
273 virtual CPLErr AddBand( GDALDataType eType,
274 char **papszOptions=NULL ) CPL_OVERRIDE;
276 virtual char **GetFileList() CPL_OVERRIDE;
278 CPLErr ProcessBlock(
int iBlockX,
int iBlockY );
280 void GetBlockSize(
int *,
int * );
282 void SetApplyVerticalShiftGrid(
const char* pszVGrids,
285 double dfToMeterDest,
286 char** papszOptions );
293 class GDALPansharpenOperation;
298 GTAdjust_Intersection,
300 GTAdjust_NoneWithoutWarning
309 GDALPansharpenOperation* m_poPansharpener;
311 std::vector<VRTPansharpenedDataset*> m_apoOverviewDatasets;
313 std::map<CPLString,CPLString> m_oMapToRelativeFilenames;
315 int m_bLoadingOtherBands;
317 GByte *m_pabyLastBufferBandRasterIO;
318 int m_nLastBandRasterIOXOff;
319 int m_nLastBandRasterIOYOff;
320 int m_nLastBandRasterIOXSize;
321 int m_nLastBandRasterIOYSize;
322 GDALDataType m_eLastBandRasterIODataType;
324 GTAdjustment m_eGTAdjustment;
325 int m_bNoDataDisabled;
327 std::vector<GDALDataset*> m_apoDatasetsToClose;
330 virtual int CloseDependentDatasets() CPL_OVERRIDE;
336 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
337 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
339 CPLErr XMLInit( CPLXMLNode *psTree,
const char *pszVRTPath,
340 GDALRasterBandH hPanchroBandIn,
341 int nInputSpectralBandsIn,
342 GDALRasterBandH* pahInputSpectralBandsIn );
344 virtual CPLErr AddBand( GDALDataType eType,
345 char **papszOptions=NULL ) CPL_OVERRIDE;
347 virtual char **GetFileList() CPL_OVERRIDE;
349 virtual CPLErr IRasterIO( GDALRWFlag eRWFlag,
350 int nXOff,
int nYOff,
int nXSize,
int nYSize,
351 void * pData,
int nBufXSize,
int nBufYSize,
352 GDALDataType eBufType,
353 int nBandCount,
int *panBandMap,
354 GSpacing nPixelSpace, GSpacing nLineSpace,
356 GDALRasterIOExtraArg* psExtraArg) CPL_OVERRIDE;
358 void GetBlockSize(
int *,
int * );
360 GDALPansharpenOperation* GetPansharpener() {
return m_poPansharpener; }
375 int m_bNoDataValueSet;
377 int m_bHideNoDataValue;
378 double m_dfNoDataValue;
380 GDALColorTable *m_poColorTable;
382 GDALColorInterp m_eColorInterp;
385 char **m_papszCategoryNames;
390 CPLXMLNode *m_psSavedHistograms;
392 void Initialize(
int nXSize,
int nYSize );
394 std::vector<VRTOverviewInfo> m_apoOverviews;
403 virtual CPLErr XMLInit( CPLXMLNode *,
const char * );
404 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath );
406 virtual CPLErr SetNoDataValue(
double ) CPL_OVERRIDE;
407 virtual double GetNoDataValue(
int *pbSuccess = NULL ) CPL_OVERRIDE;
408 virtual CPLErr DeleteNoDataValue() CPL_OVERRIDE;
410 virtual CPLErr SetColorTable( GDALColorTable * ) CPL_OVERRIDE;
411 virtual GDALColorTable *GetColorTable() CPL_OVERRIDE;
413 virtual CPLErr SetColorInterpretation( GDALColorInterp ) CPL_OVERRIDE;
414 virtual GDALColorInterp GetColorInterpretation() CPL_OVERRIDE;
416 virtual const char *GetUnitType() CPL_OVERRIDE;
417 CPLErr SetUnitType(
const char * ) CPL_OVERRIDE;
419 virtual char **GetCategoryNames() CPL_OVERRIDE;
420 virtual CPLErr SetCategoryNames(
char ** ) CPL_OVERRIDE;
422 virtual CPLErr SetMetadata(
char **papszMD,
const char *pszDomain =
"" ) CPL_OVERRIDE;
423 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
424 const char *pszDomain =
"" ) CPL_OVERRIDE;
426 virtual double GetOffset(
int *pbSuccess = NULL ) CPL_OVERRIDE;
427 CPLErr SetOffset(
double ) CPL_OVERRIDE;
428 virtual double GetScale(
int *pbSuccess = NULL ) CPL_OVERRIDE;
429 CPLErr SetScale(
double ) CPL_OVERRIDE;
431 virtual int GetOverviewCount() CPL_OVERRIDE;
432 virtual GDALRasterBand *GetOverview(
int) CPL_OVERRIDE;
434 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
435 int nBuckets, GUIntBig * panHistogram,
436 int bIncludeOutOfRange,
int bApproxOK,
437 GDALProgressFunc,
void *pProgressData ) CPL_OVERRIDE;
439 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
440 int *pnBuckets, GUIntBig ** ppanHistogram,
442 GDALProgressFunc,
void *pProgressData) CPL_OVERRIDE;
444 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
445 int nBuckets, GUIntBig *panHistogram ) CPL_OVERRIDE;
447 CPLErr CopyCommonInfoFrom( GDALRasterBand * );
449 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
450 int *pnMaxSize, CPLHashSet* hSetFiles);
452 virtual void SetDescription(
const char * ) CPL_OVERRIDE;
454 virtual GDALRasterBand *GetMaskBand() CPL_OVERRIDE;
455 virtual int GetMaskFlags() CPL_OVERRIDE;
457 virtual CPLErr CreateMaskBand(
int nFlags ) CPL_OVERRIDE;
461 void SetIsMaskBand();
463 CPLErr UnsetNoDataValue();
465 virtual int CloseDependentDatasets();
467 virtual int IsSourcedRasterBand() {
return FALSE; }
468 virtual int IsPansharpenRasterBand() {
return FALSE; }
480 int m_nRecursionCounter;
481 CPLString m_osLastLocationInfo;
482 char **m_papszSourceList;
484 bool CanUseSourcesMinMaxImplementations();
490 int bSkipBufferInitialization;
494 int nXSize,
int nYSize );
497 int nXSize,
int nYSize );
500 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
501 void *,
int,
int, GDALDataType,
502 GSpacing nPixelSpace, GSpacing nLineSpace,
503 GDALRasterIOExtraArg* psExtraArg) CPL_OVERRIDE;
505 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
506 int nXSize,
int nYSize,
508 double* pdfDataPct) CPL_OVERRIDE;
510 virtual char **GetMetadataDomainList() CPL_OVERRIDE;
511 virtual const char *GetMetadataItem(
const char * pszName,
512 const char * pszDomain =
"" ) CPL_OVERRIDE;
513 virtual char **GetMetadata(
const char * pszDomain =
"" ) CPL_OVERRIDE;
514 virtual CPLErr SetMetadata(
char ** papszMetadata,
515 const char * pszDomain =
"" ) CPL_OVERRIDE;
516 virtual CPLErr SetMetadataItem(
const char * pszName,
517 const char * pszValue,
518 const char * pszDomain =
"" ) CPL_OVERRIDE;
520 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
521 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
523 virtual double GetMinimum(
int *pbSuccess = NULL ) CPL_OVERRIDE;
524 virtual double GetMaximum(
int *pbSuccess = NULL ) CPL_OVERRIDE;
525 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double* adfMinMax ) CPL_OVERRIDE;
526 virtual CPLErr ComputeStatistics(
int bApproxOK,
527 double *pdfMin,
double *pdfMax,
528 double *pdfMean,
double *pdfStdDev,
529 GDALProgressFunc pfnProgress,
530 void *pProgressData ) CPL_OVERRIDE;
531 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
532 int nBuckets, GUIntBig * panHistogram,
533 int bIncludeOutOfRange,
int bApproxOK,
534 GDALProgressFunc pfnProgress,
535 void *pProgressData ) CPL_OVERRIDE;
538 CPLErr AddSimpleSource( GDALRasterBand *poSrcBand,
539 double dfSrcXOff=-1,
double dfSrcYOff=-1,
540 double dfSrcXSize=-1,
double dfSrcYSize=-1,
541 double dfDstXOff=-1,
double dfDstYOff=-1,
542 double dfDstXSize=-1,
double dfDstYSize=-1,
543 const char *pszResampling =
"near",
545 CPLErr AddComplexSource( GDALRasterBand *poSrcBand,
546 double dfSrcXOff=-1,
double dfSrcYOff=-1,
547 double dfSrcXSize=-1,
double dfSrcYSize=-1,
548 double dfDstXOff=-1,
double dfDstYOff=-1,
549 double dfDstXSize=-1,
double dfDstYSize=-1,
550 double dfScaleOff=0.0,
551 double dfScaleRatio=1.0,
553 int nColorTableComponent = 0);
555 CPLErr AddMaskBandSource( GDALRasterBand *poSrcBand,
556 double dfSrcXOff=-1,
double dfSrcYOff=-1,
557 double dfSrcXSize=-1,
558 double dfSrcYSize=-1,
559 double dfDstXOff=-1,
double dfDstYOff=-1,
560 double dfDstXSize=-1,
561 double dfDstYSize=-1 );
567 GDALRasterBand *poSrcBand,
569 double dfSrcXOff,
double dfSrcYOff,
570 double dfSrcXSize,
double dfSrcYSize,
571 double dfDstXOff,
double dfDstYOff,
572 double dfDstXSize,
double dfDstYSize );
574 virtual CPLErr IReadBlock(
int,
int,
void * ) CPL_OVERRIDE;
576 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
577 int *pnMaxSize, CPLHashSet* hSetFiles) CPL_OVERRIDE;
579 virtual int CloseDependentDatasets() CPL_OVERRIDE;
581 virtual int IsSourcedRasterBand() CPL_OVERRIDE {
return TRUE; }
592 GDALDataType eType = GDT_Unknown );
595 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
596 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
598 virtual CPLErr IReadBlock(
int,
int,
void * ) CPL_OVERRIDE;
599 virtual CPLErr IWriteBlock(
int,
int,
void * ) CPL_OVERRIDE;
601 virtual int GetOverviewCount() CPL_OVERRIDE;
602 virtual GDALRasterBand *GetOverview(
int) CPL_OVERRIDE;
610 int m_nIndexAsPansharpenedBand;
614 GDALDataset *poDS,
int nBand,
615 GDALDataType eDataType = GDT_Unknown );
618 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
619 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
621 virtual CPLErr IReadBlock(
int,
int,
void * ) CPL_OVERRIDE;
623 virtual CPLErr IRasterIO( GDALRWFlag eRWFlag,
624 int nXOff,
int nYOff,
int nXSize,
int nYSize,
625 void * pData,
int nBufXSize,
int nBufYSize,
626 GDALDataType eBufType,
627 GSpacing nPixelSpace, GSpacing nLineSpace,
628 GDALRasterIOExtraArg* psExtraArg) CPL_OVERRIDE;
630 virtual int GetOverviewCount() CPL_OVERRIDE;
631 virtual GDALRasterBand *GetOverview(
int) CPL_OVERRIDE;
633 virtual int IsPansharpenRasterBand() CPL_OVERRIDE {
return TRUE; }
635 void SetIndexAsPansharpenedBand(
int nIdx )
636 { m_nIndexAsPansharpenedBand = nIdx; }
637 int GetIndexAsPansharpenedBand()
const
638 {
return m_nIndexAsPansharpenedBand; }
645 class VRTDerivedRasterBandPrivateData;
649 VRTDerivedRasterBandPrivateData* m_poPrivate;
650 bool InitializePython();
654 GDALDataType eSourceTransferType;
658 GDALDataType eType,
int nXSize,
int nYSize );
661 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
662 void *,
int,
int, GDALDataType,
663 GSpacing nPixelSpace, GSpacing nLineSpace,
664 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
666 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
667 int nXSize,
int nYSize,
669 double* pdfDataPct) CPL_OVERRIDE;
671 static CPLErr AddPixelFunction(
const char *pszFuncName,
672 GDALDerivedPixelFunc pfnPixelFunc );
673 static GDALDerivedPixelFunc GetPixelFunction(
const char *pszFuncName );
675 void SetPixelFunctionName(
const char *pszFuncName );
676 void SetSourceTransferType( GDALDataType eDataType );
678 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
679 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
681 virtual double GetMinimum(
int *pbSuccess = NULL ) CPL_OVERRIDE;
682 virtual double GetMaximum(
int *pbSuccess = NULL ) CPL_OVERRIDE;
683 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double* adfMinMax ) CPL_OVERRIDE;
684 virtual CPLErr ComputeStatistics(
int bApproxOK,
685 double *pdfMin,
double *pdfMax,
686 double *pdfMean,
double *pdfStdDev,
687 GDALProgressFunc pfnProgress,
688 void *pProgressData ) CPL_OVERRIDE;
689 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
690 int nBuckets, GUIntBig * panHistogram,
691 int bIncludeOutOfRange,
int bApproxOK,
692 GDALProgressFunc pfnProgress,
693 void *pProgressData ) CPL_OVERRIDE;
695 static void Cleanup();
706 RawRasterBand *m_poRawRaster;
708 char *m_pszSourceFilename;
709 int m_bRelativeToVRT;
713 GDALDataType eType = GDT_Unknown );
716 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
717 virtual CPLXMLNode * SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
719 virtual CPLErr IRasterIO( GDALRWFlag,
int,
int,
int,
int,
720 void *,
int,
int, GDALDataType,
721 GSpacing nPixelSpace, GSpacing nLineSpace,
722 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
724 virtual CPLErr IReadBlock(
int,
int,
void * ) CPL_OVERRIDE;
725 virtual CPLErr IWriteBlock(
int,
int,
void * ) CPL_OVERRIDE;
727 CPLErr SetRawLink(
const char *pszFilename,
728 const char *pszVRTPath,
730 vsi_l_offset nImageOffset,
731 int nPixelOffset,
int nLineOffset,
732 const char *pszByteOrder );
736 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
737 int *pnMaxSize, CPLHashSet* hSetFiles ) CPL_OVERRIDE;
750 char **papszSourceParsers;
752 virtual char **GetMetadataDomainList() CPL_OVERRIDE;
753 virtual char **GetMetadata(
const char * pszDomain =
"" ) CPL_OVERRIDE;
754 virtual CPLErr SetMetadata(
char ** papszMetadata,
755 const char * pszDomain =
"" ) CPL_OVERRIDE;
757 VRTSource *ParseSource( CPLXMLNode *psSrc,
const char *pszVRTPath );
758 void AddSourceParser(
const char *pszElementName,
759 VRTSourceParser pfnParser );
771 GDALRasterBand *m_poRasterBand;
775 GDALRasterBand *m_poMaskBandMainBand;
788 double m_dfNoDataValue;
789 CPLString m_osResampling;
793 int m_bRelativeToVRTOri;
794 CPLString m_osSourceFileNameOri;
796 int NeedMaxValAdjustment()
const;
801 double dfXDstRatio,
double dfYDstRatio );
804 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * ) CPL_OVERRIDE;
805 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
807 void SetSrcBand( GDALRasterBand * );
808 void SetSrcMaskBand( GDALRasterBand * );
809 void SetSrcWindow(
double,
double,
double,
double );
810 void SetDstWindow(
double,
double,
double,
double );
811 void SetNoDataValue(
double dfNoDataValue );
812 const CPLString& GetResampling()
const {
return m_osResampling; }
813 void SetResampling(
const char* pszResampling );
815 int GetSrcDstWindow(
int,
int,
int,
int,
int,
int,
816 double *pdfReqXOff,
double *pdfReqYOff,
817 double *pdfReqXSize,
double *pdfReqYSize,
818 int *,
int *,
int *,
int *,
819 int *,
int *,
int *,
int * );
821 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
822 void *pData,
int nBufXSize,
int nBufYSize,
823 GDALDataType eBufType,
824 GSpacing nPixelSpace, GSpacing nLineSpace,
825 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
827 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
828 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
829 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
830 double* adfMinMax ) CPL_OVERRIDE;
831 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
833 double *pdfMin,
double *pdfMax,
834 double *pdfMean,
double *pdfStdDev,
835 GDALProgressFunc pfnProgress,
836 void *pProgressData ) CPL_OVERRIDE;
837 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
838 double dfMin,
double dfMax,
839 int nBuckets, GUIntBig * panHistogram,
840 int bIncludeOutOfRange,
int bApproxOK,
841 GDALProgressFunc pfnProgress,
842 void *pProgressData ) CPL_OVERRIDE;
844 void DstToSrc(
double dfX,
double dfY,
845 double &dfXOut,
double &dfYOut );
846 void SrcToDst(
double dfX,
double dfY,
847 double &dfXOut,
double &dfYOut );
849 virtual void GetFileList(
char*** ppapszFileList,
int *pnSize,
850 int *pnMaxSize, CPLHashSet* hSetFiles ) CPL_OVERRIDE;
852 virtual int IsSimpleSource() CPL_OVERRIDE {
return TRUE; }
853 virtual const char* GetType() {
return "SimpleSource"; }
855 GDALRasterBand* GetBand();
857 CPLErr DatasetRasterIO(
858 int nXOff,
int nYOff,
int nXSize,
int nYSize,
859 void * pData,
int nBufXSize,
int nBufYSize,
860 GDALDataType eBufType,
861 int nBandCount,
int *panBandMap,
862 GSpacing nPixelSpace, GSpacing nLineSpace,
864 GDALRasterIOExtraArg* psExtraArg );
866 void UnsetPreservedRelativeFilenames();
868 void SetMaxValue(
int nVal ) { m_nMaxValue = nVal; }
879 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
880 void *pData,
int nBufXSize,
int nBufYSize,
881 GDALDataType eBufType,
882 GSpacing nPixelSpace, GSpacing nLineSpace,
883 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
885 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
886 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
887 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
888 double* adfMinMax ) CPL_OVERRIDE;
889 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
891 double *pdfMin,
double *pdfMax,
892 double *pdfMean,
double *pdfStdDev,
893 GDALProgressFunc pfnProgress,
894 void *pProgressData ) CPL_OVERRIDE;
895 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
896 double dfMin,
double dfMax,
897 int nBuckets, GUIntBig * panHistogram,
898 int bIncludeOutOfRange,
int bApproxOK,
899 GDALProgressFunc pfnProgress,
900 void *pProgressData ) CPL_OVERRIDE;
902 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
903 virtual const char* GetType() CPL_OVERRIDE {
return "AveragedSource"; }
914 VRT_SCALING_EXPONENTIAL,
915 } VRTComplexSourceScaling;
920 VRTComplexSourceScaling m_eScalingType;
922 double m_dfScaleRatio;
925 int m_bSrcMinMaxDefined;
932 int m_nColorTableComponent;
934 template <
class WorkingDT>
935 CPLErr RasterIOInternal(
int nReqXOff,
int nReqYOff,
936 int nReqXSize,
int nReqYSize,
937 void *pData,
int nOutXSize,
int nOutYSize,
938 GDALDataType eBufType,
939 GSpacing nPixelSpace, GSpacing nLineSpace,
940 GDALRasterIOExtraArg* psExtraArg,
941 GDALDataType eWrkDataType );
946 double dfXDstRatio,
double dfYDstRatio);
949 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
950 void *pData,
int nBufXSize,
int nBufYSize,
951 GDALDataType eBufType,
952 GSpacing nPixelSpace, GSpacing nLineSpace,
953 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
955 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
956 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
957 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
958 double* adfMinMax ) CPL_OVERRIDE;
959 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
961 double *pdfMin,
double *pdfMax,
962 double *pdfMean,
double *pdfStdDev,
963 GDALProgressFunc pfnProgress,
964 void *pProgressData ) CPL_OVERRIDE;
965 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
966 double dfMin,
double dfMax,
967 int nBuckets, GUIntBig * panHistogram,
968 int bIncludeOutOfRange,
int bApproxOK,
969 GDALProgressFunc pfnProgress,
970 void *pProgressData ) CPL_OVERRIDE;
972 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
973 virtual CPLErr XMLInit( CPLXMLNode *,
const char * ) CPL_OVERRIDE;
974 virtual const char* GetType() CPL_OVERRIDE {
return "ComplexSource"; }
976 double LookupValue(
double dfInput );
978 void SetLinearScaling(
double dfOffset,
double dfScale );
979 void SetPowerScaling(
double dfExponent,
984 void SetColorTableComponent(
int nComponent );
986 double *m_padfLUTInputs;
987 double *m_padfLUTOutputs;
998 int IsTypeSupported( GDALDataType eType );
1001 int m_nSupportedTypesCount;
1002 GDALDataType m_aeSupportedTypes[20];
1004 int m_nExtraEdgePixels;
1010 void SetExtraEdgePixels(
int );
1011 void SetFilteringDataTypesSupported(
int, GDALDataType * );
1013 virtual CPLErr FilterData(
int nXSize,
int nYSize, GDALDataType eType,
1014 GByte *pabySrcData, GByte *pabyDstData ) = 0;
1016 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1017 void *pData,
int nBufXSize,
int nBufYSize,
1018 GDALDataType eBufType,
1019 GSpacing nPixelSpace, GSpacing nLineSpace,
1020 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
1032 double *m_padfKernelCoefs;
1040 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * ) CPL_OVERRIDE;
1041 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
1043 virtual CPLErr FilterData(
int nXSize,
int nYSize, GDALDataType eType,
1044 GByte *pabySrcData, GByte *pabyDstData ) CPL_OVERRIDE;
1046 CPLErr SetKernel(
int nKernelSize,
double *padfCoefs );
1047 void SetNormalized(
int );
1060 virtual CPLErr XMLInit( CPLXMLNode *psTree,
const char * ) CPL_OVERRIDE;
1061 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
1073 virtual CPLErr XMLInit( CPLXMLNode *,
const char *) CPL_OVERRIDE {
return CE_Failure; }
1074 virtual CPLXMLNode *SerializeToXML(
const char *pszVRTPath ) CPL_OVERRIDE;
1076 virtual CPLErr RasterIO(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1077 void *pData,
int nBufXSize,
int nBufYSize,
1078 GDALDataType eBufType,
1079 GSpacing nPixelSpace, GSpacing nLineSpace,
1080 GDALRasterIOExtraArg* psExtraArg ) CPL_OVERRIDE;
1082 virtual double GetMinimum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
1083 virtual double GetMaximum(
int nXSize,
int nYSize,
int *pbSuccess ) CPL_OVERRIDE;
1084 virtual CPLErr ComputeRasterMinMax(
int nXSize,
int nYSize,
int bApproxOK,
1085 double* adfMinMax ) CPL_OVERRIDE;
1086 virtual CPLErr ComputeStatistics(
int nXSize,
int nYSize,
1088 double *pdfMin,
double *pdfMax,
1089 double *pdfMean,
double *pdfStdDev,
1090 GDALProgressFunc pfnProgress,
1091 void *pProgressData ) CPL_OVERRIDE;
1092 virtual CPLErr GetHistogram(
int nXSize,
int nYSize,
1093 double dfMin,
double dfMax,
1094 int nBuckets, GUIntBig * panHistogram,
1095 int bIncludeOutOfRange,
int bApproxOK,
1096 GDALProgressFunc pfnProgress,
1097 void *pProgressData ) CPL_OVERRIDE;
Definition: vrtdataset.h:1027
Definition: vrtdataset.h:875
Definition: vrtdataset.h:370
Definition: vrtdataset.h:608
Definition: vrtdataset.h:82
Definition: vrtdataset.h:995
Definition: vrtdataset.h:477
Definition: vrtdataset.h:130
Definition: vrtdataset.h:59
Definition: vrtdataset.h:1054
#define VRT_NODATA_UNSET
Definition: gdal_vrt.h:45
Definition: vrtdataset.h:303
Definition: vrtdataset.h:704
Definition: vrtdataset.h:588
Definition: vrtdataset.h:647
Definition: vrtdataset.h:1067
Definition: vrtdataset.h:917
Definition: vrtdataset.h:766
Definition: vrtdataset.h:744
Definition: vrtdataset.h:231
CPL_C_START typedef CPLErr(* VRTImageReadFunc)(void *hCBData, int nXOff, int nYOff, int nXSize, int nYSize, void *pData)
Definition: gdal_vrt.h:51