15#ifndef GDALDATASET_H_INCLUDED
16#define GDALDATASET_H_INCLUDED
21#include "gdal_geotransform.h"
22#include "gdal_majorobject.h"
23#include "gdal_defaultoverviews.h"
41class swq_select_parse_options;
50typedef struct GDALSQLParseInfo GDALSQLParseInfo;
54#if !defined(OPTIONAL_OUTSIDE_GDAL)
55#if defined(GDAL_COMPILATION)
56#define OPTIONAL_OUTSIDE_GDAL(val)
58#define OPTIONAL_OUTSIDE_GDAL(val) = val
67#if defined(GDAL_BANDMAP_TYPE_CONST_SAFE)
68#define BANDMAP_TYPE const int *
70#define BANDMAP_TYPE int *
78 GDALOpenEx(
const char *pszFilename,
unsigned int nOpenFlags,
79 const char *
const *papszAllowedDrivers,
80 const char *
const *papszOpenOptions,
81 const char *
const *papszSiblingFiles);
85 friend class GDALDefaultOverviews;
86 friend class GDALProxyDataset;
89 CPL_INTERNAL
void AddToDatasetOpenList();
91 CPL_INTERNAL
void UnregisterFromSharedDataset();
93 CPL_INTERNAL
static void ReportErrorV(
const char *pszDSName,
95 const char *fmt, va_list args);
103 int nRasterXSize = 512;
104 int nRasterYSize = 512;
108 static constexpr int OPEN_FLAGS_CLOSED = -1;
113 bool bForceCachedIO =
false;
114 bool bShared =
false;
115 bool bIsInternal =
true;
116 bool bSuppressOnClose =
false;
118 mutable std::map<std::string, std::unique_ptr<OGRFieldDomain>>
119 m_oMapFieldDomains{};
124 void RasterInitialize(
int,
int);
126 void SetBand(
int nNewBand, std::unique_ptr<GDALRasterBand> poBand);
128 GDALDefaultOverviews oOvManager{};
130 virtual CPLErr IBuildOverviews(
const char *pszResampling,
int nOverviews,
131 const int *panOverviewList,
int nListBands,
132 const int *panBandList,
133 GDALProgressFunc pfnProgress,
138 IRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
int nYSize,
139 void *pData,
int nBufXSize,
int nBufYSize,
GDALDataType eBufType,
140 int nBandCount, BANDMAP_TYPE panBandMap,
GSpacing nPixelSpace,
146 BlockBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
147 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
149 const int *panBandMap,
GSpacing nPixelSpace,
152 CPLErr BlockBasedFlushCache(
bool bAtClosing);
155 BandBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
156 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
158 const int *panBandMap,
GSpacing nPixelSpace,
163 RasterIOResampled(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
164 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
166 const int *panBandMap,
GSpacing nPixelSpace,
170 CPLErr ValidateRasterIOOrAdviseReadParameters(
171 const char *pszCallingFunc,
int *pbStopProcessingOnCENone,
int nXOff,
172 int nYOff,
int nXSize,
int nYSize,
int nBufXSize,
int nBufYSize,
173 int nBandCount,
const int *panBandMap);
176 int nXSize,
int nYSize,
void *pData,
177 int nBufXSize,
int nBufYSize,
179 const int *panBandMap,
GSpacing nPixelSpace,
183 void ShareLockWithParentDataset(
GDALDataset *poParentDataset);
185 bool m_bCanBeReopened =
false;
187 virtual bool CanBeCloned(
int nScopeFlags,
bool bCanShareState)
const;
189 friend class GDALThreadSafeDataset;
190 friend class MEMDataset;
191 virtual std::unique_ptr<GDALDataset> Clone(
int nScopeFlags,
192 bool bCanShareState)
const;
196 void CleanupPostFileClosing();
198 virtual int CloseDependentDatasets();
200 int ValidateLayerCreationOptions(
const char *
const *papszLCO);
202 char **papszOpenOptions =
nullptr;
209 void LeaveReadWrite();
212 void TemporarilyDropReadWriteLock();
213 void ReacquireReadWriteLock();
215 void DisableReadWriteMutex();
220 bool IsAllBands(
int nBandCount,
const int *panBandList)
const;
228 int GetRasterXSize()
const;
229 int GetRasterYSize()
const;
230 int GetRasterCount()
const;
241 void *poQueryLoggerArgIn);
255 class CPL_DLL Iterator
258 std::unique_ptr<Private> m_poPrivate;
262 Iterator(
const Iterator &oOther);
264 Iterator(Iterator &&oOther)
noexcept;
268 Iterator &operator++();
269 bool operator!=(
const Iterator &it)
const;
273 const Iterator
begin()
const;
275 const Iterator
end()
const;
298 class CPL_DLL Iterator
301 std::unique_ptr<Private> m_poPrivate;
307 Iterator &operator++();
308 bool operator!=(
const Iterator &it)
const;
312 const Iterator
begin()
const;
314 const Iterator
end()
const;
324 virtual CPLErr FlushCache(
bool bAtClosing =
false);
325 virtual CPLErr DropCache();
327 virtual GIntBig GetEstimatedRAMUsage();
336 const char *GetProjectionRef(
void)
const;
337 CPLErr SetProjection(
const char *pszProjection);
342 CPLErr GetGeoTransform(
double *padfGeoTransform)
const
343#if defined(GDAL_COMPILATION) && !defined(DOXYGEN_XML)
344 CPL_WARN_DEPRECATED(
"Use GetGeoTransform(GDALGeoTransform&) instead")
348 CPLErr SetGeoTransform(
const double *padfGeoTransform)
349#if defined(GDAL_COMPILATION) && !defined(DOXYGEN_XML)
351 "Use SetGeoTransform(const GDALGeoTransform&) instead")
359 CPLErr GeolocationToPixelLine(
361 double *pdfPixel,
double *pdfLine,
366 virtual void *GetInternalHandle(
const char *pszHandleName);
368 virtual char **GetFileList(
void);
370 const char *GetDriverName()
const;
373 virtual int GetGCPCount();
379 const char *GetGCPProjection()
const;
381 const char *pszGCPProjection);
383 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
385 int nBandCount,
int *panBandList,
386 char **papszOptions);
388 virtual CPLErr CreateMaskBand(
int nFlagsIn);
391 BeginAsyncReader(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
void *pBuf,
393 int nBandCount,
int *panBandMap,
int nPixelSpace,
394 int nLineSpace,
int nBandSpace,
char **papszOptions);
398 struct RawBinaryLayout
400 enum class Interleaving
407 std::string osRawFilename{};
408 Interleaving eInterleaving = Interleaving::UNKNOWN;
410 bool bLittleEndianOrder =
false;
418 virtual bool GetRawBinaryLayout(RawBinaryLayout &);
423 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
425 const int *panBandMap,
GSpacing nPixelSpace,
431 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
433 const int *panBandMap,
GSpacing nPixelSpace,
438 virtual CPLStringList GetCompressionFormats(
int nXOff,
int nYOff,
439 int nXSize,
int nYSize,
441 const int *panBandList);
442 virtual CPLErr ReadCompressedData(
const char *pszFormat,
int nXOff,
443 int nYOff,
int nXSize,
int nYSize,
444 int nBands,
const int *panBandList,
445 void **ppBuffer,
size_t *pnBufferSize,
446 char **ppszDetailedFormat);
460 int GetShared()
const;
463 void MarkSuppressOnClose();
464 void UnMarkSuppressOnClose();
471 return bSuppressOnClose;
479 return papszOpenOptions;
482 bool IsThreadSafe(
int nScopeFlags)
const;
490 return papszOpenOptions;
494 static GDALDataset **GetOpenDatasets(
int *pnDatasetCount);
498 BuildOverviews(
const char *pszResampling,
int nOverviews,
499 const int *panOverviewList,
int nListBands,
500 const int *panBandList, GDALProgressFunc pfnProgress,
502 CSLConstList papszOptions OPTIONAL_OUTSIDE_GDAL(
nullptr));
504 CPLErr BuildOverviews(
const char *pszResampling,
int nOverviews,
505 const int *panOverviewList,
int nListBands,
506 const int *panBandList, GDALProgressFunc pfnProgress,
510 virtual CPLErr AddOverviews(
const std::vector<GDALDataset *> &apoSrcOvrDS,
511 GDALProgressFunc pfnProgress,
518 static
void ReportError(const
char *pszDSName,
CPLErr eErrClass,
523 char **GetMetadata(
const char *pszDomain =
"")
override;
529 const char *pszDomain)
override;
532 char **GetMetadataDomainList()
override;
534 virtual void ClearStatistics();
536 std::shared_ptr<GDALMDArray> AsMDArray(
CSLConstList papszOptions =
nullptr);
555 unsigned int nOpenFlags = 0,
556 const char *
const *papszAllowedDrivers =
nullptr,
557 const char *
const *papszOpenOptions =
nullptr,
558 const char *
const *papszSiblingFiles =
nullptr)
560 return FromHandle(
GDALOpenEx(pszFilename, nOpenFlags,
561 papszAllowedDrivers, papszOpenOptions,
577 void SetEnableOverviews(
bool bEnable);
580 bool AreOverviewsEnabled()
const;
582 static void ReportUpdateNotSupportedByDriver(
const char *pszDriverName);
587 Private *m_poPrivate;
589 CPL_INTERNAL
OGRLayer *BuildLayerFromSelectInfo(
590 swq_select *psSelectInfo,
OGRGeometry *poSpatialFilter,
591 const char *pszDialect, swq_select_parse_options *poSelectParseOptions);
595 virtual int GetLayerCount()
const;
596 virtual const OGRLayer *GetLayer(
int iLayer)
const;
601 const_cast<const GDALDataset *
>(
this)->GetLayer(iLayer));
604 virtual bool IsLayerPrivate(
int iLayer)
const;
624 std::unique_ptr<Private> m_poPrivate;
632 std::input_iterator_tag;
658 OGRLayer *operator[](
size_t iLayer);
659 OGRLayer *operator[](
const char *pszLayername);
685 std::unique_ptr<Private> m_poPrivate;
693 std::input_iterator_tag;
718 const OGRLayer *operator[](
int iLayer);
719 const OGRLayer *operator[](
size_t iLayer);
720 const OGRLayer *operator[](
const char *pszLayername);
725 virtual OGRLayer *GetLayerByName(
const char *);
727 int GetLayerIndex(
const char *pszName)
const;
729 virtual OGRErr DeleteLayer(
int iLayer);
731 virtual void ResetReading();
733 double *pdfProgressPct,
734 GDALProgressFunc pfnProgress,
735 void *pProgressData);
749 class CPL_DLL Iterator
752 std::unique_ptr<Private> m_poPrivate;
756 Iterator(
const Iterator &oOther);
758 Iterator(Iterator &&oOther)
noexcept;
762 Iterator &operator++();
763 bool operator!=(
const Iterator &it)
const;
767 const Iterator
begin()
const;
769 const Iterator
end()
const;
774 virtual int TestCapability(
const char *)
const;
776 virtual std::vector<std::string>
777 GetFieldDomainNames(
CSLConstList papszOptions =
nullptr)
const;
779 virtual const OGRFieldDomain *GetFieldDomain(
const std::string &name)
const;
781 virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
782 std::string &failureReason);
784 virtual bool DeleteFieldDomain(
const std::string &name,
785 std::string &failureReason);
787 virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
788 std::string &failureReason);
790 virtual std::vector<std::string>
791 GetRelationshipNames(
CSLConstList papszOptions =
nullptr)
const;
794 GetRelationship(
const std::string &name)
const;
797 AddRelationship(std::unique_ptr<GDALRelationship> &&relationship,
798 std::string &failureReason);
800 virtual bool DeleteRelationship(
const std::string &name,
801 std::string &failureReason);
804 UpdateRelationship(std::unique_ptr<GDALRelationship> &&relationship,
805 std::string &failureReason);
808 OGRLayer *CreateLayer(
const char *pszName);
810 OGRLayer *CreateLayer(
const char *pszName, std::nullptr_t);
813 OGRLayer *CreateLayer(
const char *pszName,
818 OGRLayer *CreateLayer(
const char *pszName,
823 char **papszOptions =
nullptr);
826 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
830 virtual OGRLayer *ExecuteSQL(
const char *pszStatement,
832 const char *pszDialect);
833 virtual void ReleaseResultSet(
OGRLayer *poResultsSet);
834 virtual OGRErr AbortSQL();
836 int GetRefCount()
const;
837 int GetSummaryRefCount()
const;
840 virtual OGRErr StartTransaction(
int bForce = FALSE);
841 virtual OGRErr CommitTransaction();
842 virtual OGRErr RollbackTransaction();
844 virtual std::shared_ptr<GDALGroup> GetRootGroup()
const;
846 static std::string BuildFilename(
const char *pszFilename,
847 const char *pszReferencePath,
848 bool bRelativeToReferencePath);
851 static int IsGenericSQLDialect(
const char *pszDialect);
855 BuildParseInfo(swq_select *psSelectInfo,
856 swq_select_parse_options *poSelectParseOptions);
857 static void DestroyParseInfo(GDALSQLParseInfo *psParseInfo);
859 const char *pszDialect,
860 swq_select_parse_options *poSelectParseOptions);
862 static constexpr const char *
const apszSpecialSubDatasetSyntax[] = {
863 "NITF_IM:{ANY}:{FILENAME}",
"PDF:{ANY}:{FILENAME}",
864 "RASTERLITE:{FILENAME},{ANY}",
"TILEDB:\"{FILENAME}\":{ANY}",
865 "TILEDB:{FILENAME}:{ANY}"};
870 virtual OGRLayer *ICreateLayer(
const char *pszName,
875 OGRErr ProcessSQLCreateIndex(
const char *);
876 OGRErr ProcessSQLDropIndex(
const char *);
877 OGRErr ProcessSQLDropTable(
const char *);
878 OGRErr ProcessSQLAlterTableAddColumn(
const char *);
879 OGRErr ProcessSQLAlterTableDropColumn(
const char *);
880 OGRErr ProcessSQLAlterTableAlterColumn(
const char *);
881 OGRErr ProcessSQLAlterTableRenameColumn(
const char *);
885 friend class GDALProxyPoolDataset;
893struct CPL_DLL GDALDatasetUniquePtrDeleter
904struct CPL_DLL GDALDatasetUniquePtrReleaser
919using GDALDatasetUniquePtr =
920 std::unique_ptr<GDALDataset, GDALDatasetUniquePtrDeleter>;
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:454
Class used as a session object for asynchronous requests.
Definition gdal_asyncreader.h:32
Class returned by GetBands() that act as a container for raster bands.
Definition gdal_dataset.h:246
Class returned by GetBands() that act as a container for raster bands.
Definition gdal_dataset.h:288
Layer iterator.
Definition gdal_dataset.h:683
std::input_iterator_tag iterator_category
iterator_category
Definition gdal_dataset.h:692
void difference_type
difference_type
Definition gdal_dataset.h:690
void pointer
pointer
Definition gdal_dataset.h:691
Class returned by GetLayers() that acts as a range of layers.
Definition gdal_dataset.h:668
Class returned by GetFeatures() that act as a container for vector features.
Definition gdal_dataset.h:740
Layer iterator.
Definition gdal_dataset.h:622
void pointer
pointer
Definition gdal_dataset.h:630
void difference_type
difference_type
Definition gdal_dataset.h:629
std::input_iterator_tag iterator_category
iterator_category
Definition gdal_dataset.h:631
Class returned by GetLayers() that acts as a range of layers.
Definition gdal_dataset.h:609
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:76
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
virtual bool SetQueryLoggerFunc(GDALQueryLoggerFunc pfnQueryLoggerFuncIn, void *poQueryLoggerArgIn)
SetQueryLoggerFunc.
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_dataset.h:554
OGRErr Release()
Drop a reference to this dataset, and if the reference count drops to one close (destroy) the dataset...
Definition gdaldataset.cpp:5901
OGRLayer * GetLayer(int iLayer)
Fetch a layer by index.
Definition gdal_dataset.h:598
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
char ** GetOpenOptions()
Return open options.
Definition gdal_dataset.h:477
bool IsMarkedSuppressOnClose() const
Return MarkSuppressOnClose flag.
Definition gdal_dataset.h:469
static GDALDataset * FromHandle(GDALDatasetH hDS)
Convert a GDALDatasetH to a GDALDataset*.
Definition gdal_dataset.h:547
static GDALDatasetH ToHandle(GDALDataset *poDS)
Convert a GDALDataset* to a GDALDatasetH.
Definition gdal_dataset.h:540
GDALAccess GetAccess() const
Return access mode.
Definition gdal_dataset.h:455
Class for managing the registration of file format drivers.
Definition gdal_drivermanager.h:42
Format specific driver.
Definition gdal_driver.h:63
Class modeling a named container of GDALAttribute, GDALMDArray, OGRLayer or other GDALGroup.
Definition gdal_multidim.h:305
Class modeling a multi-dimensional array.
Definition gdal_multidim.h:852
Object with metadata.
Definition gdal_majorobject.h:43
A single raster band (or channel).
Definition gdal_rasterband.h:105
Definition of a table relationship.
Definition gdal_relationship.h:38
Simple container for a bounding region (rectangle)
Definition ogr_core.h:44
A simple feature, including geometry and attributes.
Definition ogr_feature.h:934
Definition of a field domain.
Definition ogr_feature.h:1661
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:332
Abstract base class for all geometry classes.
Definition ogr_geometry.h:357
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:61
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:152
This class represents a style table.
Definition ogr_featurestyle.h:69
CPLErr
Error category.
Definition cpl_error.h:37
int CPLErrorNum
Error number.
Definition cpl_error.h:80
Core portability definitions for CPL.
#define CPL_PRINT_FUNC_FORMAT(format_idx, arg_idx)
Tag a function to have printf() formatting.
Definition cpl_port.h:844
#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:936
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1087
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:870
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:205
GUIntBig vsi_l_offset
Type for a file offset.
Definition cpl_vsi.h:136
Public (C callable) GDAL entry points.
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition gdal.h:386
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:1483
GDALAccess
Definition gdal.h:118
@ GA_ReadOnly
Definition gdal.h:119
GDALDataType
Definition gdal.h:48
@ GDT_Unknown
Definition gdal.h:49
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:3914
CPLErr GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition gdaldataset.cpp:4478
GDALRWFlag
Definition gdal.h:125
Forward definitions of GDAL/OGR/OSR C handle types.
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition gdal_fwd.h:42
Core portability services for cross-platform OGR code.
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:405
@ wkbUnknown
unknown type, non-standard
Definition ogr_core.h:406
int OGRErr
Type for a OGR error.
Definition ogr_core.h:370
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1604
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:470
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:478
Object returned by GetFeatures() iterators.
Definition gdal_dataset.h:567
Ground Control Point.
Definition gdal.h:1221