32 #ifndef GDAL_PRIV_H_INCLUDED
33 #define GDAL_PRIV_H_INCLUDED
50 class GDALProxyDataset;
51 class GDALProxyRasterBand;
62 #include "gdal_frmts.h"
63 #include "gdalsubdatasetinfo.h"
68 #include "cpl_multiproc.h"
69 #include "cpl_atomic_ops.h"
86 #define GMO_VALID 0x0001
87 #define GMO_IGNORE_UNIMPLEMENTED 0x0002
88 #define GMO_SUPPORT_MD 0x0004
89 #define GMO_SUPPORT_MDMD 0x0008
90 #define GMO_MD_DIRTY 0x0010
91 #define GMO_PAM_CLASS 0x0020
100 class CPL_DLL GDALMultiDomainMetadata
107 bool operator()(
const char *a,
const char *b)
const
113 std::map<const char *, CPLStringList, Comparator> oMetadata{};
116 GDALMultiDomainMetadata();
117 ~GDALMultiDomainMetadata();
119 int XMLInit(
const CPLXMLNode *psMetadata,
int bMerge);
124 return aosDomainList.List();
127 char **GetMetadata(
const char *pszDomain =
"");
129 const char *GetMetadataItem(
const char *pszName,
130 const char *pszDomain =
"");
131 CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
132 const char *pszDomain =
"");
161 GDALMultiDomainMetadata oMDMD{};
165 char **BuildMetadataDomainList(
char **papszList,
int bCheckNonEmpty,
172 int GetMOFlags()
const;
173 void SetMOFlags(
int nFlagsIn);
175 virtual const char *GetDescription()
const;
176 virtual void SetDescription(
const char *);
178 virtual char **GetMetadataDomainList();
180 virtual char **GetMetadata(
const char *pszDomain =
"");
181 virtual CPLErr SetMetadata(
char **papszMetadata,
182 const char *pszDomain =
"");
183 virtual const char *GetMetadataItem(
const char *pszName,
184 const char *pszDomain =
"");
185 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
186 const char *pszDomain =
"");
210 class CPL_DLL GDALDefaultOverviews
221 bool bCheckedForMask;
230 bool bCheckedForOverviews;
234 char **papszInitSiblingFiles;
237 GDALDefaultOverviews();
238 ~GDALDefaultOverviews();
240 void Initialize(
GDALDataset *poDSIn,
const char *pszName =
nullptr,
241 char **papszSiblingFiles =
nullptr,
int bNameIsOVR = FALSE);
243 void TransferSiblingFiles(
char **papszSiblingFiles);
251 int GetOverviewCount(
int nBand);
255 int nOverviews,
const int *panOverviewList,
256 int nBands,
const int *panBandList,
257 GDALProgressFunc pfnProgress,
void *pProgressData,
260 CPLErr BuildOverviewsSubDataset(
const char *pszPhysicalFile,
261 const char *pszResampling,
int nOverviews,
262 const int *panOverviewList,
int nBands,
263 const int *panBandList,
264 GDALProgressFunc pfnProgress,
268 CPLErr BuildOverviewsMask(
const char *pszResampling,
int nOverviews,
269 const int *panOverviewList,
270 GDALProgressFunc pfnProgress,
void *pProgressData,
279 int GetMaskFlags(
int nBand);
281 int HaveMaskFile(
char **papszSiblings =
nullptr,
282 const char *pszBasename =
nullptr);
284 char **GetSiblingFiles()
286 return papszInitSiblingFiles;
302 bool bHasGotSiblingFiles;
303 char **papszSiblingFiles;
304 int nHeaderBytesTried;
308 const char *
const *papszSiblingFiles =
nullptr);
337 int TryToIngest(
int nBytes);
338 char **GetSiblingFiles();
339 char **StealSiblingFiles();
340 bool AreSiblingFilesLoaded()
const;
342 bool IsSingleAllowedDriver(
const char *pszDriverName)
const;
364 explicit GCP(
const char *pszId =
"",
const char *pszInfo =
"",
365 double dfPixel = 0,
double dfLine = 0,
double dfX = 0,
366 double dfY = 0,
double dfZ = 0);
370 GCP &operator=(
const GCP &);
375 inline const char *
Id()
const
380 void SetId(
const char *pszId);
383 inline const char *
Info()
const
388 void SetInfo(
const char *pszInfo);
393 return gcp.dfGCPPixel;
399 return gcp.dfGCPPixel;
405 return gcp.dfGCPLine;
411 return gcp.dfGCPLine;
415 inline double X()
const
427 inline double Y()
const
439 inline double Z()
const
456 static const GDAL_GCP *c_ptr(
const std::vector<GCP> &asGCPs);
458 static std::vector<GCP> fromC(
const GDAL_GCP *pasGCPList,
int nGCPCount);
475 class swq_select_parse_options;
479 typedef struct GDALSQLParseInfo GDALSQLParseInfo;
483 #ifdef GDAL_COMPILATION
484 #define OPTIONAL_OUTSIDE_GDAL(val)
486 #define OPTIONAL_OUTSIDE_GDAL(val) = val
494 #if defined(GDAL_BANDMAP_TYPE_CONST_SAFE)
495 #define BANDMAP_TYPE const int *
497 #define BANDMAP_TYPE int *
505 GDALOpenEx(
const char *pszFilename,
unsigned int nOpenFlags,
506 const char *
const *papszAllowedDrivers,
507 const char *
const *papszOpenOptions,
508 const char *
const *papszSiblingFiles);
512 friend class GDALDefaultOverviews;
513 friend class GDALProxyDataset;
516 CPL_INTERNAL
void AddToDatasetOpenList();
518 CPL_INTERNAL
void UnregisterFromSharedDataset();
520 CPL_INTERNAL
static void ReportErrorV(
const char *pszDSName,
522 const char *fmt, va_list args);
530 int nRasterXSize = 512;
531 int nRasterYSize = 512;
535 static constexpr
int OPEN_FLAGS_CLOSED = -1;
540 bool bForceCachedIO =
false;
541 bool bShared =
false;
542 bool bIsInternal =
true;
543 bool bSuppressOnClose =
false;
545 mutable std::map<std::string, std::unique_ptr<OGRFieldDomain>>
546 m_oMapFieldDomains{};
551 void RasterInitialize(
int,
int);
553 void SetBand(
int nNewBand, std::unique_ptr<GDALRasterBand> poBand);
555 GDALDefaultOverviews oOvManager{};
557 virtual CPLErr IBuildOverviews(
const char *pszResampling,
int nOverviews,
558 const int *panOverviewList,
int nListBands,
559 const int *panBandList,
560 GDALProgressFunc pfnProgress,
565 IRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
int nYSize,
566 void *pData,
int nBufXSize,
int nBufYSize,
GDALDataType eBufType,
567 int nBandCount, BANDMAP_TYPE panBandMap,
GSpacing nPixelSpace,
572 BlockBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
573 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
575 const int *panBandMap,
GSpacing nPixelSpace,
578 CPLErr BlockBasedFlushCache(
bool bAtClosing);
581 BandBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
582 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
584 const int *panBandMap,
GSpacing nPixelSpace,
589 RasterIOResampled(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
590 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
592 const int *panBandMap,
GSpacing nPixelSpace,
596 CPLErr ValidateRasterIOOrAdviseReadParameters(
597 const char *pszCallingFunc,
int *pbStopProcessingOnCENone,
int nXOff,
598 int nYOff,
int nXSize,
int nYSize,
int nBufXSize,
int nBufYSize,
599 int nBandCount,
const int *panBandMap);
602 int nXSize,
int nYSize,
void *pData,
603 int nBufXSize,
int nBufYSize,
605 const int *panBandMap,
GSpacing nPixelSpace,
609 void ShareLockWithParentDataset(
GDALDataset *poParentDataset);
613 void CleanupPostFileClosing();
615 virtual int CloseDependentDatasets();
617 int ValidateLayerCreationOptions(
const char *
const *papszLCO);
619 char **papszOpenOptions =
nullptr;
626 void LeaveReadWrite();
629 void TemporarilyDropReadWriteLock();
630 void ReacquireReadWriteLock();
632 void DisableReadWriteMutex();
637 bool IsAllBands(
int nBandCount,
const int *panBandList)
const;
645 int GetRasterXSize()
const;
646 int GetRasterYSize()
const;
647 int GetRasterCount()
const;
658 void *poQueryLoggerArgIn);
672 class CPL_DLL Iterator
675 std::unique_ptr<Private> m_poPrivate;
679 Iterator(
const Iterator &oOther);
681 Iterator(Iterator &&oOther) noexcept;
685 Iterator &operator++();
686 bool operator!=(
const Iterator &it)
const;
690 const Iterator
begin()
const;
692 const Iterator
end()
const;
702 virtual CPLErr FlushCache(
bool bAtClosing =
false);
703 virtual CPLErr DropCache();
705 virtual GIntBig GetEstimatedRAMUsage();
711 const char *GetProjectionRef(
void)
const;
712 CPLErr SetProjection(
const char *pszProjection);
714 virtual CPLErr GetGeoTransform(
double *padfTransform);
715 virtual CPLErr SetGeoTransform(
double *padfTransform);
719 virtual void *GetInternalHandle(
const char *pszHandleName);
721 virtual char **GetFileList(
void);
723 virtual const char *GetDriverName();
726 virtual int GetGCPCount();
732 const char *GetGCPProjection();
734 const char *pszGCPProjection);
736 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
738 int nBandCount,
int *panBandList,
739 char **papszOptions);
741 virtual CPLErr CreateMaskBand(
int nFlagsIn);
744 BeginAsyncReader(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
void *pBuf,
746 int nBandCount,
int *panBandMap,
int nPixelSpace,
747 int nLineSpace,
int nBandSpace,
char **papszOptions);
751 struct RawBinaryLayout
753 enum class Interleaving
760 std::string osRawFilename{};
761 Interleaving eInterleaving = Interleaving::UNKNOWN;
763 bool bLittleEndianOrder =
false;
771 virtual bool GetRawBinaryLayout(RawBinaryLayout &);
776 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
778 const int *panBandMap,
GSpacing nPixelSpace,
784 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
786 const int *panBandMap,
GSpacing nPixelSpace,
791 virtual CPLStringList GetCompressionFormats(
int nXOff,
int nYOff,
792 int nXSize,
int nYSize,
794 const int *panBandList);
795 virtual CPLErr ReadCompressedData(
const char *pszFormat,
int nXOff,
796 int nYOff,
int nXSize,
int nYSize,
797 int nBands,
const int *panBandList,
798 void **ppBuffer,
size_t *pnBufferSize,
799 char **ppszDetailedFormat);
813 int GetShared()
const;
816 void MarkSuppressOnClose();
817 void UnMarkSuppressOnClose();
824 return bSuppressOnClose;
832 return papszOpenOptions;
835 static GDALDataset **GetOpenDatasets(
int *pnDatasetCount);
839 BuildOverviews(
const char *pszResampling,
int nOverviews,
840 const int *panOverviewList,
int nListBands,
841 const int *panBandList, GDALProgressFunc pfnProgress,
843 CSLConstList papszOptions OPTIONAL_OUTSIDE_GDAL(
nullptr));
845 CPLErr BuildOverviews(
const char *pszResampling,
int nOverviews,
846 const int *panOverviewList,
int nListBands,
847 const int *panBandList, GDALProgressFunc pfnProgress,
855 static
void ReportError(const
char *pszDSName,
CPLErr eErrClass,
860 char **GetMetadata(
const char *pszDomain =
"")
override;
866 const char *pszDomain)
override;
869 char **GetMetadataDomainList()
override;
871 virtual void ClearStatistics();
893 unsigned int nOpenFlags = 0,
894 const char *
const *papszAllowedDrivers =
nullptr,
895 const char *
const *papszOpenOptions =
nullptr,
896 const char *
const *papszSiblingFiles =
nullptr)
898 return FromHandle(
GDALOpenEx(pszFilename, nOpenFlags,
899 papszAllowedDrivers, papszOpenOptions,
915 void SetEnableOverviews(
bool bEnable);
918 bool AreOverviewsEnabled()
const;
923 Private *m_poPrivate;
925 CPL_INTERNAL
OGRLayer *BuildLayerFromSelectInfo(
926 swq_select *psSelectInfo,
OGRGeometry *poSpatialFilter,
927 const char *pszDialect, swq_select_parse_options *poSelectParseOptions);
931 virtual int GetLayerCount();
932 virtual OGRLayer *GetLayer(
int iLayer);
934 virtual bool IsLayerPrivate(
int iLayer)
const;
956 std::unique_ptr<Private> m_poPrivate;
964 std::input_iterator_tag;
990 OGRLayer *operator[](
size_t iLayer);
991 OGRLayer *operator[](
const char *pszLayername);
996 virtual OGRLayer *GetLayerByName(
const char *);
997 virtual OGRErr DeleteLayer(
int iLayer);
999 virtual void ResetReading();
1001 double *pdfProgressPct,
1002 GDALProgressFunc pfnProgress,
1003 void *pProgressData);
1017 class CPL_DLL Iterator
1020 std::unique_ptr<Private> m_poPrivate;
1024 Iterator(
const Iterator &oOther);
1026 Iterator(Iterator &&oOther) noexcept;
1030 Iterator &operator++();
1031 bool operator!=(
const Iterator &it)
const;
1035 const Iterator
begin()
const;
1037 const Iterator
end()
const;
1042 virtual int TestCapability(
const char *);
1044 virtual std::vector<std::string>
1045 GetFieldDomainNames(
CSLConstList papszOptions =
nullptr)
const;
1047 virtual const OGRFieldDomain *GetFieldDomain(
const std::string &name)
const;
1049 virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
1050 std::string &failureReason);
1052 virtual bool DeleteFieldDomain(
const std::string &name,
1053 std::string &failureReason);
1055 virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
1056 std::string &failureReason);
1058 virtual std::vector<std::string>
1059 GetRelationshipNames(
CSLConstList papszOptions =
nullptr)
const;
1062 GetRelationship(
const std::string &name)
const;
1065 AddRelationship(std::unique_ptr<GDALRelationship> &&relationship,
1066 std::string &failureReason);
1068 virtual bool DeleteRelationship(
const std::string &name,
1069 std::string &failureReason);
1072 UpdateRelationship(std::unique_ptr<GDALRelationship> &&relationship,
1073 std::string &failureReason);
1076 OGRLayer *CreateLayer(
const char *pszName);
1078 OGRLayer *CreateLayer(
const char *pszName, std::nullptr_t);
1081 OGRLayer *CreateLayer(
const char *pszName,
1086 OGRLayer *CreateLayer(
const char *pszName,
1091 char **papszOptions =
nullptr);
1094 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
1098 virtual OGRLayer *ExecuteSQL(
const char *pszStatement,
1100 const char *pszDialect);
1101 virtual void ReleaseResultSet(
OGRLayer *poResultsSet);
1102 virtual OGRErr AbortSQL();
1104 int GetRefCount()
const;
1105 int GetSummaryRefCount()
const;
1108 virtual OGRErr StartTransaction(
int bForce = FALSE);
1109 virtual OGRErr CommitTransaction();
1110 virtual OGRErr RollbackTransaction();
1112 virtual std::shared_ptr<GDALGroup> GetRootGroup()
const;
1115 static int IsGenericSQLDialect(
const char *pszDialect);
1119 BuildParseInfo(swq_select *psSelectInfo,
1120 swq_select_parse_options *poSelectParseOptions);
1121 static void DestroyParseInfo(GDALSQLParseInfo *psParseInfo);
1123 const char *pszDialect,
1124 swq_select_parse_options *poSelectParseOptions);
1128 virtual OGRLayer *ICreateLayer(
const char *pszName,
1133 OGRErr ProcessSQLCreateIndex(
const char *);
1134 OGRErr ProcessSQLDropIndex(
const char *);
1135 OGRErr ProcessSQLDropTable(
const char *);
1136 OGRErr ProcessSQLAlterTableAddColumn(
const char *);
1137 OGRErr ProcessSQLAlterTableDropColumn(
const char *);
1138 OGRErr ProcessSQLAlterTableAlterColumn(
const char *);
1139 OGRErr ProcessSQLAlterTableRenameColumn(
const char *);
1143 friend class GDALProxyPoolDataset;
1151 struct CPL_DLL GDALDatasetUniquePtrDeleter
1162 struct CPL_DLL GDALDatasetUniquePtrReleaser
1179 std::unique_ptr<GDALDataset, GDALDatasetUniquePtrDeleter>;
1191 friend class GDALAbstractBandBlockCache;
1196 volatile int nLockCount;
1213 CPL_INTERNAL
void Detach_unlocked(
void);
1214 CPL_INTERNAL
void Touch_unlocked(
void);
1216 CPL_INTERNAL
void RecycleFor(
int nXOffIn,
int nYOffIn);
1223 CPLErr Internalize(
void);
1225 void MarkDirty(
void);
1226 void MarkClean(
void);
1231 return CPLAtomicInc(&nLockCount);
1237 return CPLAtomicDec(&nLockCount);
1305 return static_cast<GPtrDiff_t>(nXSize) * nYSize *
1310 int DropLockForRemovalFromStorage();
1319 static void FlushDirtyBlocks();
1320 static int FlushCacheBlock(
int bDirtyBlocksOnly = FALSE);
1321 static void Verify();
1323 static void EnterDisableDirtyBlockFlush();
1324 static void LeaveDisableDirtyBlockFlush();
1329 static void DumpAll();
1334 CPL_INTERNAL
static void DestroyRBMutex();
1351 std::vector<GDALColorEntry> aoEntries{};
1362 int GetColorEntryCount()
const;
1366 int CreateColorRamp(
int nStartIndex,
const GDALColorEntry *psStartColor,
1368 bool IsIdentity()
const;
1396 class GDALAbstractBandBlockCache
1399 CPLLock *hSpinLock =
nullptr;
1403 CPLCond *hCond =
nullptr;
1404 CPLMutex *hCondMutex =
nullptr;
1405 volatile int nKeepAliveCounter = 0;
1407 volatile int m_nDirtyBlocks = 0;
1414 int m_nInitialDirtyBlocksInFlushCache = 0;
1415 int m_nLastTick = -1;
1416 size_t m_nWriteDirtyBlocksDisabled = 0;
1418 void FreeDanglingBlocks();
1419 void UnreferenceBlockBase();
1421 void StartDirtyBlockFlushingLog();
1422 void UpdateDirtyBlockFlushingLog();
1423 void EndDirtyBlockFlushingLog();
1427 virtual ~GDALAbstractBandBlockCache();
1431 void IncDirtyBlocks(
int nInc);
1432 void WaitCompletionPendingTasks();
1434 void EnableDirtyBlockWriting()
1436 --m_nWriteDirtyBlocksDisabled;
1439 void DisableDirtyBlockWriting()
1441 ++m_nWriteDirtyBlocksDisabled;
1444 bool HasDirtyBlocks()
const
1446 return m_nDirtyBlocks > 0;
1449 virtual bool Init() = 0;
1450 virtual bool IsInitOK() = 0;
1451 virtual CPLErr FlushCache() = 0;
1454 int nYBlockYOff) = 0;
1456 virtual CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1457 int bWriteDirtyBlock) = 0;
1460 GDALAbstractBandBlockCache *
1462 GDALAbstractBandBlockCache *
1506 friend class GDALArrayBandBlockCache;
1507 friend class GDALHashSetBandBlockCache;
1511 CPLErr eFlushBlockErr = CE_None;
1512 GDALAbstractBandBlockCache *poBandBlockCache =
nullptr;
1514 CPL_INTERNAL
void SetFlushBlockErr(
CPLErr eErr);
1516 CPL_INTERNAL
void IncDirtyBlocks(
int nInc);
1523 int nRasterXSize = 0;
1524 int nRasterYSize = 0;
1530 int nBlockXSize = -1;
1531 int nBlockYSize = -1;
1532 int nBlocksPerRow = 0;
1533 int nBlocksPerColumn = 0;
1535 int nBlockReads = 0;
1536 int bForceCachedIO = 0;
1538 class GDALRasterBandOwnedOrNot
1541 GDALRasterBandOwnedOrNot()
1546 : m_poBandOwned(bOwned ? poBand :
nullptr),
1547 m_poBandRef(bOwned ?
nullptr : poBand)
1553 m_poBandOwned.reset();
1554 m_poBandRef =
nullptr;
1559 m_poBandOwned.reset(bOwned ? poBand :
nullptr);
1560 m_poBandRef = bOwned ? nullptr : poBand;
1568 bool IsOwned()
const
1570 return m_poBandOwned !=
nullptr;
1575 return m_poBandOwned ? m_poBandOwned.get() : m_poBandRef;
1580 std::unique_ptr<GDALRasterBand> m_poBandOwned{};
1584 GDALRasterBandOwnedOrNot poMask{};
1585 bool m_bEnablePixelTypeSignedByteWarning =
1589 void InvalidateMaskBand();
1591 friend class GDALProxyRasterBand;
1592 friend class GDALDefaultOverviews;
1595 RasterIOResampled(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
1596 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1602 void LeaveReadWrite();
1610 virtual CPLErr IWriteBlock(
int nBlockXOff,
int nBlockYOff,
void *pData);
1613 IRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1614 void *pData,
int nBufXSize,
int nBufYSize,
GDALDataType eBufType,
1618 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
int nXSize,
1619 int nYSize,
int nMaskFlagStop,
1620 double *pdfDataPct);
1623 OverviewRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
1624 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1630 int nXSize,
int nYSize,
void *pData,
1631 int nBufXSize,
int nBufYSize,
1636 int InitBlockInfo();
1640 bool HasBlockCache()
const
1642 return poBandBlockCache !=
nullptr;
1645 bool HasDirtyBlocks()
const
1647 return poBandBlockCache && poBandBlockCache->HasDirtyBlocks();
1664 void GetBlockSize(
int *pnXSize,
int *pnYSize);
1665 CPLErr GetActualBlockSize(
int nXBlockOff,
int nYBlockOff,
int *pnXValid,
1669 GetSuggestedBlockAccessPattern()
const;
1673 #ifndef DOXYGEN_SKIP
1675 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1682 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1687 CPLErr ReadBlock(
int nXBlockOff,
int nYBlockOff,
1690 CPLErr WriteBlock(
int nXBlockOff,
int nYBlockOff,
1694 GetLockedBlockRef(
int nXBlockOff,
int nYBlockOff,
1696 GDALRasterBlock *TryGetLockedBlockRef(
int nXBlockOff,
int nYBlockYOff)
1698 CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1699 int bWriteDirtyBlock = TRUE);
1703 unsigned char *pTranslationTable =
nullptr,
1704 int *pApproximateMatching =
nullptr);
1708 virtual CPLErr FlushCache(
bool bAtClosing =
false);
1709 virtual CPLErr DropCache();
1710 virtual char **GetCategoryNames();
1711 virtual double GetNoDataValue(
int *pbSuccess =
nullptr);
1712 virtual int64_t GetNoDataValueAsInt64(
int *pbSuccess =
nullptr);
1713 virtual uint64_t GetNoDataValueAsUInt64(
int *pbSuccess =
nullptr);
1714 virtual double GetMinimum(
int *pbSuccess =
nullptr);
1715 virtual double GetMaximum(
int *pbSuccess =
nullptr);
1716 virtual double GetOffset(
int *pbSuccess =
nullptr);
1717 virtual double GetScale(
int *pbSuccess =
nullptr);
1718 virtual const char *GetUnitType();
1721 virtual CPLErr Fill(
double dfRealValue,
double dfImaginaryValue = 0);
1723 virtual CPLErr SetCategoryNames(
char **papszNames);
1724 virtual CPLErr SetNoDataValue(
double dfNoData);
1725 virtual CPLErr SetNoDataValueAsInt64(int64_t nNoData);
1726 virtual CPLErr SetNoDataValueAsUInt64(uint64_t nNoData);
1727 virtual CPLErr DeleteNoDataValue();
1730 virtual CPLErr SetOffset(
double dfNewOffset);
1731 virtual CPLErr SetScale(
double dfNewScale);
1732 virtual CPLErr SetUnitType(
const char *pszNewValue);
1734 virtual CPLErr GetStatistics(
int bApproxOK,
int bForce,
double *pdfMin,
1735 double *pdfMax,
double *pdfMean,
1736 double *padfStdDev);
1737 virtual CPLErr ComputeStatistics(
int bApproxOK,
double *pdfMin,
1738 double *pdfMax,
double *pdfMean,
1739 double *pdfStdDev, GDALProgressFunc,
1740 void *pProgressData);
1741 virtual CPLErr SetStatistics(
double dfMin,
double dfMax,
double dfMean,
1743 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double *adfMinMax);
1749 const char *pszDomain)
override;
1751 virtual const char *GetMetadataItem(
const char *pszName,
1752 const char *pszDomain =
"")
override;
1754 virtual int HasArbitraryOverviews();
1755 virtual int GetOverviewCount();
1758 virtual CPLErr BuildOverviews(
const char *pszResampling,
int nOverviews,
1759 const int *panOverviewList,
1760 GDALProgressFunc pfnProgress,
1761 void *pProgressData,
1764 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1765 int nBufXSize,
int nBufYSize,
1768 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
int nBuckets,
1769 GUIntBig *panHistogram,
int bIncludeOutOfRange,
1770 int bApproxOK, GDALProgressFunc,
1771 void *pProgressData);
1773 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
1774 int *pnBuckets,
GUIntBig **ppanHistogram,
1775 int bForce, GDALProgressFunc,
1776 void *pProgressData);
1777 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
int nBuckets,
1784 virtual int GetMaskFlags();
1785 virtual CPLErr CreateMaskBand(
int nFlagsIn);
1786 virtual bool IsMaskBand()
const;
1790 GetVirtualMemAuto(
GDALRWFlag eRWFlag,
int *pnPixelSpace,
1794 int GetDataCoverageStatus(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1795 int nMaskFlagStop = 0,
1796 double *pdfDataPct =
nullptr);
1798 std::shared_ptr<GDALMDArray> AsMDArray()
const;
1824 void EnablePixelTypeSignedByteWarning(
bool b)
1825 #ifndef GDAL_COMPILATION
1826 CPL_WARN_DEPRECATED(
"Do not use that method outside of GDAL!")
1844 CPLErr IReadBlock(
int,
int,
void *)
override;
1850 ~GDALAllValidMaskBand()
override;
1853 int GetMaskFlags()
override;
1855 bool IsMaskBand()
const override
1865 CPLErr ComputeStatistics(
int bApproxOK,
double *pdfMin,
double *pdfMax,
1866 double *pdfMean,
double *pdfStdDev,
1867 GDALProgressFunc,
void *pProgressData)
override;
1877 double m_dfNoDataValue = 0;
1878 int64_t m_nNoDataValueInt64 = 0;
1879 uint64_t m_nNoDataValueUInt64 = 0;
1892 explicit GDALNoDataMaskBand(
GDALRasterBand *,
double dfNoDataValue);
1893 ~GDALNoDataMaskBand()
override;
1905 static bool IsNoDataInRange(
double dfNoDataValue,
GDALDataType eDataType);
1914 double *padfNodataValues;
1919 CPLErr IReadBlock(
int,
int,
void *)
override;
1923 ~GDALNoDataValuesMaskBand()
override;
1925 bool IsMaskBand()
const override
1955 ~GDALRescaledAlphaBand()
override;
2006 CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
2007 const char *pszDomain =
"")
override;
2012 GDALDataset *Create(
const char *pszName,
int nXSize,
int nYSize,
int nBands,
2017 CreateMultiDimensional(
const char *pszName,
2021 CPLErr Delete(
const char *pszName);
2022 CPLErr Rename(
const char *pszNewName,
const char *pszOldName);
2023 CPLErr CopyFiles(
const char *pszNewName,
const char *pszOldName);
2027 GDALProgressFunc pfnProgress,
2030 bool CanVectorTranslateFrom(
const char *pszDestName,
2033 char ***ppapszFailureReasons);
2036 VectorTranslateFrom(
const char *pszDestName,
GDALDataset *poSourceDS,
2038 GDALProgressFunc pfnProgress,
2053 OpenCallback pfnOpen =
nullptr;
2055 virtual OpenCallback GetOpenCallback()
2060 typedef GDALDataset *(*CreateCallback)(
const char *pszName,
int nXSize,
2061 int nYSize,
int nBands,
2063 char **papszOptions);
2065 CreateCallback pfnCreate =
nullptr;
2067 virtual CreateCallback GetCreateCallback()
2074 char **papszOptions) =
nullptr;
2076 typedef GDALDataset *(*CreateMultiDimensionalCallback)(
2077 const char *pszName,
CSLConstList papszRootGroupOptions,
2080 CreateMultiDimensionalCallback pfnCreateMultiDimensional =
nullptr;
2082 virtual CreateMultiDimensionalCallback GetCreateMultiDimensionalCallback()
2084 return pfnCreateMultiDimensional;
2087 typedef CPLErr (*DeleteCallback)(
const char *pszName);
2088 DeleteCallback pfnDelete =
nullptr;
2090 virtual DeleteCallback GetDeleteCallback()
2097 GDALProgressFunc pfnProgress,
2098 void *pProgressData);
2100 CreateCopyCallback pfnCreateCopy =
nullptr;
2102 virtual CreateCopyCallback GetCreateCopyCallback()
2104 return pfnCreateCopy;
2107 void *pDriverData =
nullptr;
2109 void (*pfnUnloadDriver)(
GDALDriver *) =
nullptr;
2122 typedef CPLErr (*RenameCallback)(
const char *pszNewName,
2123 const char *pszOldName);
2124 RenameCallback pfnRename =
nullptr;
2126 virtual RenameCallback GetRenameCallback()
2131 typedef CPLErr (*CopyFilesCallback)(
const char *pszNewName,
2132 const char *pszOldName);
2133 CopyFilesCallback pfnCopyFiles =
nullptr;
2135 virtual CopyFilesCallback GetCopyFilesCallback()
2137 return pfnCopyFiles;
2146 char **papszOptions) =
nullptr;
2147 CPLErr (*pfnDeleteDataSource)(
GDALDriver *,
const char *pszName) =
nullptr;
2153 bool (*pfnCanVectorTranslateFrom)(
2156 char ***ppapszFailureReasons) =
nullptr;
2165 GDALProgressFunc pfnProgress,
void *pProgressData) =
nullptr;
2182 GDALProgressFunc pfnProgress,
2185 static CPLErr DefaultCreateCopyMultiDimensional(
2188 void *pProgressData);
2194 GDALProgressFunc pfnProgress,
2195 void *pProgressData);
2197 CPLErr QuietDeleteForCreateCopy(
const char *pszFilename,
2201 static CPLErr QuietDelete(
const char *pszName,
2205 static CPLErr DefaultRename(
const char *pszNewName,
const char *pszOldName);
2206 static CPLErr DefaultCopyFiles(
const char *pszNewName,
2207 const char *pszOldName);
2280 const std::string m_osPluginFileName;
2281 std::string m_osPluginFullPath{};
2282 std::unique_ptr<GDALDriver> m_poRealDriver{};
2283 std::set<std::string> m_oSetMetadataItems{};
2293 void SetPluginFullPath(
const std::string &osFullPath)
2295 m_osPluginFullPath = osFullPath;
2306 return m_osPluginFileName;
2310 OpenCallback GetOpenCallback()
override;
2312 CreateCallback GetCreateCallback()
override;
2314 CreateMultiDimensionalCallback GetCreateMultiDimensionalCallback()
override;
2316 CreateCopyCallback GetCreateCopyCallback()
override;
2318 DeleteCallback GetDeleteCallback()
override;
2320 RenameCallback GetRenameCallback()
override;
2322 CopyFilesCallback GetCopyFilesCallback()
override;
2326 const char *pszDomain =
"")
override;
2328 char **
GetMetadata(
const char *pszDomain)
override;
2331 const char *pszDomain =
"")
override;
2349 std::map<CPLString, GDALDriver *> oMapNameToDrivers{};
2350 std::string m_osPluginPath{};
2351 std::string m_osDriversIniPath{};
2352 mutable std::string m_osLastTriedDirectory{};
2353 std::set<std::string> m_oSetPluginFileNames{};
2354 bool m_bInDeferredDriverLoading =
false;
2355 std::map<std::string, std::unique_ptr<GDALDriver>> m_oMapRealDrivers{};
2356 std::vector<std::unique_ptr<GDALDriver>> m_aoHiddenDrivers{};
2360 return (iDriver >= 0 && iDriver < nDrivers) ? papoDrivers[iDriver]
2364 GDALDriver *GetDriverByName_unlocked(
const char *pszName)
const
2366 auto oIter = oMapNameToDrivers.find(
CPLString(pszName).toupper());
2367 return oIter == oMapNameToDrivers.end() ? nullptr : oIter->second;
2370 static void CleanupPythonDrivers();
2372 std::string GetPluginFullPath(
const char *pszFilename)
const;
2374 int RegisterDriver(
GDALDriver *,
bool bHidden);
2381 GDALOpenEx(
const char *pszFilename,
unsigned int nOpenFlags,
2382 const char *
const *papszAllowedDrivers,
2383 const char *
const *papszOpenOptions,
2384 const char *
const *papszSiblingFiles);
2387 static char **GetSearchPaths(
const char *pszGDAL_DRIVER_PATH);
2394 int GetDriverCount(
void)
const;
2402 void AutoLoadDrivers();
2403 void AutoSkipDrivers();
2404 void ReorderDrivers();
2405 static CPLErr LoadPlugin(
const char *name);
2407 static void AutoLoadPythonDrivers();
2412 int GetDriverCount(
bool bIncludeHidden)
const;
2413 GDALDriver *GetDriver(
int iDriver,
bool bIncludeHidden);
2571 int *pnBufXSize,
int *pnBufYSize) = 0;
2572 virtual int LockBuffer(
double dfTimeout = -1.0);
2573 virtual void UnlockBuffer();
2608 Create(
const std::string &osName,
size_t nTotalSize,
2609 std::vector<std::unique_ptr<GDALEDTComponent>> &&components);
2611 CreateString(
size_t nMaxStringLength = 0,
2619 return !(operator==(other));
2647 return m_eNumericDT;
2668 return m_aoComponents;
2688 return m_nMaxStringLength;
2693 bool NeedsFreeDynamicMemory()
const;
2695 void FreeDynamicMemory(
void *pBuffer)
const;
2700 static bool CopyValues(
const void *pSrc,
2704 GPtrDiff_t nDstStrideInElts,
size_t nValues);
2711 const std::string &osName,
size_t nTotalSize,
2712 std::vector<std::unique_ptr<GDALEDTComponent>> &&components);
2714 std::string m_osName{};
2718 std::vector<std::unique_ptr<GDALEDTComponent>> m_aoComponents{};
2720 size_t m_nMaxStringLength = 0;
2770 std::string m_osName;
2787 std::shared_ptr<GDALAttribute>
2788 GetAttributeFromAttributes(
const std::string &osName)
const;
2793 virtual std::shared_ptr<GDALAttribute>
2794 GetAttribute(
const std::string &osName)
const;
2796 virtual std::vector<std::shared_ptr<GDALAttribute>>
2797 GetAttributes(
CSLConstList papszOptions =
nullptr)
const;
2799 virtual std::shared_ptr<GDALAttribute>
2800 CreateAttribute(
const std::string &osName,
2801 const std::vector<GUInt64> &anDimensions,
2805 virtual bool DeleteAttribute(
const std::string &osName,
2829 std::string m_osName{};
2832 std::string m_osFullName{};
2836 const std::string m_osContext{};
2838 std::weak_ptr<GDALGroup> m_pSelf{};
2841 bool m_bValid =
true;
2843 GDALGroup(
const std::string &osParentName,
const std::string &osName,
2844 const std::string &osContext = std::string());
2847 GetInnerMostGroup(
const std::string &osPathOrArrayOrDim,
2848 std::shared_ptr<GDALGroup> &curGroupHolder,
2849 std::string &osLastPart)
const;
2851 void BaseRename(
const std::string &osNewName);
2853 bool CheckValidAndErrorOutIfNot()
const;
2855 void SetSelf(
const std::shared_ptr<GDALGroup> &
self)
2860 virtual void NotifyChildrenOfRenaming()
2864 virtual void NotifyChildrenOfDeletion()
2888 return m_osFullName;
2891 virtual std::vector<std::string>
2892 GetMDArrayNames(
CSLConstList papszOptions =
nullptr)
const;
2893 virtual std::shared_ptr<GDALMDArray>
2894 OpenMDArray(
const std::string &osName,
2897 virtual std::vector<std::string>
2898 GetGroupNames(
CSLConstList papszOptions =
nullptr)
const;
2899 virtual std::shared_ptr<GDALGroup>
2900 OpenGroup(
const std::string &osName,
2903 virtual std::vector<std::string>
2904 GetVectorLayerNames(
CSLConstList papszOptions =
nullptr)
const;
2906 OpenVectorLayer(
const std::string &osName,
2909 virtual std::vector<std::shared_ptr<GDALDimension>>
2910 GetDimensions(
CSLConstList papszOptions =
nullptr)
const;
2912 virtual std::shared_ptr<GDALGroup>
2913 CreateGroup(
const std::string &osName,
CSLConstList papszOptions =
nullptr);
2915 virtual bool DeleteGroup(
const std::string &osName,
2918 virtual std::shared_ptr<GDALDimension>
2919 CreateDimension(
const std::string &osName,
const std::string &osType,
2920 const std::string &osDirection,
GUInt64 nSize,
2923 virtual std::shared_ptr<GDALMDArray> CreateMDArray(
2924 const std::string &osName,
2925 const std::vector<std::shared_ptr<GDALDimension>> &aoDimensions,
2929 virtual bool DeleteMDArray(
const std::string &osName,
2932 GUInt64 GetTotalCopyCost()
const;
2934 virtual bool CopyFrom(
const std::shared_ptr<GDALGroup> &poDstRootGroup,
2936 const std::shared_ptr<GDALGroup> &poSrcGroup,
2937 bool bStrict,
GUInt64 &nCurCost,
2939 GDALProgressFunc pfnProgress,
void *pProgressData,
2944 std::shared_ptr<GDALMDArray>
2945 OpenMDArrayFromFullname(
const std::string &osFullName,
2948 std::shared_ptr<GDALMDArray>
2949 ResolveMDArray(
const std::string &osName,
const std::string &osStartingPath,
2952 std::shared_ptr<GDALGroup>
2953 OpenGroupFromFullname(
const std::string &osFullName,
2956 std::shared_ptr<GDALDimension>
2957 OpenDimensionFromFullname(
const std::string &osFullName)
const;
2959 virtual void ClearStatistics();
2961 virtual bool Rename(
const std::string &osNewName);
2963 std::shared_ptr<GDALGroup>
2964 SubsetDimensionFromSelection(
const std::string &osSelection)
const;
2967 virtual void ParentRenamed(
const std::string &osNewParentFullName);
2969 virtual void Deleted();
2971 virtual void ParentDeleted();
2973 const std::string &GetContext()
const
2981 static constexpr
GUInt64 COPY_COST = 1000;
2998 std::string m_osName{};
3001 std::string m_osFullName{};
3002 std::weak_ptr<GDALAbstractMDArray> m_pSelf{};
3005 bool m_bValid =
true;
3008 const std::string &osName);
3010 void SetSelf(
const std::shared_ptr<GDALAbstractMDArray> &
self)
3015 bool CheckValidAndErrorOutIfNot()
const;
3017 bool CheckReadWriteParams(
const GUInt64 *arrayStartIdx,
const size_t *count,
3018 const GInt64 *&arrayStep,
3022 const void *buffer_alloc_start,
3023 size_t buffer_alloc_size,
3024 std::vector<GInt64> &tmp_arrayStep,
3025 std::vector<GPtrDiff_t> &tmp_bufferStride)
const;
3028 IRead(
const GUInt64 *arrayStartIdx,
3029 const size_t *count,
3033 void *pDstBuffer)
const = 0;
3036 IWrite(
const GUInt64 *arrayStartIdx,
3037 const size_t *count,
3042 void BaseRename(
const std::string &osNewName);
3044 virtual void NotifyChildrenOfRenaming()
3048 virtual void NotifyChildrenOfDeletion()
3074 return m_osFullName;
3077 GUInt64 GetTotalElementsCount()
const;
3079 virtual size_t GetDimensionCount()
const;
3081 virtual const std::vector<std::shared_ptr<GDALDimension>> &
3086 virtual std::vector<GUInt64> GetBlockSize()
const;
3088 virtual std::vector<size_t>
3089 GetProcessingChunkSize(
size_t nMaxChunkMemory)
const;
3107 typedef bool (*FuncProcessPerChunkType)(
3109 const GUInt64 *chunkArrayStartIdx,
3110 const size_t *chunkCount,
3116 virtual bool ProcessPerChunk(
const GUInt64 *arrayStartIdx,
3117 const GUInt64 *count,
const size_t *chunkSize,
3118 FuncProcessPerChunkType pfnFunc,
3122 Read(
const GUInt64 *arrayStartIdx,
3123 const size_t *count,
3127 const void *pDstBufferAllocStart =
nullptr,
3128 size_t nDstBufferAllocSize = 0)
const;
3131 Write(
const GUInt64 *arrayStartIdx,
3132 const size_t *count,
3136 const void *pSrcBufferAllocStart =
nullptr,
3137 size_t nSrcBufferAllocSize = 0);
3139 virtual bool Rename(
const std::string &osNewName);
3142 virtual void Deleted();
3144 virtual void ParentDeleted();
3146 virtual void ParentRenamed(
const std::string &osNewParentFullName);
3227 mutable std::string m_osCachedVal{};
3231 GDALAttribute(
const std::string &osParentName,
const std::string &osName);
3235 std::vector<GUInt64> GetDimensionsSize()
const;
3238 const char *ReadAsString()
const;
3239 int ReadAsInt()
const;
3240 int64_t ReadAsInt64()
const;
3241 double ReadAsDouble()
const;
3243 std::vector<int> ReadAsIntArray()
const;
3244 std::vector<int64_t> ReadAsInt64Array()
const;
3245 std::vector<double> ReadAsDoubleArray()
const;
3248 bool Write(
const void *pabyValue,
size_t nLen);
3249 bool Write(
const char *);
3251 bool WriteInt64(int64_t);
3254 bool Write(
const int *,
size_t);
3255 bool Write(
const int64_t *,
size_t);
3256 bool Write(
const double *,
size_t);
3259 static constexpr
GUInt64 COPY_COST = 100;
3268 class CPL_DLL GDALAttributeString final :
public GDALAttribute
3270 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
3272 std::string m_osValue;
3277 void *pDstBuffer)
const override;
3280 GDALAttributeString(
const std::string &osParentName,
3281 const std::string &osName,
const std::string &osValue,
3284 const std::vector<std::shared_ptr<GDALDimension>> &
3285 GetDimensions()
const override;
3297 class CPL_DLL GDALAttributeNumeric final :
public GDALAttribute
3299 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
3302 double m_dfValue = 0;
3303 std::vector<GUInt32> m_anValuesUInt32{};
3308 void *pDstBuffer)
const override;
3311 GDALAttributeNumeric(
const std::string &osParentName,
3312 const std::string &osName,
double dfValue);
3313 GDALAttributeNumeric(
const std::string &osParentName,
3314 const std::string &osName,
int nValue);
3315 GDALAttributeNumeric(
const std::string &osParentName,
3316 const std::string &osName,
3317 const std::vector<GUInt32> &anValues);
3319 const std::vector<std::shared_ptr<GDALDimension>> &
3320 GetDimensions()
const override;
3346 friend class GDALMDArrayResampled;
3347 std::shared_ptr<GDALMDArray>
3348 GetView(
const std::vector<GUInt64> &indices)
const;
3350 inline std::shared_ptr<GDALMDArray>
3351 atInternal(
const std::vector<GUInt64> &indices)
const
3353 return GetView(indices);
3356 template <
typename... GUInt64VarArg>
3358 inline std::shared_ptr<GDALMDArray>
3359 atInternal(std::vector<GUInt64> &indices,
GUInt64 idx,
3360 GUInt64VarArg... tail)
const
3362 indices.push_back(idx);
3363 return atInternal(indices, tail...);
3368 const std::string m_osContext{};
3370 mutable bool m_bHasTriedCachedArray =
false;
3371 mutable std::shared_ptr<GDALMDArray> m_poCachedArray{};
3375 GDALMDArray(
const std::string &osParentName,
const std::string &osName,
3376 const std::string &osContext = std::string());
3378 virtual bool IAdviseRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
3381 virtual bool IsCacheable()
const
3386 virtual bool SetStatistics(
bool bApproxStats,
double dfMin,
double dfMax,
3387 double dfMean,
double dfStdDev,
3390 static std::string MassageName(
const std::string &inputName);
3392 std::shared_ptr<GDALGroup>
3393 GetCacheRootGroup(
bool bCanCreate, std::string &osCacheFilenameOut)
const;
3396 bool IsTransposedRequest(
const size_t *count,
3400 bool ReadForTransposedRequest(
const GUInt64 *arrayStartIdx,
3401 const size_t *count,
const GInt64 *arrayStep,
3404 void *pDstBuffer)
const;
3406 bool IsStepOneContiguousRowMajorOrderedSameDataType(
3407 const size_t *count,
const GInt64 *arrayStep,
3413 bool ReadUsingContiguousIRead(
const GUInt64 *arrayStartIdx,
3414 const size_t *count,
const GInt64 *arrayStep,
3417 void *pDstBuffer)
const;
3419 static std::shared_ptr<GDALMDArray> CreateGLTOrthorectified(
3420 const std::shared_ptr<GDALMDArray> &poParent,
3421 const std::shared_ptr<GDALGroup> &poRootGroup,
3422 const std::shared_ptr<GDALMDArray> &poGLTX,
3423 const std::shared_ptr<GDALMDArray> &poGLTY,
int nGLTIndexOffset,
3424 const std::vector<double> &adfGeoTransform,
CSLConstList papszOptions);
3429 GUInt64 GetTotalCopyCost()
const;
3432 bool bStrict,
GUInt64 &nCurCost,
3434 GDALProgressFunc pfnProgress,
void *pProgressData);
3451 virtual const std::string &GetUnit()
const;
3453 virtual bool SetUnit(
const std::string &osUnit);
3457 virtual std::shared_ptr<OGRSpatialReference> GetSpatialRef()
const;
3459 virtual const void *GetRawNoDataValue()
const;
3461 double GetNoDataValueAsDouble(
bool *pbHasNoData =
nullptr)
const;
3463 int64_t GetNoDataValueAsInt64(
bool *pbHasNoData =
nullptr)
const;
3465 uint64_t GetNoDataValueAsUInt64(
bool *pbHasNoData =
nullptr)
const;
3467 virtual bool SetRawNoDataValue(
const void *pRawNoData);
3470 bool SetNoDataValue(
int nNoData)
3472 return SetNoDataValue(
static_cast<int64_t
>(nNoData));
3477 bool SetNoDataValue(
double dfNoData);
3479 bool SetNoDataValue(int64_t nNoData);
3481 bool SetNoDataValue(uint64_t nNoData);
3483 virtual bool Resize(
const std::vector<GUInt64> &anNewDimSizes,
3486 virtual double GetOffset(
bool *pbHasOffset =
nullptr,
3489 virtual double GetScale(
bool *pbHasScale =
nullptr,
3492 virtual bool SetOffset(
double dfOffset,
3495 virtual bool SetScale(
double dfScale,
3498 std::shared_ptr<GDALMDArray> GetView(
const std::string &viewExpr)
const;
3500 std::shared_ptr<GDALMDArray> operator[](
const std::string &fieldName)
const;
3513 template <
typename... GUInt64VarArg>
3516 std::shared_ptr<GDALMDArray>
at(
GUInt64 idx, GUInt64VarArg... tail)
const
3518 std::vector<GUInt64> indices;
3519 indices.push_back(idx);
3520 return atInternal(indices, tail...);
3523 virtual std::shared_ptr<GDALMDArray>
3524 Transpose(
const std::vector<int> &anMapNewAxisToOldAxis)
const;
3526 std::shared_ptr<GDALMDArray> GetUnscaled(
3527 double dfOverriddenScale = std::numeric_limits<double>::quiet_NaN(),
3528 double dfOverriddenOffset = std::numeric_limits<double>::quiet_NaN(),
3529 double dfOverriddenDstNodata =
3530 std::numeric_limits<double>::quiet_NaN())
const;
3532 virtual std::shared_ptr<GDALMDArray>
3535 virtual std::shared_ptr<GDALMDArray>
3536 GetResampled(
const std::vector<std::shared_ptr<GDALDimension>> &apoNewDims,
3541 std::shared_ptr<GDALMDArray>
3542 GetGridded(
const std::string &osGridOptions,
3543 const std::shared_ptr<GDALMDArray> &poXArray =
nullptr,
3544 const std::shared_ptr<GDALMDArray> &poYArray =
nullptr,
3548 AsClassicDataset(
size_t iXDim,
size_t iYDim,
3549 const std::shared_ptr<GDALGroup> &poRootGroup =
nullptr,
3552 virtual CPLErr GetStatistics(
bool bApproxOK,
bool bForce,
double *pdfMin,
3553 double *pdfMax,
double *pdfMean,
3554 double *padfStdDev,
GUInt64 *pnValidCount,
3555 GDALProgressFunc pfnProgress,
3556 void *pProgressData);
3558 virtual bool ComputeStatistics(
bool bApproxOK,
double *pdfMin,
3559 double *pdfMax,
double *pdfMean,
3560 double *pdfStdDev,
GUInt64 *pnValidCount,
3561 GDALProgressFunc,
void *pProgressData,
3564 virtual void ClearStatistics();
3566 virtual std::vector<std::shared_ptr<GDALMDArray>>
3567 GetCoordinateVariables()
const;
3569 bool AdviseRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
3572 bool IsRegularlySpaced(
double &dfStart,
double &dfIncrement)
const;
3574 bool GuessGeoTransform(
size_t nDimX,
size_t nDimY,
bool bPixelIsPoint,
3575 double adfGeoTransform[6])
const;
3580 Read(
const GUInt64 *arrayStartIdx,
3581 const size_t *count,
3585 const void *pDstBufferAllocStart =
nullptr,
3586 size_t nDstBufferAllocSize = 0) const override final;
3588 virtual std::shared_ptr<
GDALGroup> GetRootGroup() const;
3591 static constexpr
GUInt64 COPY_COST = 1000;
3593 bool CopyFromAllExceptValues(const
GDALMDArray *poSrcArray,
bool bStrict,
3595 GDALProgressFunc pfnProgress,
3596 void *pProgressData);
3604 : m_nStartIdx(nStartIdx), m_nIncr(nIncr)
3611 std::string m_osFieldName{};
3616 m_mapDimIdxToParentDimIdx{};
3621 virtual std::shared_ptr<GDALMDArray>
3622 GetView(
const std::string &viewExpr,
bool bRenameDimensions,
3623 std::vector<ViewSpec> &viewSpecs)
const;
3625 const std::string &GetContext()
const
3635 size_t iDimX,
size_t iDimY,
3636 const GUInt64 *arrayStartIdx,
const size_t *count,
3649 class CPL_DLL GDALMDArrayRegularlySpaced :
public GDALMDArray
3652 double m_dfIncrement;
3653 double m_dfOffsetInIncrement;
3655 std::vector<std::shared_ptr<GDALDimension>> m_dims;
3656 std::vector<std::shared_ptr<GDALAttribute>> m_attributes{};
3657 std::string m_osEmptyFilename{};
3662 void *pDstBuffer)
const override;
3665 GDALMDArrayRegularlySpaced(
const std::string &osParentName,
3666 const std::string &osName,
3667 const std::shared_ptr<GDALDimension> &poDim,
3668 double dfStart,
double dfIncrement,
3669 double dfOffsetInIncrement);
3671 static std::shared_ptr<GDALMDArrayRegularlySpaced>
3672 Create(
const std::string &osParentName,
const std::string &osName,
3673 const std::shared_ptr<GDALDimension> &poDim,
double dfStart,
3674 double dfIncrement,
double dfOffsetInIncrement);
3676 bool IsWritable()
const override
3681 const std::string &GetFilename()
const override
3683 return m_osEmptyFilename;
3686 const std::vector<std::shared_ptr<GDALDimension>> &
3687 GetDimensions()
const override;
3691 std::vector<std::shared_ptr<GDALAttribute>>
3694 void AddAttribute(
const std::shared_ptr<GDALAttribute> &poAttr);
3718 GDALDimension(
const std::string &osParentName,
const std::string &osName,
3719 const std::string &osType,
const std::string &osDirection,
3740 return m_osFullName;
3766 return m_osDirection;
3778 virtual std::shared_ptr<GDALMDArray> GetIndexingVariable()
const;
3781 SetIndexingVariable(std::shared_ptr<GDALMDArray> poIndexingVariable);
3783 virtual bool Rename(
const std::string &osNewName);
3786 virtual void ParentRenamed(
const std::string &osNewParentFullName);
3788 virtual void ParentDeleted();
3793 std::string m_osName;
3794 std::string m_osFullName;
3795 std::string m_osType;
3796 std::string m_osDirection;
3799 void BaseRename(
const std::string &osNewName);
3809 class CPL_DLL GDALDimensionWeakIndexingVar :
public GDALDimension
3811 std::weak_ptr<GDALMDArray> m_poIndexingVariable{};
3814 GDALDimensionWeakIndexingVar(
const std::string &osParentName,
3815 const std::string &osName,
3816 const std::string &osType,
3817 const std::string &osDirection,
GUInt64 nSize);
3819 std::shared_ptr<GDALMDArray> GetIndexingVariable()
const override;
3821 bool SetIndexingVariable(
3822 std::shared_ptr<GDALMDArray> poIndexingVariable)
override;
3824 void SetSize(
GUInt64 nNewSize);
3833 struct GDALAntiRecursionStruct;
3835 class GDALAntiRecursionGuard
3837 GDALAntiRecursionStruct *m_psAntiRecursionStruct;
3838 std::string m_osIdentifier;
3841 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard &) =
delete;
3842 GDALAntiRecursionGuard &operator=(
const GDALAntiRecursionGuard &) =
delete;
3845 explicit GDALAntiRecursionGuard(
const std::string &osIdentifier);
3846 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard &other,
3847 const std::string &osIdentifier);
3848 ~GDALAntiRecursionGuard();
3850 int GetCallDepth()
const
3877 std::string m_osName{};
3878 std::string m_osLeftTableName{};
3879 std::string m_osRightTableName{};
3882 std::string m_osMappingTableName{};
3883 std::vector<std::string> m_osListLeftTableFields{};
3884 std::vector<std::string> m_osListRightTableFields{};
3885 std::vector<std::string> m_osListLeftMappingTableFields{};
3886 std::vector<std::string> m_osListRightMappingTableFields{};
3888 std::string m_osForwardPathLabel{};
3889 std::string m_osBackwardPathLabel{};
3890 std::string m_osRelatedTableType{};
3903 const std::string &osLeftTableName,
3904 const std::string &osRightTableName,
3907 : m_osName(osName), m_osLeftTableName(osLeftTableName),
3908 m_osRightTableName(osRightTableName), m_eCardinality(eCardinality)
3921 return m_eCardinality;
3930 return m_osLeftTableName;
3937 return m_osRightTableName;
3946 return m_osMappingTableName;
3955 m_osMappingTableName = osName;
3966 return m_osListLeftTableFields;
3977 return m_osListRightTableFields;
3988 m_osListLeftTableFields = osListFields;
3999 m_osListRightTableFields = osListFields;
4010 return m_osListLeftMappingTableFields;
4021 return m_osListRightMappingTableFields;
4032 m_osListLeftMappingTableFields = osListFields;
4044 m_osListRightMappingTableFields = osListFields;
4082 return m_osForwardPathLabel;
4102 m_osForwardPathLabel = osLabel;
4122 return m_osBackwardPathLabel;
4142 m_osBackwardPathLabel = osLabel;
4157 return m_osRelatedTableType;
4172 m_osRelatedTableType = osType;
4196 CPLErr CPL_DLL GDALRegenerateOverviewsMultiBand(
4199 const char *pszResampling, GDALProgressFunc pfnProgress,
4202 CPLErr CPL_DLL GDALRegenerateOverviewsMultiBand(
4203 const std::vector<GDALRasterBand *> &apoSrcBands,
4206 const std::vector<std::vector<GDALRasterBand *>> &aapoOverviewBands,
4207 const char *pszResampling, GDALProgressFunc pfnProgress,
4217 struct GDALOverviewResampleArgs
4231 double dfXRatioDstToSrc = 0;
4234 double dfYRatioDstToSrc = 0;
4236 double dfSrcXDelta = 0;
4238 double dfSrcYDelta = 0;
4242 const GByte *pabyChunkNodataMask =
nullptr;
4246 int nChunkXSize = 0;
4250 int nChunkYSize = 0;
4260 const char *pszResampling =
nullptr;
4262 bool bHasNoData =
false;
4264 double dfNoDataValue = 0;
4270 bool bPropagateNoData =
false;
4273 typedef CPLErr (*GDALResampleFunction)(
const GDALOverviewResampleArgs &args,
4274 const void *pChunk,
void **ppDstBuffer,
4277 GDALResampleFunction GDALGetResampleFunction(
const char *pszResampling,
4280 std::string CPL_DLL GDALGetNormalizedOvrResampling(
const char *pszResampling);
4282 GDALDataType GDALGetOvrWorkDataType(
const char *pszResampling,
4288 HFAAuxBuildOverviews(
const char *pszOvrFilename,
GDALDataset *poParentDS,
4289 GDALDataset **ppoDS,
int nBands,
const int *panBandList,
4290 int nNewOverviews,
const int *panNewOverviewList,
4291 const char *pszResampling, GDALProgressFunc pfnProgress,
4294 CPLErr CPL_DLL GTIFFBuildOverviews(
const char *pszFilename,
int nBands,
4296 int nOverviews,
const int *panOverviewList,
4297 const char *pszResampling,
4298 GDALProgressFunc pfnProgress,
4299 void *pProgressData,
4302 int CPL_DLL GDALBandGetBestOverviewLevel(
GDALRasterBand *poBand,
int &nXOff,
4303 int &nYOff,
int &nXSize,
int &nYSize,
4304 int nBufXSize,
int nBufYSize)
4305 CPL_WARN_DEPRECATED(
"Use GDALBandGetBestOverviewLevel2 instead");
4306 int CPL_DLL GDALBandGetBestOverviewLevel2(
GDALRasterBand *poBand,
int &nXOff,
4307 int &nYOff,
int &nXSize,
int &nYSize,
4308 int nBufXSize,
int nBufYSize,
4311 int CPL_DLL GDALOvLevelAdjust(
int nOvLevel,
int nXSize)
4312 CPL_WARN_DEPRECATED(
"Use GDALOvLevelAdjust2 instead");
4313 int CPL_DLL GDALOvLevelAdjust2(
int nOvLevel,
int nXSize,
int nYSize);
4314 int CPL_DLL GDALComputeOvFactor(
int nOvrXSize,
int nRasterXSize,
int nOvrYSize,
4317 GDALDataset CPL_DLL *GDALFindAssociatedAuxFile(
const char *pszBasefile,
4325 int CPL_DLL GDALCheckDatasetDimensions(
int nXSize,
int nYSize);
4326 int CPL_DLL GDALCheckBandCount(
int nBands,
int bIsZeroAllowed);
4332 int CPL_DLL GDALReadWorldFile2(
const char *pszBaseFilename,
4333 const char *pszExtension,
4334 double *padfGeoTransform,
4335 char **papszSiblingFiles,
4336 char **ppszWorldFileNameOut);
4337 int CPL_DLL GDALReadTabFile2(
const char *pszBaseFilename,
4338 double *padfGeoTransform,
char **ppszWKT,
4339 int *pnGCPCount,
GDAL_GCP **ppasGCPs,
4340 char **papszSiblingFiles,
4341 char **ppszTabFileNameOut);
4348 void GDALNullifyOpenDatasetsList();
4349 CPLMutex **GDALGetphDMMutex();
4350 CPLMutex **GDALGetphDLMutex();
4351 void GDALNullifyProxyPoolSingleton();
4352 void GDALSetResponsiblePIDForCurrentThread(
GIntBig responsiblePID);
4353 GIntBig GDALGetResponsiblePIDForCurrentThread();
4355 CPLString GDALFindAssociatedFile(
const char *pszBasename,
const char *pszExt,
4358 CPLErr CPL_DLL EXIFExtractMetadata(
char **&papszMetadata,
void *fpL,
4359 int nOffset,
int bSwabflag,
int nTIFFHEADER,
4360 int &nExifOffset,
int &nInterOffset,
4364 const char *
const *papszOptionOptions);
4365 int GDALValidateOptions(
const char *pszOptionList,
4366 const char *
const *papszOptionsToValidate,
4367 const char *pszErrorMessageOptionType,
4368 const char *pszErrorMessageContainerName);
4374 int nXSize,
int nYSize,
int nBufXSize,
4378 bool bThisLevelOnly);
4383 template <
class T>
inline bool ARE_REAL_EQUAL(T fVal1, T fVal2,
int ulp = 2)
4385 return fVal1 == fVal2 ||
4386 std::abs(fVal1 - fVal2) < std::numeric_limits<float>::epsilon() *
4387 std::abs(fVal1 + fVal2) * ulp;
4390 double GDALAdjustNoDataCloseToFloatMax(
double dfVal);
4392 #define DIV_ROUND_UP(a, b) (((a) % (b)) == 0 ? ((a) / (b)) : (((a) / (b)) + 1))
4396 #define GDALSTAT_APPROX_NUMSAMPLES 2500
4398 void GDALSerializeGCPListToXML(
CPLXMLNode *psParentNode,
4399 const std::vector<gdal::GCP> &asGCPs,
4401 void GDALDeserializeGCPListFromXML(
const CPLXMLNode *psGCPList,
4402 std::vector<gdal::GCP> &asGCPs,
4405 void GDALSerializeOpenOptionsToXML(
CPLXMLNode *psParentNode,
4406 char **papszOpenOptions);
4407 char **GDALDeserializeOpenOptionsFromXML(
const CPLXMLNode *psParentNode);
4409 int GDALCanFileAcceptSidecarFile(
const char *pszFilename);
4411 bool GDALCanReliablyUseSiblingFileList(
const char *pszFilename);
4418 } GDALBufferSampleFormat;
4420 bool CPL_DLL GDALBufferHasOnlyNoData(
const void *pBuffer,
double dfNoDataValue,
4421 size_t nWidth,
size_t nHeight,
4422 size_t nLineStride,
size_t nComponents,
4424 GDALBufferSampleFormat nSampleFormat);
4429 double CPL_DLL GDALGetNoDataValueCastToDouble(int64_t nVal);
4430 double CPL_DLL GDALGetNoDataValueCastToDouble(uint64_t nVal);
4435 void CPL_DLL GDALEnablePixelTypeSignedByteWarning(
GDALRasterBandH hBand,
4438 std::string CPL_DLL GDALGetCompressionFormatForJPEG(
VSILFILE *fp);
4439 std::string CPL_DLL GDALGetCompressionFormatForJPEG(
const void *pBuffer,
4440 size_t nBufferSize);
4444 const std::vector<std::shared_ptr<GDALMDArray>> &apoArrays,
4445 const std::vector<GDALRATFieldUsage> &aeUsages);
4450 #ifdef PLUGIN_FILENAME
4451 #define PLUGIN_SYMBOL_NAME(x) GDAL_core_##x
4453 #define PLUGIN_SYMBOL_NAME(x) GDAL_driver_##x
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:449
Convenient string class based on std::string.
Definition: cpl_string.h:320
Abstract class, implemented by GDALAttribute and GDALMDArray.
Definition: gdal_priv.h:2995
virtual const std::vector< std::shared_ptr< GDALDimension > > & GetDimensions() const =0
Return the dimensions of an attribute/array.
virtual const GDALExtendedDataType & GetDataType() const =0
Return the data type of an attribute/array.
const std::string & GetFullName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:3072
const std::string & GetName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:3062
bool Write(const GUInt64 *arrayStartIdx, const size_t *count, const GInt64 *arrayStep, const GPtrDiff_t *bufferStride, const GDALExtendedDataType &bufferDataType, const void *pSrcBuffer, const void *pSrcBufferAllocStart=nullptr, size_t nSrcBufferAllocSize=0)
Write part or totality of a multidimensional array or attribute.
Definition: gdalmultidim.cpp:2245
Class used as a session object for asynchronous requests.
Definition: gdal_priv.h:2431
void * GetBuffer()
Return buffer.
Definition: gdal_priv.h:2500
int GetXOffset() const
Return x offset.
Definition: gdal_priv.h:2468
int GetYOffset() const
Return y offset.
Definition: gdal_priv.h:2476
int GetYSize() const
Return height.
Definition: gdal_priv.h:2492
int GetBandCount() const
Return band count.
Definition: gdal_priv.h:2532
GDALDataType GetBufferType() const
Return buffer data type.
Definition: gdal_priv.h:2524
int GetBandSpace() const
Return band spacing.
Definition: gdal_priv.h:2564
int GetBufferYSize() const
Return buffer height.
Definition: gdal_priv.h:2516
int GetXSize() const
Return width.
Definition: gdal_priv.h:2484
GDALDataset * GetGDALDataset()
Return dataset.
Definition: gdal_priv.h:2460
virtual GDALAsyncStatusType GetNextUpdatedRegion(double dfTimeout, int *pnBufXOff, int *pnBufYOff, int *pnBufXSize, int *pnBufYSize)=0
= 0;
int GetPixelSpace() const
Return pixel spacing.
Definition: gdal_priv.h:2548
int * GetBandMap()
Return band map.
Definition: gdal_priv.h:2540
int GetLineSpace() const
Return line spacing.
Definition: gdal_priv.h:2556
int GetBufferXSize() const
Return buffer width.
Definition: gdal_priv.h:2508
Class modeling an attribute that has a name, a value and a type, and is typically used to describe a ...
Definition: gdal_priv.h:3226
A color table / palette.
Definition: gdal_priv.h:1348
static GDALColorTableH ToHandle(GDALColorTable *poCT)
Convert a GDALColorTable* to a GDALRasterBandH.
Definition: gdal_priv.h:1373
static GDALColorTable * FromHandle(GDALColorTableH hCT)
Convert a GDALColorTableH to a GDALColorTable*.
Definition: gdal_priv.h:1381
~GDALColorTable()
Destructor.
Class returned by GetBands() that act as a container for raster bands.
Definition: gdal_priv.h:663
Class returned by GetFeatures() that act as a container for vector features.
Definition: gdal_priv.h:1008
Layer iterator.
Definition: gdal_priv.h:954
void pointer
pointer
Definition: gdal_priv.h:962
void difference_type
difference_type
Definition: gdal_priv.h:961
std::input_iterator_tag iterator_category
iterator_category
Definition: gdal_priv.h:964
Class returned by GetLayers() that acts as a range of layers.
Definition: gdal_priv.h:940
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:503
virtual int CloseDependentDatasets()
Drop references to any other datasets referenced by this dataset.
Definition: gdaldataset.cpp:4509
virtual bool SetQueryLoggerFunc(GDALQueryLoggerFunc pfnQueryLoggerFuncIn, void *poQueryLoggerArgIn)
SetQueryLoggerFunc.
static GDALDataset * FromHandle(GDALDatasetH hDS)
Convert a GDALDatasetH to a GDALDataset*.
Definition: gdal_priv.h:884
CPLErr BuildOverviews(const char *pszResampling, int nOverviews, const int *panOverviewList, int nListBands, const int *panBandList, GDALProgressFunc pfnProgress, void *pProgressData, CSLConstList papszOptions)
Build raster overview(s)
Definition: gdaldataset.cpp:2125
virtual CPLErr CreateMaskBand(int nFlagsIn)
Adds a mask band to the dataset.
Definition: gdaldataset.cpp:3343
static GDALDataset * Open(const char *pszFilename, unsigned int nOpenFlags=0, const char *const *papszAllowedDrivers=nullptr, const char *const *papszOpenOptions=nullptr, const char *const *papszSiblingFiles=nullptr)
Definition: gdal_priv.h:892
bool IsMarkedSuppressOnClose()
Return MarkSuppressOnClose flag.
Definition: gdal_priv.h:822
OGRErr Release()
Drop a reference to this dataset, and if the reference count drops to one close (destroy) the dataset...
Definition: gdaldataset.cpp:5515
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
char ** GetOpenOptions()
Return open options.
Definition: gdal_priv.h:830
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
static GDALDatasetH ToHandle(GDALDataset *poDS)
Convert a GDALDataset* to a GDALDatasetH.
Definition: gdal_priv.h:876
GDALAccess GetAccess() const
Return access mode.
Definition: gdal_priv.h:808
Class modeling a a dimension / axis used to index multidimensional arrays.
Definition: gdal_priv.h:3715
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:3729
const std::string & GetType() const
Return the axis type.
Definition: gdal_priv.h:3751
const std::string & GetDirection() const
Return the axis direction.
Definition: gdal_priv.h:3764
GUInt64 GetSize() const
Return the size, that is the number of values along the dimension.
Definition: gdal_priv.h:3773
const std::string & GetFullName() const
Return the full name.
Definition: gdal_priv.h:3738
Class for managing the registration of file format drivers.
Definition: gdal_priv.h:2346
Format specific driver.
Definition: gdal_priv.h:2001
static GDALDriver * FromHandle(GDALDriverH hDriver)
Convert a GDALDriverH to a GDALDriver*.
Definition: gdal_priv.h:2225
static GDALDriverH ToHandle(GDALDriver *poDriver)
Convert a GDALDriver* to a GDALDriverH.
Definition: gdal_priv.h:2217
Class for a component of a compound extended data type.
Definition: gdal_priv.h:2733
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:2746
size_t GetOffset() const
Return the offset (in bytes) of the component in the compound data type.
Definition: gdal_priv.h:2755
const GDALExtendedDataType & GetType() const
Return the data type of the component.
Definition: gdal_priv.h:2764
GDALEDTComponent(const GDALEDTComponent &)
Copy constructor.
Class used to represent potentially complex data types.
Definition: gdal_priv.h:2597
bool operator!=(const GDALExtendedDataType &other) const
Non-equality operator.
Definition: gdal_priv.h:2617
GDALExtendedDataTypeSubType GetSubType() const
Return subtype.
Definition: gdal_priv.h:2656
size_t GetSize() const
Return data type size in bytes.
Definition: gdal_priv.h:2677
size_t GetMaxStringLength() const
Return the maximum length of a string in bytes.
Definition: gdal_priv.h:2686
static GDALExtendedDataType Create(GDALDataType eType)
Return a new GDALExtendedDataType of class GEDTC_NUMERIC.
Definition: gdalmultidim.cpp:10047
const std::vector< std::unique_ptr< GDALEDTComponent > > & GetComponents() const
Return the components of the data type (only valid when GetClass() == GEDTC_COMPOUND)
Definition: gdal_priv.h:2666
static GDALExtendedDataType CreateString(size_t nMaxStringLength=0, GDALExtendedDataTypeSubType eSubType=GEDTST_NONE)
Return a new GDALExtendedDataType of class GEDTC_STRING.
Definition: gdalmultidim.cpp:10112
GDALDataType GetNumericDataType() const
Return numeric data type (only valid when GetClass() == GEDTC_NUMERIC)
Definition: gdal_priv.h:2645
GDALExtendedDataTypeClass GetClass() const
Return type class.
Definition: gdal_priv.h:2635
const std::string & GetName() const
Return type name.
Definition: gdal_priv.h:2626
Class modeling a named container of GDALAttribute, GDALMDArray, OGRLayer or other GDALGroup.
Definition: gdal_priv.h:2826
const std::string & GetName() const
Return the name of the group.
Definition: gdal_priv.h:2877
const std::string & GetFullName() const
Return the full name of the group.
Definition: gdal_priv.h:2886
Interface used to get a single GDALAttribute or a set of GDALAttribute.
Definition: gdal_priv.h:2785
Class modeling a multi-dimensional array.
Definition: gdal_priv.h:3345
virtual bool IsWritable() const =0
Return whether an array is writable.
virtual const std::string & GetFilename() const =0
Return the filename that contains that array.
std::shared_ptr< GDALMDArray > at(GUInt64 idx, GUInt64VarArg... tail) const
Return a view of the array using integer indexing.
Definition: gdal_priv.h:3516
Object with metadata.
Definition: gdal_priv.h:156
static GDALMajorObjectH ToHandle(GDALMajorObject *poMajorObject)
Convert a GDALMajorObject* to a GDALMajorObjectH.
Definition: gdal_priv.h:191
static GDALMajorObject * FromHandle(GDALMajorObjectH hMajorObject)
Convert a GDALMajorObjectH to a GDALMajorObject*.
Definition: gdal_priv.h:199
Class for dataset open functions.
Definition: gdal_priv.h:301
int bStatOK
Whether stat()'ing the file was successful.
Definition: gdal_priv.h:322
GByte * pabyHeader
Buffer with first bytes of the file.
Definition: gdal_priv.h:332
int bIsDirectory
Whether the file is a directory.
Definition: gdal_priv.h:324
char ** papszOpenOptions
Open options.
Definition: gdal_priv.h:314
GDALAccess eAccess
Access flag.
Definition: gdal_priv.h:317
int nOpenFlags
Open flags.
Definition: gdal_priv.h:319
VSILFILE * fpL
Pointer to the file.
Definition: gdal_priv.h:327
char * pszFilename
Filename.
Definition: gdal_priv.h:312
int nHeaderBytes
Number of bytes in pabyHeader.
Definition: gdal_priv.h:330
const char *const * papszAllowedDrivers
Allowed drivers (NULL for all)
Definition: gdal_priv.h:335
Proxy for a plugin driver.
Definition: gdal_priv.h:2279
const char * GetMetadataItem(const char *pszName, const char *pszDomain="") override
Fetch single metadata item.
Definition: gdaldrivermanager.cpp:1303
char ** GetMetadata(const char *pszDomain) override
Fetch metadata.
Definition: gdaldrivermanager.cpp:1260
GDALPluginDriverProxy(const std::string &osPluginFileName)
Constructor for a plugin driver proxy.
Definition: gdaldrivermanager.cpp:1233
const std::string & GetPluginFileName() const
Return the plugin file name (not a full path)
Definition: gdal_priv.h:2304
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain="") override
Set single metadata item.
Definition: gdaldrivermanager.cpp:1268
The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute ...
Definition: gdal_rat.h:48
A single raster band (or channel).
Definition: gdal_priv.h:1504
void static GDALRasterBandH ToHandle(GDALRasterBand *poBand)
Convert a GDALRasterBand* to a GDALRasterBandH.
Definition: gdal_priv.h:1808
virtual bool IsMaskBand() const
Returns whether a band is a mask band.
Definition: gdalrasterband.cpp:7636
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
virtual CPLErr IReadBlock(int nBlockXOff, int nBlockYOff, void *pData)=0
Default internal implementation ...
virtual CPLErr IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void *pData, int nBufXSize, int nBufYSize, GDALDataType eBufType, GSpacing nPixelSpace, GSpacing nLineSpace, GDALRasterIOExtraArg *psExtraArg)
Read/write a region of image data for this band.
Definition: rasterio.cpp:207
virtual GDALMaskValueRange GetMaskValueRange() const
Returns the range of values that a mask band can take.
Definition: gdalrasterband.cpp:7687
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
static GDALRasterBand * FromHandle(GDALRasterBandH hBand)
Convert a GDALRasterBandH to a GDALRasterBand*.
Definition: gdal_priv.h:1816
A single raster block in the block cache.
Definition: gdal_priv.h:1190
int GetDirty() const
Return the dirty flag.
Definition: gdal_priv.h:1287
int GetXSize() const
Return the width of the block.
Definition: gdal_priv.h:1271
GPtrDiff_t GetBlockSize() const
Return the block size in bytes.
Definition: gdal_priv.h:1303
int GetYSize() const
Return the height of the block.
Definition: gdal_priv.h:1279
GDALDataType GetDataType() const
Return the data type.
Definition: gdal_priv.h:1247
int GetXOff() const
Return the x offset of the top-left corner of the block.
Definition: gdal_priv.h:1255
int AddLock(void)
Increment the lock count.
Definition: gdal_priv.h:1229
GDALRasterBand * GetBand()
Accessor to source GDALRasterBand object.
Definition: gdal_priv.h:1314
int GetYOff() const
Return the y offset of the top-left corner of the block.
Definition: gdal_priv.h:1263
int DropLock(void)
Decrement the lock count.
Definition: gdal_priv.h:1235
void * GetDataRef(void)
Return the data buffer.
Definition: gdal_priv.h:1295
Store the raw result of an attribute value, which might contain dynamically allocated structures (lik...
Definition: gdal_priv.h:3161
size_t size() const
Return the size in bytes of the raw result.
Definition: gdal_priv.h:3197
const GByte * data() const
Return pointer to the start of data.
Definition: gdal_priv.h:3191
const GByte & operator[](size_t idx) const
Return byte at specified index.
Definition: gdal_priv.h:3185
Definition of a table relationship.
Definition: gdal_priv.h:3874
void SetType(GDALRelationshipType eType)
Sets the type of the relationship.
Definition: gdal_priv.h:4060
void SetLeftMappingTableFields(const std::vector< std::string > &osListFields)
Sets the names of the mapping table fields which correspond to the participating fields from the left...
Definition: gdal_priv.h:4030
void SetMappingTableName(const std::string &osName)
Sets the name of the mapping table for many-to-many relationships.
Definition: gdal_priv.h:3953
const std::vector< std::string > & GetRightTableFields() const
Get the names of the participating fields from the right table in the relationship.
Definition: gdal_priv.h:3975
const std::vector< std::string > & GetRightMappingTableFields() const
Get the names of the mapping table fields which correspond to the participating fields from the right...
Definition: gdal_priv.h:4019
static GDALRelationshipH ToHandle(GDALRelationship *poRelationship)
Convert a GDALRelationship* to a GDALRelationshipH.
Definition: gdal_priv.h:4177
const std::vector< std::string > & GetLeftMappingTableFields() const
Get the names of the mapping table fields which correspond to the participating fields from the left ...
Definition: gdal_priv.h:4008
const std::string & GetMappingTableName() const
Get the name of the mapping table for many-to-many relationships.
Definition: gdal_priv.h:3944
const std::string & GetForwardPathLabel() const
Get the label of the forward path for the relationship.
Definition: gdal_priv.h:4080
const std::string & GetLeftTableName() const
Get the name of the left (or base/origin) table in the relationship.
Definition: gdal_priv.h:3928
const std::vector< std::string > & GetLeftTableFields() const
Get the names of the participating fields from the left table in the relationship.
Definition: gdal_priv.h:3964
void SetLeftTableFields(const std::vector< std::string > &osListFields)
Sets the names of the participating fields from the left table in the relationship.
Definition: gdal_priv.h:3986
GDALRelationshipCardinality GetCardinality() const
Get the cardinality of the relationship.
Definition: gdal_priv.h:3919
const std::string & GetBackwardPathLabel() const
Get the label of the backward path for the relationship.
Definition: gdal_priv.h:4120
void SetRightTableFields(const std::vector< std::string > &osListFields)
Sets the names of the participating fields from the right table in the relationship.
Definition: gdal_priv.h:3997
void SetForwardPathLabel(const std::string &osLabel)
Sets the label of the forward path for the relationship.
Definition: gdal_priv.h:4100
void SetBackwardPathLabel(const std::string &osLabel)
Sets the label of the backward path for the relationship.
Definition: gdal_priv.h:4140
const std::string & GetName() const
Get the name of the relationship.
Definition: gdal_priv.h:3913
void SetRightMappingTableFields(const std::vector< std::string > &osListFields)
Sets the names of the mapping table fields which correspond to the participating fields from the righ...
Definition: gdal_priv.h:4042
const std::string & GetRelatedTableType() const
Get the type string of the related table.
Definition: gdal_priv.h:4155
static GDALRelationship * FromHandle(GDALRelationshipH hRelationship)
Convert a GDALRelationshipH to a GDALRelationship*.
Definition: gdal_priv.h:4184
GDALRelationship(const std::string &osName, const std::string &osLeftTableName, const std::string &osRightTableName, GDALRelationshipCardinality eCardinality=GDALRelationshipCardinality::GRC_ONE_TO_MANY)
Constructor for a relationship between two tables.
Definition: gdal_priv.h:3902
const std::string & GetRightTableName() const
Get the name of the right (or related/destination) table in the relationship.
Definition: gdal_priv.h:3935
GDALRelationshipType GetType() const
Get the type of the relationship.
Definition: gdal_priv.h:4051
void SetRelatedTableType(const std::string &osType)
Sets the type string of the related table.
Definition: gdal_priv.h:4170
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:893
Definition of a field domain.
Definition: ogr_feature.h:1627
Definition of a geometry field of an OGRFeatureDefn.
Definition: ogr_feature.h:346
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:377
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:74
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:169
This class represents a style table.
Definition: ogr_featurestyle.h:86
C++ wrapper over the C GDAL_GCP structure.
Definition: gdal_priv.h:362
double & X()
Returns a reference to the "X" member.
Definition: gdal_priv.h:421
double Line() const
Returns the "line" member.
Definition: gdal_priv.h:403
double X() const
Returns the "X" member.
Definition: gdal_priv.h:415
double & Line()
Returns a reference to the "line" member.
Definition: gdal_priv.h:409
double & Z()
Returns a reference to the "Z" member.
Definition: gdal_priv.h:445
double Pixel() const
Returns the "pixel" member.
Definition: gdal_priv.h:391
const char * Id() const
Returns the "id" member.
Definition: gdal_priv.h:375
double Y() const
Returns the "Y" member.
Definition: gdal_priv.h:427
double & Y()
Returns a reference to the "Y" member.
Definition: gdal_priv.h:433
double & Pixel()
Returns a reference to the "pixel" member.
Definition: gdal_priv.h:397
const char * Info() const
Returns the "info" member.
Definition: gdal_priv.h:383
const GDAL_GCP * c_ptr() const
Casts as a C GDAL_GCP pointer.
Definition: gdal_priv.h:451
double Z() const
Returns the "Z" member.
Definition: gdal_priv.h:439
Various convenience functions for CPL.
CPLErr
Error category.
Definition: cpl_error.h:53
int CPLErrorNum
Error number.
Definition: cpl_error.h:95
Definitions for CPL mini XML Parser/Serializer.
int GPtrDiff_t
Integer type large enough to hold the difference between 2 addresses.
Definition: cpl_port.h:256
#define STRCASECMP(a, b)
Alias for strcasecmp()
Definition: cpl_port.h:544
#define CPL_NULL_TERMINATED
Null terminated variadic.
Definition: cpl_port.h:938
unsigned long long GUIntBig
Large unsigned integer type (generally 64-bit unsigned integer type).
Definition: cpl_port.h:218
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:299
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:295
GIntBig GInt64
Signed 64 bit integer type.
Definition: cpl_port.h:236
#define CPL_PRINT_FUNC_FORMAT(format_idx, arg_idx)
Tag a function to have printf() formatting.
Definition: cpl_port.h:950
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition: cpl_port.h:1042
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1183
GUIntBig GUInt64
Unsigned 64 bit integer type.
Definition: cpl_port.h:238
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:976
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:185
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:215
Various convenience functions for working with strings and string lists.
struct CPLVirtualMem CPLVirtualMem
Opaque type that represents a virtual memory mapping.
Definition: cpl_virtualmem.h:62
GUIntBig vsi_l_offset
Type for a file offset.
Definition: cpl_vsi.h:146
Public (C callable) GDAL entry points.
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition: gdal.h:315
void(* GDALQueryLoggerFunc)(const char *pszSQL, const char *pszError, int64_t lNumRecords, int64_t lExecutionTimeMilliseconds, void *pQueryLoggerArg)
Type of functions to pass to GDALDatasetSetQueryLoggerFunc.
Definition: gdal.h:1309
GDALRATTableType
RAT table type (thematic or athematic)
Definition: gdal.h:2028
GDALAccess
Definition: gdal.h:125
@ GA_ReadOnly
Definition: gdal.h:126
GDALPaletteInterp
Definition: gdal.h:253
@ GPI_RGB
Definition: gdal.h:255
GDALDataType
Definition: gdal.h:64
@ GDT_Byte
Definition: gdal.h:66
@ GDT_Float64
Definition: gdal.h:75
@ GDT_Unknown
Definition: gdal.h:65
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:291
GDALRasterAttributeTableH GDALCreateRasterAttributeTableFromMDArrays(GDALRATTableType eTableType, int nArrays, const GDALMDArrayH *ahArrays, const GDALRATFieldUsage *paeUsages)
Return a virtual Raster Attribute Table from several GDALMDArray's.
Definition: gdalmultidim_rat.cpp:429
GDALExtendedDataTypeClass
Enumeration giving the class of a GDALExtendedDataType.
Definition: gdal.h:321
@ GEDTC_NUMERIC
Numeric value.
Definition: gdal.h:323
GDALRelationshipCardinality
Cardinality of relationship.
Definition: gdal.h:2114
@ GRC_ONE_TO_MANY
One-to-many.
Definition: gdal.h:2118
GDALRIOResampleAlg
RasterIO() resampling method.
Definition: gdal.h:143
CPLErr GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition: gdaldataset.cpp:4119
void * GDALRelationshipH
Opaque type used for the C bindings of the C++ GDALRelationship class.
Definition: gdal.h:312
int GDALGetDataTypeSizeBytes(GDALDataType)
Get data type size in bytes.
Definition: gdal_misc.cpp:337
GDALDatasetH GDALOpenEx(const char *pszFilename, unsigned int nOpenFlags, const char *const *papszAllowedDrivers, const char *const *papszOpenOptions, const char *const *papszSiblingFiles)
Open a raster or vector file as a GDALDataset.
Definition: gdaldataset.cpp:3569
GDALExtendedDataTypeSubType
Enumeration giving the subtype of a GDALExtendedDataType.
Definition: gdal.h:334
@ GEDTST_NONE
None.
Definition: gdal.h:336
void * GDALMajorObjectH
Opaque type used for the C bindings of the C++ GDALMajorObject class.
Definition: gdal.h:288
GDALColorInterp
Definition: gdal.h:227
GDALRelationshipType
Type of relationship.
Definition: gdal.h:2130
@ GRT_ASSOCIATION
Association relationship.
Definition: gdal.h:2134
GDALAsyncStatusType
status of the asynchronous stream
Definition: gdal.h:111
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition: gdal.h:297
GDALRWFlag
Definition: gdal.h:132
void * GDALRasterBandH
Opaque type used for the C bindings of the C++ GDALRasterBand class.
Definition: gdal.h:294
void * GDALColorTableH
Opaque type used for the C bindings of the C++ GDALColorTable class.
Definition: gdal.h:300
std::unique_ptr< GDALDataset, GDALDatasetUniquePtrDeleter > GDALDatasetUniquePtr
Unique pointer type for GDALDataset.
Definition: gdal_priv.h:1179
constexpr GDALSuggestedBlockAccessPattern GSBAP_UNKNOWN
Unknown, or no particular read order is suggested.
Definition: gdal_priv.h:1486
int GDALSuggestedBlockAccessPattern
Suggested/most efficient access pattern to blocks.
Definition: gdal_priv.h:1483
constexpr GDALSuggestedBlockAccessPattern GSBAP_RANDOM
Random access to blocks is efficient.
Definition: gdal_priv.h:1489
GDALDriverManager * GetGDALDriverManager(void)
Fetch the global GDAL driver manager.
Definition: gdaldrivermanager.cpp:102
GDALMaskValueRange
Range of values found in a mask band.
Definition: gdal_priv.h:1475
@ GMVR_0_AND_1_ONLY
Definition: gdal_priv.h:1478
@ GMVR_0_AND_255_ONLY
Definition: gdal_priv.h:1479
constexpr GDALSuggestedBlockAccessPattern GSBAP_TOP_TO_BOTTOM
Reading by strips from top to bottom is the most efficient.
Definition: gdal_priv.h:1492
GDALIdentifyEnum
Enumeration used by GDALDriver::pfnIdentify().
Definition: gdal_priv.h:1975
@ GDAL_IDENTIFY_TRUE
Identify determined the file is recognized by the probed driver.
Definition: gdal_priv.h:1982
@ GDAL_IDENTIFY_FALSE
Identify determined the file is not recognized by the probed driver.
Definition: gdal_priv.h:1980
@ GDAL_IDENTIFY_UNKNOWN
Identify could not determine if the file is recognized or not by the probed driver.
Definition: gdal_priv.h:1978
constexpr GDALSuggestedBlockAccessPattern GSBAP_LARGEST_CHUNK_POSSIBLE
Reading the largest chunk from the raster is the most efficient (can be combined with above values).
Definition: gdal_priv.h:1499
constexpr GDALSuggestedBlockAccessPattern GSBAP_BOTTOM_TO_TOP
Reading by strips from bottom to top is the most efficient.
Definition: gdal_priv.h:1495
Core portability services for cross-platform OGR code.
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:416
@ wkbUnknown
unknown type, non-standard
Definition: ogr_core.h:417
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:387
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:1570
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:434
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:442
Document node structure.
Definition: cpl_minixml.h:71
Color tuple.
Definition: gdal.h:1955
Object returned by GetFeatures() iterators.
Definition: gdal_priv.h:905
The GDALSubdatasetInfo abstract class provides methods to extract and manipulate subdataset informati...
Definition: gdalsubdatasetinfo.h:43
Ground Control Point.
Definition: gdal.h:1075
Virtual file handle.
Definition: cpl_vsi_virtual.h:63