Coverage Report

Created: 2026-09-14 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/gcore/gdal.h
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  GDAL Core
4
 * Purpose:  GDAL Core C/Public declarations.
5
 * Author:   Frank Warmerdam, warmerdam@pobox.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 1998, 2002 Frank Warmerdam
9
 * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com>
10
 *
11
 * SPDX-License-Identifier: MIT
12
 ****************************************************************************/
13
14
#ifndef GDAL_H_INCLUDED
15
#define GDAL_H_INCLUDED
16
17
/**
18
 * \file gdal.h
19
 *
20
 * Public (C callable) GDAL entry points.
21
 */
22
23
#ifndef DOXYGEN_SKIP
24
#if defined(GDAL_COMPILATION)
25
#define DO_NOT_DEFINE_GDAL_DATE_NAME
26
#endif
27
#include "gdal_fwd.h"
28
#include "gdal_version.h"
29
#include "cpl_port.h"
30
#include "cpl_error.h"
31
#include "cpl_progress.h"
32
#include "cpl_virtualmem.h"
33
#include "cpl_minixml.h"
34
#include "ogr_api.h"
35
#endif
36
37
#include <stdbool.h>
38
#include <stdint.h>
39
40
/* -------------------------------------------------------------------- */
41
/*      Significant constants.                                          */
42
/* -------------------------------------------------------------------- */
43
44
CPL_C_START
45
46
/*! Pixel data types */
47
typedef enum
48
{
49
    /*! Unknown or unspecified type */ GDT_Unknown = 0,
50
    /*! 8-bit unsigned integer (GDT_Byte in GDAL < 3.13) */ GDT_UInt8 = 1,
51
    /*! 8-bit signed integer (GDAL >= 3.7) */ GDT_Int8 = 14,
52
    /*! 16-bit unsigned integer */ GDT_UInt16 = 2,
53
    /*! 16-bit signed integer */ GDT_Int16 = 3,
54
    /*! 32-bit unsigned integer */ GDT_UInt32 = 4,
55
    /*! 32-bit signed integer */ GDT_Int32 = 5,
56
    /*! 64 bit unsigned integer (GDAL >= 3.5)*/ GDT_UInt64 = 12,
57
    /*! 64 bit signed integer  (GDAL >= 3.5)*/ GDT_Int64 = 13,
58
    /*! 16-bit floating point */ GDT_Float16 = 15,
59
    /*! 32-bit floating point */ GDT_Float32 = 6,
60
    /*! 64-bit floating point */ GDT_Float64 = 7,
61
    /*! Complex Int16 */ GDT_CInt16 = 8,
62
    /*! Complex Int32 */ GDT_CInt32 = 9,
63
    /*! Complex Float16 */ GDT_CFloat16 = 16,
64
    /*! Complex Float32 */ GDT_CFloat32 = 10,
65
    /*! Complex Float64 */ GDT_CFloat64 = 11,
66
    GDT_TypeCount = 17 /* maximum type # + 1 */
67
} GDALDataType;
68
69
/** GDT_Byte is the name used before GDAL 3.13 for GDT_UInt8 */
70
0
#define GDT_Byte GDT_UInt8
71
72
int CPL_DLL CPL_STDCALL GDALGetDataTypeSize(GDALDataType)
73
    /*! @cond Doxygen_Suppress */
74
    CPL_WARN_DEPRECATED("Use GDALGetDataTypeSizeBits() or "
75
                        "GDALGetDataTypeSizeBytes() * 8 instead")
76
    /*! @endcond */
77
    ;
78
int CPL_DLL CPL_STDCALL GDALGetDataTypeSizeBits(GDALDataType eDataType);
79
int CPL_DLL CPL_STDCALL GDALGetDataTypeSizeBytes(GDALDataType);
80
int CPL_DLL CPL_STDCALL GDALDataTypeIsComplex(GDALDataType);
81
int CPL_DLL CPL_STDCALL GDALDataTypeIsInteger(GDALDataType);
82
int CPL_DLL CPL_STDCALL GDALDataTypeIsFloating(GDALDataType);
83
int CPL_DLL CPL_STDCALL GDALDataTypeIsSigned(GDALDataType);
84
const char CPL_DLL *CPL_STDCALL GDALGetDataTypeName(GDALDataType);
85
GDALDataType CPL_DLL CPL_STDCALL GDALGetDataTypeByName(const char *);
86
GDALDataType CPL_DLL CPL_STDCALL GDALDataTypeUnion(GDALDataType, GDALDataType);
87
GDALDataType CPL_DLL CPL_STDCALL GDALDataTypeUnionWithValue(GDALDataType eDT,
88
                                                            double dValue,
89
                                                            int bComplex);
90
GDALDataType CPL_DLL CPL_STDCALL GDALFindDataType(int nBits, int bSigned,
91
                                                  int bFloating, int bComplex);
92
GDALDataType CPL_DLL CPL_STDCALL GDALFindDataTypeForValue(double dValue,
93
                                                          int bComplex);
94
double CPL_DLL GDALAdjustValueToDataType(GDALDataType eDT, double dfValue,
95
                                         int *pbClamped, int *pbRounded);
96
bool CPL_DLL GDALIsValueExactAs(double dfValue, GDALDataType eDT);
97
bool CPL_DLL GDALIsValueInRangeOf(double dfValue, GDALDataType eDT);
98
bool CPL_DLL GDALGetDataTypeMinMaxAsDouble(GDALDataType eType, double *pdfMin,
99
                                           double *pdfMax);
100
GDALDataType CPL_DLL CPL_STDCALL GDALGetNonComplexDataType(GDALDataType);
101
int CPL_DLL CPL_STDCALL GDALDataTypeIsConversionLossy(GDALDataType eTypeFrom,
102
                                                      GDALDataType eTypeTo);
103
104
/**
105
 * status of the asynchronous stream
106
 */
107
typedef enum
108
{
109
    GARIO_PENDING = 0,
110
    GARIO_UPDATE = 1,
111
    GARIO_ERROR = 2,
112
    GARIO_COMPLETE = 3,
113
    GARIO_TypeCount = 4
114
} GDALAsyncStatusType;
115
116
const char CPL_DLL *CPL_STDCALL GDALGetAsyncStatusTypeName(GDALAsyncStatusType);
117
GDALAsyncStatusType CPL_DLL CPL_STDCALL
118
GDALGetAsyncStatusTypeByName(const char *);
119
120
/*! Flag indicating read/write, or read-only access to data. */
121
typedef enum
122
{
123
    /*! Read only (no update) access */ GA_ReadOnly = 0,
124
    /*! Read/write access. */ GA_Update = 1
125
} GDALAccess;
126
127
/*! Read/Write flag for RasterIO() method */
128
typedef enum
129
{
130
    /*! Read data */ GF_Read = 0,
131
    /*! Write data */ GF_Write = 1
132
} GDALRWFlag;
133
134
/* NOTE: values are selected to be consistent with GDALResampleAlg of
135
 * alg/gdalwarper.h */
136
/** RasterIO() resampling method.
137
 */
138
typedef enum
139
{
140
    /*! Nearest neighbour */ GRIORA_NearestNeighbour = 0,
141
    /*! Bilinear (2x2 kernel) */ GRIORA_Bilinear = 1,
142
    /*! Cubic Convolution Approximation (4x4 kernel) */ GRIORA_Cubic = 2,
143
    /*! Cubic B-Spline Approximation (4x4 kernel) */ GRIORA_CubicSpline = 3,
144
    /*! Lanczos windowed sinc interpolation (6x6 kernel) */ GRIORA_Lanczos = 4,
145
    /*! Average */ GRIORA_Average = 5,
146
    /*! Mode (selects the value which appears most often of all the sampled
147
       points) */
148
    GRIORA_Mode = 6,
149
    /*! Gauss blurring */ GRIORA_Gauss = 7,
150
    /* NOTE: values 8 to 13 are reserved for max,min,med,Q1,Q3,sum */
151
    /*! @cond Doxygen_Suppress */
152
    GRIORA_RESERVED_START = 8,
153
    GRIORA_RESERVED_END = 13,
154
    /*! @endcond */
155
    /** RMS: Root Mean Square / Quadratic Mean.
156
     * For complex numbers, applies on the real and imaginary part
157
     * independently.
158
     */
159
    GRIORA_RMS = 14,
160
    /*! @cond Doxygen_Suppress */
161
    GRIORA_LAST = GRIORA_RMS
162
    /*! @endcond */
163
} GDALRIOResampleAlg;
164
165
/* NOTE to developers: if required, only add members at the end of the
166
 * structure, and when doing so increase RASTERIO_EXTRA_ARG_CURRENT_VERSION.
167
 *
168
 * Also make sure to use GDALCopyRasterIOExtraArg() when creating a copy
169
 * from user input.
170
 */
171
172
/** Structure to pass extra arguments to RasterIO() method,
173
 * must be initialized with INIT_RASTERIO_EXTRA_ARG
174
 */
175
typedef struct
176
{
177
    /*! Version of structure (to allow future extensions of the structure) */
178
    int nVersion;
179
180
    /*! Resampling algorithm */
181
    GDALRIOResampleAlg eResampleAlg;
182
183
    /*! Progress callback */
184
    GDALProgressFunc pfnProgress;
185
    /*! Progress callback user data */
186
    void *pProgressData;
187
188
    /*! Indicate if dfXOff, dfYOff, dfXSize and dfYSize are set.
189
        Mostly reserved from the VRT driver to communicate a more precise
190
        source window. Must be such that dfXOff - nXOff < 1.0 and
191
        dfYOff - nYOff < 1.0 and nXSize - dfXSize < 1.0 and nYSize - dfYSize
192
       < 1.0 */
193
    int bFloatingPointWindowValidity;
194
    /*! Pixel offset to the top left corner. Only valid if
195
     * bFloatingPointWindowValidity = TRUE */
196
    double dfXOff;
197
    /*! Line offset to the top left corner. Only valid if
198
     * bFloatingPointWindowValidity = TRUE */
199
    double dfYOff;
200
    /*! Width in pixels of the area of interest. Only valid if
201
     * bFloatingPointWindowValidity = TRUE */
202
    double dfXSize;
203
    /*! Height in pixels of the area of interest. Only valid if
204
     * bFloatingPointWindowValidity = TRUE */
205
    double dfYSize;
206
    /*! Indicate if overviews should be considered. Tested in
207
        GDALBandGetBestOverviewLevel(), mostly reserved for use by
208
        GDALRegenerateOverviewsMultiBand()
209
        Only available if RASTERIO_EXTRA_ARG_CURRENT_VERSION >= 2
210
    */
211
    int bUseOnlyThisScale;
212
213
    /** Indicate if operations (typically non-nearest resampling)
214
     * should be done in the eBufType data type of the RasterIO() request
215
     * rather than the band data type.
216
     * Only available if RASTERIO_EXTRA_ARG_CURRENT_VERSION >= 3 (GDAL >= 3.13)
217
     * Defaults to TRUE in GDAL >= 3.13 (behavior in previous version was
218
     * mostly, but not always corresponding to setting it to FALSE)
219
    */
220
    int bOperateInBufType;
221
222
} GDALRasterIOExtraArg;
223
224
#ifndef DOXYGEN_SKIP
225
0
#define RASTERIO_EXTRA_ARG_CURRENT_VERSION 3
226
#endif
227
228
/** Macro to initialize an instance of GDALRasterIOExtraArg structure.
229
 */
230
#define INIT_RASTERIO_EXTRA_ARG(s)                                             \
231
0
    do                                                                         \
232
0
    {                                                                          \
233
0
        (s).nVersion = RASTERIO_EXTRA_ARG_CURRENT_VERSION;                     \
234
0
        (s).eResampleAlg = GRIORA_NearestNeighbour;                            \
235
0
        (s).pfnProgress = CPL_NULLPTR;                                         \
236
0
        (s).pProgressData = CPL_NULLPTR;                                       \
237
0
        (s).bFloatingPointWindowValidity = FALSE;                              \
238
0
        (s).bUseOnlyThisScale = FALSE;                                         \
239
0
        (s).bOperateInBufType = TRUE;                                          \
240
0
    } while (0)
241
242
/** Macro to return whether GDALRasterIOExtraArg::bOperateInBufType is set.
243
 *
244
 * @since 3.13
245
 */
246
#define GDAL_GET_OPERATE_IN_BUF_TYPE(s)                                        \
247
0
    ((s).nVersion < 3 || (s).bOperateInBufType)
248
249
/** Value indicating the start of the range for color interpretations belonging
250
 * to the InfraRed (IR) domain. All constants of the GDALColorInterp enumeration
251
 * in the IR domain are in the [GCI_IR_Start, GCI_IR_End] range.
252
 *
253
 * @since 3.10
254
 */
255
#define GCI_IR_Start 20
256
257
/** Value indicating the end of the range for color interpretations belonging
258
 * to the InfraRed (IR) domain. All constants of the GDALColorInterp enumeration
259
 * in the IR domain are in the [GCI_IR_Start, GCI_IR_End] range.
260
 *
261
 * @since 3.10
262
 */
263
#define GCI_IR_End 29
264
265
/** Value indicating the start of the range for color interpretations belonging
266
 * to the Synthetic Aperture Radar (SAR) domain.
267
 * All constants of the GDALColorInterp enumeration
268
 * in the SAR domain are in the [GCI_SAR_Start, GCI_SAR_End] range.
269
 *
270
 * @since 3.10
271
 */
272
#define GCI_SAR_Start 30
273
274
/** Value indicating the end of the range for color interpretations belonging
275
 * to the Synthetic Aperture Radar (SAR) domain.
276
 * All constants of the GDALColorInterp enumeration
277
 * in the SAR domain are in the [GCI_SAR_Start, GCI_SAR_End] range.
278
 *
279
 * @since 3.10
280
 */
281
#define GCI_SAR_End 39
282
283
/** Types of color interpretation for raster bands.
284
 *
285
 * For spectral bands, the wavelength ranges are indicative only, and may vary
286
 * depending on sensors. The CENTRAL_WAVELENGTH_UM and FWHM_UM metadata
287
 * items in the IMAGERY metadata domain of the raster band, when present, will
288
 * give more accurate characteristics.
289
 *
290
 * Values belonging to the IR domain are in the [GCI_IR_Start, GCI_IR_End] range.
291
 * Values belonging to the SAR domain are in the [GCI_SAR_Start, GCI_SAR_End] range.
292
 *
293
 * Values between GCI_PanBand to GCI_SAR_Reserved_2 have been added in GDAL 3.10.
294
 */
295
typedef enum
296
{
297
    /*! Undefined */ GCI_Undefined = 0,
298
    /*! Greyscale */ GCI_GrayIndex = 1,
299
    /*! Paletted (see associated color table) */ GCI_PaletteIndex = 2,
300
    /*! Red band of RGBA image, or red spectral band [0.62 - 0.69 um]*/
301
    GCI_RedBand = 3,
302
    /*! Green band of RGBA image, or green spectral band [0.51 - 0.60 um]*/
303
    GCI_GreenBand = 4,
304
    /*! Blue band of RGBA image, or blue spectral band [0.45 - 0.53 um] */
305
    GCI_BlueBand = 5,
306
    /*! Alpha (0=transparent, 255=opaque) */ GCI_AlphaBand = 6,
307
    /*! Hue band of HLS image */ GCI_HueBand = 7,
308
    /*! Saturation band of HLS image */ GCI_SaturationBand = 8,
309
    /*! Lightness band of HLS image */ GCI_LightnessBand = 9,
310
    /*! Cyan band of CMYK image */ GCI_CyanBand = 10,
311
    /*! Magenta band of CMYK image */ GCI_MagentaBand = 11,
312
    /*! Yellow band of CMYK image, or yellow spectral band [0.58 - 0.62 um] */
313
    GCI_YellowBand = 12,
314
    /*! Black band of CMYK image */ GCI_BlackBand = 13,
315
    /*! Y Luminance */ GCI_YCbCr_YBand = 14,
316
    /*! Cb Chroma */ GCI_YCbCr_CbBand = 15,
317
    /*! Cr Chroma */ GCI_YCbCr_CrBand = 16,
318
319
    /* GDAL 3.10 addition: begin */
320
    /*! Panchromatic band [0.40 - 1.00 um] */ GCI_PanBand = 17,
321
    /*! Coastal band [0.40 - 0.45 um] */ GCI_CoastalBand = 18,
322
    /*! Red-edge band [0.69 - 0.79 um] */ GCI_RedEdgeBand = 19,
323
324
    /*! Near-InfraRed (NIR) band [0.75 - 1.40 um] */ GCI_NIRBand =
325
        GCI_IR_Start + 0,
326
    /*! Short-Wavelength InfraRed (SWIR) band [1.40 - 3.00 um] */ GCI_SWIRBand =
327
        GCI_IR_Start + 1,
328
    /*! Mid-Wavelength InfraRed (MWIR) band [3.00 - 8.00 um] */ GCI_MWIRBand =
329
        GCI_IR_Start + 2,
330
    /*! Long-Wavelength InfraRed (LWIR) band [8.00 - 15 um] */ GCI_LWIRBand =
331
        GCI_IR_Start + 3,
332
    /*! Thermal InfraRed (TIR) band (MWIR or LWIR) [3 - 15 um] */ GCI_TIRBand =
333
        GCI_IR_Start + 4,
334
    /*! Other infrared band [0.75 - 1000 um] */ GCI_OtherIRBand =
335
        GCI_IR_Start + 5,
336
    /*! Reserved value. Do not set it ! */
337
    GCI_IR_Reserved_1 = GCI_IR_Start + 6,
338
    /*! Reserved value. Do not set it ! */
339
    GCI_IR_Reserved_2 = GCI_IR_Start + 7,
340
    /*! Reserved value. Do not set it ! */
341
    GCI_IR_Reserved_3 = GCI_IR_Start + 8,
342
    /*! Reserved value. Do not set it ! */
343
    GCI_IR_Reserved_4 = GCI_IR_Start + 9,
344
345
    /*! Synthetic Aperture Radar (SAR) Ka band [0.8 - 1.1 cm / 27 - 40 GHz] */
346
    GCI_SAR_Ka_Band = GCI_SAR_Start + 0,
347
    /*! Synthetic Aperture Radar (SAR) K band [1.1 - 1.7 cm / 18 - 27 GHz] */
348
    GCI_SAR_K_Band = GCI_SAR_Start + 1,
349
    /*! Synthetic Aperture Radar (SAR) Ku band [1.7 - 2.4 cm / 12 - 18 GHz] */
350
    GCI_SAR_Ku_Band = GCI_SAR_Start + 2,
351
    /*! Synthetic Aperture Radar (SAR) X band [2.4 - 3.8 cm / 8 - 12 GHz] */
352
    GCI_SAR_X_Band = GCI_SAR_Start + 3,
353
    /*! Synthetic Aperture Radar (SAR) C band [3.8 - 7.5 cm / 4 - 8 GHz] */
354
    GCI_SAR_C_Band = GCI_SAR_Start + 4,
355
    /*! Synthetic Aperture Radar (SAR) S band [7.5 - 15 cm / 2 - 4 GHz] */
356
    GCI_SAR_S_Band = GCI_SAR_Start + 5,
357
    /*! Synthetic Aperture Radar (SAR) L band [15 - 30 cm / 1 - 2 GHz] */
358
    GCI_SAR_L_Band = GCI_SAR_Start + 6,
359
    /*! Synthetic Aperture Radar (SAR) P band [30 - 100 cm / 0.3 - 1 GHz] */
360
    GCI_SAR_P_Band = GCI_SAR_Start + 7,
361
    /*! Reserved value. Do not set it ! */
362
    GCI_SAR_Reserved_1 = GCI_SAR_Start + 8,
363
    /*! Reserved value. Do not set it ! */
364
    GCI_SAR_Reserved_2 = GCI_SAR_Start + 9,
365
366
    /* GDAL 3.10 addition: end */
367
368
    /*! Max current value (equals to GCI_SAR_Reserved_2 currently) */ GCI_Max =
369
        GCI_SAR_Reserved_2
370
} GDALColorInterp;
371
372
const char CPL_DLL *GDALGetColorInterpretationName(GDALColorInterp);
373
GDALColorInterp CPL_DLL GDALGetColorInterpretationByName(const char *pszName);
374
375
const GDALColorInterp CPL_DLL *GDALGetColorInterpretationList(int *pnCount);
376
377
/*! Types of color interpretations for a GDALColorTable. */
378
typedef enum
379
{
380
    /*! Grayscale (in GDALColorEntry.c1) */ GPI_Gray = 0,
381
    /*! Red, Green, Blue and Alpha in (in c1, c2, c3 and c4) */ GPI_RGB = 1,
382
    /*! Cyan, Magenta, Yellow and Black (in c1, c2, c3 and c4)*/ GPI_CMYK = 2,
383
    /*! Hue, Lightness and Saturation (in c1, c2, and c3) */ GPI_HLS = 3
384
} GDALPaletteInterp;
385
386
const char CPL_DLL *GDALGetPaletteInterpretationName(GDALPaletteInterp);
387
388
/* "well known" metadata domains. */
389
390
/** Name of the default metadata domain.
391
 * @since 3.14
392
 */
393
#define GDAL_MDD_DEFAULT ""
394
395
/** Name of the metadata domain that holds structural information about image
396
 * organization that would not normally be carried with an image when
397
 * translated into another format.
398
 * @since 3.14
399
 */
400
0
#define GDAL_MDD_IMAGE_STRUCTURE "IMAGE_STRUCTURE"
401
402
/** Name of the metadata domain that holds Rational Polynomial Coefficients
403
 * (RPC)
404
 * @since 3.14
405
 */
406
0
#define GDAL_MDD_RPC "RPC"
407
408
/** Name of the metadata domain that holds the definition of a geolocation
409
 * array.
410
 * @since 3.14
411
 */
412
0
#define GDAL_MDD_GEOLOCATION "GEOLOCATION"
413
414
/** Name of the metadata domain that holds the name and description of
415
 * subdatasets.
416
 * @since 3.14
417
 */
418
0
#define GDAL_MDD_SUBDATASETS "SUBDATASETS"
419
420
/** Name of the metadata domain that holds information from IMD side-car files.
421
 * @since 3.14
422
 */
423
0
#define GDAL_MDD_IMD "IMD"
424
425
/** Name of the metadata domain that holds GDAL-standardized metadata items
426
 * for satellite or aerial imagery, in particular GDALMD_SATELLITEID,
427
 * GDALMD_CLOUDCOVER, GDALMD_ACQUISITIONDATETIME, GDALMD_CENTRAL_WAVELENGTH_UM,
428
 * GDALMD_FWHM_UM
429
 * @since 3.14
430
 */
431
0
#define GDAL_MDD_IMAGERY "IMAGERY"
432
433
/* "well known" metadata items. */
434
435
/** Metadata item for dataset that indicates the spatial interpretation of a
436
 *  pixel */
437
0
#define GDALMD_AREA_OR_POINT "AREA_OR_POINT"
438
/** Value for GDALMD_AREA_OR_POINT that indicates that a pixel represents an
439
 * area */
440
0
#define GDALMD_AOP_AREA "Area"
441
/** Value for GDALMD_AREA_OR_POINT that indicates that a pixel represents a
442
 * point */
443
0
#define GDALMD_AOP_POINT "Point"
444
445
/** Metadata item for compression method, in the GDAL_MDD_IMAGE_STRUCTURE
446
 * domain.
447
 * @since 3.14
448
 */
449
0
#define GDALMD_COMPRESSION "COMPRESSION"
450
451
/** Metadata item for interleave pattern, in the GDAL_MDD_IMAGE_STRUCTURE
452
 * domain.
453
 * Typical values are PIXEL, LINE or BAND.
454
 * @since 3.14
455
 */
456
0
#define GDALMD_INTERLEAVE "INTERLEAVE"
457
458
/** Metadata item for actual number of bits used for this band, or the bands of
459
 * this dataset, in the GDAL_MDD_IMAGE_STRUCTURE domain.
460
 * Normally only present when the number of bits is non-standard for th
461
 * datatype, such as when a 1 bit TIFF is represented through GDAL as GDT_UInt8.
462
 * @since 3.14
463
 */
464
0
#define GDALMD_NBITS "NBITS"
465
466
/** Metadata item for satellite/scanner ID, in the GDAL_MDD_IMAGERY domain.
467
 * @since 3.14
468
 */
469
0
#define GDALMD_SATELLITEID "SATELLITEID"
470
471
/** Metadata item for cloud cover, in the GDAL_MDD_IMAGERY domain.
472
 * The value is between 0 and 100, or 999 if not available
473
 * @since 3.14
474
 */
475
0
#define GDALMD_CLOUDCOVER "CLOUDCOVER"
476
477
/** Metadata item for image acquisition date time in UTC, in the
478
 * GDAL_MDD_IMAGERY domain.
479
 * @since 3.14
480
 */
481
0
#define GDALMD_ACQUISITIONDATETIME "ACQUISITIONDATETIME"
482
483
/** Metadata item for the central Wavelength in micrometers,
484
 * in the GDAL_MDD_IMAGERY domain.
485
 * @since 3.14
486
 */
487
0
#define GDALMD_CENTRAL_WAVELENGTH_UM "CENTRAL_WAVELENGTH_UM"
488
489
/** Metadata item for full-width half-maximum (FWHM) in micrometers,
490
 * in the GDAL_MDD_IMAGERY domain.
491
 * @since 3.14
492
 */
493
0
#define GDALMD_FWHM_UM "FWHM_UM"
494
495
/* -------------------------------------------------------------------- */
496
/*      GDAL Specific error codes.                                      */
497
/*                                                                      */
498
/*      error codes 100 to 299 reserved for GDAL.                       */
499
/* -------------------------------------------------------------------- */
500
#ifndef DOXYGEN_SKIP
501
#define CPLE_WrongFormat CPL_STATIC_CAST(CPLErrorNum, 200)
502
#endif
503
504
/* -------------------------------------------------------------------- */
505
/*      Types, enumerations.                                            */
506
/* -------------------------------------------------------------------- */
507
508
/** Type to express pixel, line or band spacing. Signed 64 bit integer. */
509
typedef GIntBig GSpacing;
510
511
/** Enumeration giving the class of a GDALExtendedDataType.
512
 * @since GDAL 3.1
513
 */
514
typedef enum
515
{
516
    /** Numeric value. Based on GDALDataType enumeration */
517
    GEDTC_NUMERIC,
518
    /** String value. */
519
    GEDTC_STRING,
520
    /** Compound data type. */
521
    GEDTC_COMPOUND
522
} GDALExtendedDataTypeClass;
523
524
/** Enumeration giving the subtype of a GDALExtendedDataType.
525
 * @since GDAL 3.4
526
 */
527
typedef enum
528
{
529
    /** None. */
530
    GEDTST_NONE,
531
    /** JSon. Only applies to GEDTC_STRING */
532
    GEDTST_JSON
533
} GDALExtendedDataTypeSubType;
534
535
/* ==================================================================== */
536
/*      Registration/driver related.                                    */
537
/* ==================================================================== */
538
539
/** Long name of the driver */
540
11
#define GDAL_DMD_LONGNAME "DMD_LONGNAME"
541
542
/** URL (relative to http://gdal.org/) to the help page of the driver */
543
8
#define GDAL_DMD_HELPTOPIC "DMD_HELPTOPIC"
544
545
/** MIME type handled by the driver. */
546
1
#define GDAL_DMD_MIMETYPE "DMD_MIMETYPE"
547
548
/** Extension handled by the driver. */
549
4
#define GDAL_DMD_EXTENSION "DMD_EXTENSION"
550
551
/** Connection prefix to provide as the file name of the open function.
552
 * Typically set for non-file based drivers. Generally used with open options.
553
 */
554
0
#define GDAL_DMD_CONNECTION_PREFIX "DMD_CONNECTION_PREFIX"
555
556
/** List of (space separated) extensions handled by the driver.
557
 */
558
14
#define GDAL_DMD_EXTENSIONS "DMD_EXTENSIONS"
559
560
/** XML snippet with creation options. */
561
9
#define GDAL_DMD_CREATIONOPTIONLIST "DMD_CREATIONOPTIONLIST"
562
563
/** XML snippet with overview creation options.
564
 * @since GDAL 3.12
565
 */
566
4
#define GDAL_DMD_OVERVIEW_CREATIONOPTIONLIST "DMD_OVERVIEW_CREATIONOPTIONLIST"
567
568
/** XML snippet with multidimensional dataset creation options.
569
 * @since GDAL 3.1
570
 */
571
#define GDAL_DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST                           \
572
1
    "DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST"
573
574
/** XML snippet with multidimensional group creation options.
575
 * @since GDAL 3.1
576
 */
577
#define GDAL_DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST                             \
578
0
    "DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST"
579
580
/** XML snippet with multidimensional dimension creation options.
581
 * @since GDAL 3.1
582
 */
583
#define GDAL_DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST                         \
584
0
    "DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST"
585
586
/** XML snippet with multidimensional array creation options.
587
 * @since GDAL 3.1
588
 */
589
#define GDAL_DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST                             \
590
1
    "DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST"
591
592
/** XML snippet with multidimensional array open options.
593
 * @since GDAL 3.6
594
 */
595
#define GDAL_DMD_MULTIDIM_ARRAY_OPENOPTIONLIST                                 \
596
0
    "DMD_MULTIDIM_ARRAY_OPENOPTIONLIST"
597
598
/** XML snippet with multidimensional attribute creation options.
599
 * @since GDAL 3.1
600
 */
601
#define GDAL_DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST                         \
602
0
    "DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST"
603
604
/** XML snippet with open options.
605
 */
606
17
#define GDAL_DMD_OPENOPTIONLIST "DMD_OPENOPTIONLIST"
607
608
/** List of (space separated) raster data types supported by the
609
 * Create()/CreateCopy() API. */
610
4
#define GDAL_DMD_CREATIONDATATYPES "DMD_CREATIONDATATYPES"
611
612
/** List of (space separated) vector field types supported by the CreateField()
613
 * API.
614
 * */
615
4
#define GDAL_DMD_CREATIONFIELDDATATYPES "DMD_CREATIONFIELDDATATYPES"
616
617
/** List of (space separated) vector field sub-types supported by the
618
 * CreateField() API.
619
 * */
620
4
#define GDAL_DMD_CREATIONFIELDDATASUBTYPES "DMD_CREATIONFIELDDATASUBTYPES"
621
622
/** Maximum size of a String field that can be created (OGRFieldDefn.GetWidth()).
623
 *
624
 * It is undefined whether this is a number of bytes or Unicode character count.
625
 * Most of the time, this will be a number of bytes, so a Unicode string whose
626
 * character count is the maximum size could not fit.
627
 *
628
 * This metadata item is set only on a small number of drivers, in particular
629
 * "ESRI Shapefile" and "MapInfo File", which use fixed-width storage of strings.
630
 *
631
 * @since GDAL 3.12
632
 */
633
1
#define GDAL_DMD_MAX_STRING_LENGTH "DMD_MAX_STRING_LENGTH"
634
635
/** List of (space separated) capability flags supported by the CreateField() API.
636
 *
637
 * Supported values are:
638
 *
639
 * - "WidthPrecision": field width and precision is supported.
640
 * - "Nullable": field (non-)nullable status is supported.
641
 * - "Unique": field unique constraint is supported.
642
 * - "Default": field default value is supported.
643
 * - "AlternativeName": field alternative name is supported.
644
 * - "Comment": field comment is supported.
645
 * - "Domain": field can be associated with a domain.
646
 *
647
 * @see GDAL_DMD_ALTER_FIELD_DEFN_FLAGS for capabilities supported when altering
648
 * existing fields.
649
 *
650
 * @since GDAL 3.7
651
 */
652
2
#define GDAL_DMD_CREATION_FIELD_DEFN_FLAGS "DMD_CREATION_FIELD_DEFN_FLAGS"
653
654
/** Capability set by a driver that exposes Subdatasets.
655
 *
656
 * This capability reflects that a raster driver supports child layers, such as
657
 * NetCDF or multi-table raster Geopackages.
658
 *
659
 * See GDAL_DCAP_MULTIPLE_VECTOR_LAYERS for a similar capability flag
660
 * for vector drivers.
661
 */
662
1
#define GDAL_DMD_SUBDATASETS "DMD_SUBDATASETS"
663
664
/** Capability set by a driver that can create subdatasets with the
665
 * APPEND_SUBDATASET=YES creation option.
666
 *
667
 * @since 3.11
668
 */
669
1
#define GDAL_DCAP_CREATE_SUBDATASETS "DCAP_CREATE_SUBDATASETS"
670
671
/** Capability set by a vector driver that supports field width and precision.
672
 *
673
 * This capability reflects that a vector driver includes the decimal separator
674
 * in the field width of fields of type OFTReal.
675
 *
676
 * See GDAL_DMD_NUMERIC_FIELD_WIDTH_INCLUDES_SIGN for a related capability flag.
677
 * @since GDAL 3.7
678
 */
679
#define GDAL_DMD_NUMERIC_FIELD_WIDTH_INCLUDES_DECIMAL_SEPARATOR                \
680
1
    "DMD_NUMERIC_FIELD_WIDTH_INCLUDES_DECIMAL_SEPARATOR"
681
682
/** Capability set by a vector driver that supports field width and precision.
683
 *
684
 * This capability reflects that a vector driver includes the sign
685
 * in the field width of fields of type OFTReal.
686
 *
687
 * See GDAL_DMD_NUMERIC_FIELD_WIDTH_INCLUDES_DECIMAL_SEPARATOR for a related capability flag.
688
 * @since GDAL 3.7
689
 */
690
#define GDAL_DMD_NUMERIC_FIELD_WIDTH_INCLUDES_SIGN                             \
691
1
    "DMD_NUMERIC_FIELD_WIDTH_INCLUDES_SIGN"
692
693
/** Capability set by a driver that implements the Open() API. */
694
10
#define GDAL_DCAP_OPEN "DCAP_OPEN"
695
696
/** Capability set by a driver that implements the Create() API.
697
 *
698
 * If GDAL_DCAP_CREATE is set, but GDAL_DCAP_CREATECOPY not, a generic
699
 * CreateCopy() implementation is available and will use the Create() API of
700
 * the driver.
701
 * So to test if some CreateCopy() implementation is available, generic or
702
 * specialize, test for both GDAL_DCAP_CREATE and GDAL_DCAP_CREATECOPY.
703
 */
704
9
#define GDAL_DCAP_CREATE "DCAP_CREATE"
705
706
/** Capability set by a driver that implements the CreateMultiDimensional() API.
707
 *
708
 * @since GDAL 3.1
709
 */
710
2
#define GDAL_DCAP_CREATE_MULTIDIMENSIONAL "DCAP_CREATE_MULTIDIMENSIONAL"
711
712
/** Capability set by a driver that implements the CreateCopy() API.
713
 *
714
 * If GDAL_DCAP_CREATECOPY is not defined, but GDAL_DCAP_CREATE is set, a
715
 * generic CreateCopy() implementation is available and will use the Create()
716
 * API of the driver. So to test if some CreateCopy() implementation is
717
 * available, generic or specialize, test for both GDAL_DCAP_CREATE and
718
 * GDAL_DCAP_CREATECOPY.
719
 */
720
3
#define GDAL_DCAP_CREATECOPY "DCAP_CREATECOPY"
721
722
/** Capability set by a driver that supports the \@CREATE_ONLY_VISIBLE_AT_CLOSE_TIME
723
 * hidden creation option.
724
 *
725
 * @since GDAL 3.12
726
 */
727
#define GDAL_DCAP_CREATE_ONLY_VISIBLE_AT_CLOSE_TIME                            \
728
2
    "DCAP_CREATE_ONLY_VISIBLE_AT_CLOSE_TIME"
729
730
/** Capability set by a driver that implements the VectorTranslateFrom() API.
731
 *
732
 * @since GDAL 3.8
733
 */
734
0
#define GDAL_DCAP_VECTOR_TRANSLATE_FROM "DCAP_VECTOR_TRANSLATE_FROM"
735
736
/** Capability set by a driver that implements the CreateCopy() API, but with
737
 * multidimensional raster as input and output.
738
 *
739
 * @since GDAL 3.1
740
 */
741
0
#define GDAL_DCAP_CREATECOPY_MULTIDIMENSIONAL "DCAP_CREATECOPY_MULTIDIMENSIONAL"
742
743
/** Capability set by a driver that supports multidimensional data.
744
 * @since GDAL 3.1
745
 */
746
4
#define GDAL_DCAP_MULTIDIM_RASTER "DCAP_MULTIDIM_RASTER"
747
748
/** Capability set by a driver that can copy over subdatasets. */
749
#define GDAL_DCAP_SUBCREATECOPY "DCAP_SUBCREATECOPY"
750
751
/** Capability set by a driver that supports the GDAL_OF_UPDATE flag and offers
752
 * feature appending capabilities.
753
 *
754
 * Note: feature appending capability is also implied if GDAL_DCAP_UPDATE or
755
 * GDAL_DCAP_CREATE_LAYER is set, in which case GDAL_DCAP_APPEND is not set.
756
 *
757
 * @since GDAL 3.12.
758
 */
759
1
#define GDAL_DCAP_APPEND "DCAP_APPEND"
760
761
/** Capability set by a driver that supports the GDAL_OF_UPDATE flag and offers
762
 * at least some update capabilities.
763
 * Exact update capabilities can be determined by the GDAL_DMD_UPDATE_ITEMS
764
 * metadata item
765
 * @since GDAL 3.11
766
 */
767
4
#define GDAL_DCAP_UPDATE "DCAP_UPDATE"
768
769
/** Capability set by a driver that can read/create datasets through the VSI*L
770
 * API. */
771
8
#define GDAL_DCAP_VIRTUALIO "DCAP_VIRTUALIO"
772
773
/** Capability set by a driver having raster capability.
774
 */
775
15
#define GDAL_DCAP_RASTER "DCAP_RASTER"
776
777
/** Capability set by a driver having vector capability.
778
 */
779
13
#define GDAL_DCAP_VECTOR "DCAP_VECTOR"
780
781
/** Capability set by a driver having geographical network model capability.
782
 */
783
4
#define GDAL_DCAP_GNM "DCAP_GNM"
784
785
/** Capability set by a driver that can create layers.
786
 * @since GDAL 3.6
787
 */
788
4
#define GDAL_DCAP_CREATE_LAYER "DCAP_CREATE_LAYER"
789
790
/** Capability set by a driver that can delete layers.
791
 * @since GDAL 3.6
792
 */
793
2
#define GDAL_DCAP_DELETE_LAYER "DCAP_DELETE_LAYER"
794
795
/** Capability set by a driver that can create fields.
796
 * @since GDAL 3.6
797
 */
798
4
#define GDAL_DCAP_CREATE_FIELD "DCAP_CREATE_FIELD"
799
800
/** Capability set by a driver that can delete fields.
801
 * @since GDAL 3.6
802
 */
803
3
#define GDAL_DCAP_DELETE_FIELD "DCAP_DELETE_FIELD"
804
805
/** Capability set by a driver that can reorder fields.
806
 * @since GDAL 3.6
807
 */
808
3
#define GDAL_DCAP_REORDER_FIELDS "DCAP_REORDER_FIELDS"
809
810
/** List of (space separated) flags supported by the OGRLayer::AlterFieldDefn()
811
 * API.
812
 *
813
 * Supported values are "Name", "Type", "WidthPrecision", "Nullable", "Default",
814
 * "Unique", "Domain", "AlternativeName" and "Comment", corresponding respectively
815
 * to the ALTER_NAME_FLAG, ALTER_TYPE_FLAG, ALTER_WIDTH_PRECISION_FLAG, ALTER_NULLABLE_FLAG,
816
 * ALTER_DEFAULT_FLAG, ALTER_UNIQUE_FLAG, ALTER_DOMAIN_FLAG,
817
 * ALTER_ALTERNATIVE_NAME_FLAG and ALTER_COMMENT_FLAG flags.
818
 *
819
 * Note that advertizing one of these flags doesn't necessarily mean that
820
 * all modifications of the corresponding property can be made. For example,
821
 * altering the field type may be restricted by the current type of the field,
822
 * etc.
823
 *
824
 * @see GDAL_DMD_CREATION_FIELD_DEFN_FLAGS for capabilities supported
825
 * when creating new fields.
826
 *
827
 * @since GDAL 3.6
828
 */
829
3
#define GDAL_DMD_ALTER_FIELD_DEFN_FLAGS "GDAL_DMD_ALTER_FIELD_DEFN_FLAGS"
830
831
/** List of (space separated) field names which are considered illegal by the
832
 * driver and should not be used when creating/altering fields.
833
 *
834
 * @since GDAL 3.7
835
 */
836
#define GDAL_DMD_ILLEGAL_FIELD_NAMES "GDAL_DMD_ILLEGAL_FIELD_NAMES"
837
838
/** Capability set by a driver that can create fields with NOT NULL constraint.
839
 */
840
0
#define GDAL_DCAP_NOTNULL_FIELDS "DCAP_NOTNULL_FIELDS"
841
842
/** Capability set by a driver that can create fields with UNIQUE constraint.
843
 * @since GDAL 3.2
844
 */
845
0
#define GDAL_DCAP_UNIQUE_FIELDS "DCAP_UNIQUE_FIELDS"
846
847
/** Capability set by a driver that can create fields with DEFAULT values.
848
 */
849
0
#define GDAL_DCAP_DEFAULT_FIELDS "DCAP_DEFAULT_FIELDS"
850
851
/** Capability set by a driver that can create geometry fields with NOT NULL
852
 * constraint.
853
 */
854
0
#define GDAL_DCAP_NOTNULL_GEOMFIELDS "DCAP_NOTNULL_GEOMFIELDS"
855
856
/** Capability set by a non-spatial driver having no support for geometries.
857
 * E.g. non-spatial vector drivers (e.g. spreadsheet format drivers) do not
858
 * support geometries, and accordingly will have this capability present.
859
 */
860
#define GDAL_DCAP_NONSPATIAL "DCAP_NONSPATIAL"
861
862
/** Capability set by a driver that can support curved geometries.
863
 * @since GDAL 3.6
864
 */
865
1
#define GDAL_DCAP_CURVE_GEOMETRIES "DCAP_CURVE_GEOMETRIES"
866
867
/** Capability set by a driver that can support measured geometries.
868
 *
869
 * @since GDAL 3.6
870
 */
871
3
#define GDAL_DCAP_MEASURED_GEOMETRIES "DCAP_MEASURED_GEOMETRIES"
872
873
/** Capability set by a driver that can support the Z dimension for geometries.
874
 *
875
 * @since GDAL 3.6
876
 */
877
5
#define GDAL_DCAP_Z_GEOMETRIES "DCAP_Z_GEOMETRIES"
878
879
/** List of (space separated) flags which reflect the geometry handling behavior
880
 * of a driver.
881
 *
882
 * Supported values are currently:
883
 *
884
 * - "EquatesMultiAndSingleLineStringDuringWrite" and
885
 * "EquatesMultiAndSinglePolygonDuringWrite". These flags indicate that the
886
 * driver does not differentiate between single-part and multi-part linestring
887
 * and polygon geometries when writing features respectively.
888
 *
889
 * @since GDAL 3.6
890
 */
891
1
#define GDAL_DMD_GEOMETRY_FLAGS "GDAL_DMD_GEOMETRY_FLAGS"
892
893
/** Capability set by drivers which support either reading or writing feature
894
 * styles.
895
 *
896
 * Consider using the more granular GDAL_DCAP_FEATURE_STYLES_READ or
897
 * GDAL_DCAP_FEATURE_STYLES_WRITE capabilities instead.
898
 *
899
 */
900
#define GDAL_DCAP_FEATURE_STYLES "DCAP_FEATURE_STYLES"
901
902
/** Capability set by drivers which support reading feature styles.
903
 * @since GDAL 3.7
904
 */
905
0
#define GDAL_DCAP_FEATURE_STYLES_READ "DCAP_FEATURE_STYLES_READ"
906
907
/** Capability set by drivers which support writing feature styles.
908
 * @since GDAL 3.7
909
 */
910
0
#define GDAL_DCAP_FEATURE_STYLES_WRITE "DCAP_FEATURE_STYLES_WRITE"
911
912
/** Capability set by drivers which support storing/retrieving coordinate epoch
913
 * for dynamic CRS
914
 * @since GDAL 3.4
915
 */
916
5
#define GDAL_DCAP_COORDINATE_EPOCH "DCAP_COORDINATE_EPOCH"
917
918
/** Capability set by drivers for formats which natively support multiple vector layers.
919
 *
920
 * GDAL_DCAP_MULTIPLE_VECTOR_LAYERS is only set for drivers of formats
921
 * which have a native concept of multiple vector layers (such as GeoPackage).
922
 *
923
 * Note: some GDAL drivers expose "virtual" layer support while the underlying
924
 * formats themselves do not (see GDAL_DCAP_MULTIPLE_VECTOR_LAYERS_IN_DIRECTORY).
925
 *
926
 * @since GDAL 3.4
927
 */
928
1
#define GDAL_DCAP_MULTIPLE_VECTOR_LAYERS "DCAP_MULTIPLE_VECTOR_LAYERS"
929
930
/** Capability set by drivers for formats which support multiple vector layers,
931
 * as individual files in a directory.
932
 *
933
 * For example "ESRI Shapefile", "MapInfo File", "CSV", "FlatGeoBuf" or
934
 * "MiraMonVector"
935
 *
936
 * @since GDAL 3.13
937
 */
938
#define GDAL_DCAP_MULTIPLE_VECTOR_LAYERS_IN_DIRECTORY                          \
939
1
    "GDAL_DCAP_MULTIPLE_VECTOR_LAYERS_IN_DIRECTORY"
940
941
/** Capability set by drivers for formats which support reading field domains.
942
 *
943
 * @since GDAL 3.5
944
 */
945
1
#define GDAL_DCAP_FIELD_DOMAINS "DCAP_FIELD_DOMAINS"
946
947
/** Capability set by drivers for formats which support reading table
948
 * relationships.
949
 *
950
 * @since GDAL 3.6
951
 */
952
1
#define GDAL_DCAP_RELATIONSHIPS "DCAP_RELATIONSHIPS"
953
954
/** Capability set by drivers for formats which support creating table
955
 * relationships.
956
 * @since GDAL 3.6
957
 */
958
1
#define GDAL_DCAP_CREATE_RELATIONSHIP "DCAP_CREATE_RELATIONSHIP"
959
960
/** Capability set by drivers for formats which support deleting table
961
 * relationships.
962
 * @since GDAL 3.6
963
 */
964
1
#define GDAL_DCAP_DELETE_RELATIONSHIP "DCAP_DELETE_RELATIONSHIP"
965
966
/** Capability set by drivers for formats which support updating existing table
967
 * relationships.
968
 * @since GDAL 3.6
969
 */
970
1
#define GDAL_DCAP_UPDATE_RELATIONSHIP "DCAP_UPDATE_RELATIONSHIP"
971
972
/** Capability set by drivers whose FlushCache() implementation returns a
973
 * dataset that can be opened afterwards and seen in a consistent state, without
974
 * requiring the dataset on which FlushCache() has been called to be closed.
975
 * @since GDAL 3.8
976
 */
977
1
#define GDAL_DCAP_FLUSHCACHE_CONSISTENT_STATE "DCAP_FLUSHCACHE_CONSISTENT_STATE"
978
979
/** Capability set by drivers which honor the OGRCoordinatePrecision settings
980
 * of geometry fields at layer creation and/or for OGRLayer::CreateGeomField().
981
 * Note that while those drivers honor the settings at feature writing time,
982
 * they might not be able to store the precision settings in layer metadata,
983
 * hence on reading it might not be possible to recover the precision with
984
 * which coordinates have been written.
985
 * @since GDAL 3.9
986
 */
987
#define GDAL_DCAP_HONOR_GEOM_COORDINATE_PRECISION                              \
988
2
    "DCAP_HONOR_GEOM_COORDINATE_PRECISION"
989
990
/** Capability set by drivers that implements OGRLayer::UpsertTeature().
991
 * @since GDAL 3.12
992
 */
993
2
#define GDAL_DCAP_UPSERT "DCAP_UPSERT"
994
995
/** List of (space separated) flags indicating the features of relationships are
996
 * supported by the driver.
997
 *
998
 * Supported values are:
999
 *
1000
 * - "OneToOne": supports one-to-one relationships, see
1001
 * GDALRelationshipCardinality::GRC_ONE_TO_ONE
1002
 * - "OneToMany": supports one-to-many relationships, see
1003
 * GDALRelationshipCardinality::GRC_ONE_TO_MANY
1004
 * - "ManyToOne": supports many-to-one relationships, see
1005
 * GDALRelationshipCardinality::GRC_MANY_TO_ONE
1006
 * - "ManyToMany": supports many-to-many relationships, see
1007
 * GDALRelationshipCardinality::GRC_MANY_TO_MANY
1008
 * - "Composite": supports composite relationship types, see
1009
 * GDALRelationshipType::GRT_COMPOSITE
1010
 * - "Association": supports association relationship types, see
1011
 * GDALRelationshipType::GRT_ASSOCIATION
1012
 * - "Aggregation": supports aggregation relationship types, see
1013
 * GDALRelationshipType::GRT_AGGREGATION
1014
 * - "MultipleFieldKeys": multiple fields can be used for relationship keys. If
1015
 * not present then only a single field name can be used.
1016
 * - "ForwardPathLabel": supports forward path labels
1017
 * - "BackwardPathLabel": supports backward path labels
1018
 *
1019
 * @since GDAL 3.6
1020
 */
1021
1
#define GDAL_DMD_RELATIONSHIP_FLAGS "GDAL_DMD_RELATIONSHIP_FLAGS"
1022
1023
/** List of (space separated) standard related table types which are recognised
1024
 * by the driver.
1025
 *
1026
 * See GDALRelationshipGetRelatedTableType/GDALRelationshipSetRelatedTableType
1027
 *
1028
 * @since GDAL 3.7
1029
 */
1030
#define GDAL_DMD_RELATIONSHIP_RELATED_TABLE_TYPES                              \
1031
    "GDAL_DMD_RELATIONSHIP_RELATED_TABLE_TYPES"
1032
1033
/** Capability set by drivers for formats which support renaming vector layers.
1034
 *
1035
 * @since GDAL 3.5
1036
 */
1037
1
#define GDAL_DCAP_RENAME_LAYERS "DCAP_RENAME_LAYERS"
1038
1039
/** List of (space separated) field domain types supported by the AddFieldDomain()
1040
 * API.
1041
 *
1042
 * Supported values are Coded, Range and Glob, corresponding to the
1043
 * OGRFieldDomainType::OFDT_CODED, OGRFieldDomainType::OFDT_RANGE, and
1044
 * OGRFieldDomainType::OFDT_GLOB field domain types respectively.
1045
 *
1046
 * @since GDAL 3.5
1047
 */
1048
1
#define GDAL_DMD_CREATION_FIELD_DOMAIN_TYPES "DMD_CREATION_FIELD_DOMAIN_TYPES"
1049
1050
/** List of (space separated) flags supported by the
1051
 * OGRLayer::AlterGeomFieldDefn() API.
1052
 *
1053
 * Supported values are "Name", "Type", "Nullable", "SRS", "CoordinateEpoch",
1054
 * corresponding respectively to the ALTER_GEOM_FIELD_DEFN_NAME_FLAG,
1055
 * ALTER_GEOM_FIELD_DEFN_TYPE_FLAG, ALTER_GEOM_FIELD_DEFN_NULLABLE_FLAG,
1056
 * ALTER_GEOM_FIELD_DEFN_SRS_FLAG, ALTER_GEOM_FIELD_DEFN_SRS_COORD_EPOCH_FLAG
1057
 * flags. Note that advertizing one of these flags doesn't necessarily mean that
1058
 * all modifications of the corresponding property can be made. For example,
1059
 * altering the geometry type may be restricted by the type of the geometries in
1060
 * the field, or changing the nullable state to non-nullable is not possible if
1061
 * null geometries are present, etc.
1062
 *
1063
 * @since GDAL 3.6
1064
 */
1065
2
#define GDAL_DMD_ALTER_GEOM_FIELD_DEFN_FLAGS "DMD_ALTER_GEOM_FIELD_DEFN_FLAGS"
1066
1067
/** List of (space separated) SQL dialects supported by the driver.
1068
 *
1069
 * The default SQL dialect for the driver will always be the first listed value.
1070
 *
1071
 * Standard values are:
1072
 *
1073
 * - "OGRSQL": the OGR SQL dialect, see
1074
 * https://gdal.org/user/ogr_sql_dialect.html
1075
 * - "SQLITE": the SQLite dialect, see
1076
 * https://gdal.org/user/sql_sqlite_dialect.html
1077
 * - "NATIVE": for drivers with an RDBMS backend this value indicates that the
1078
 * SQL will be passed directly to that database backend, and therefore the
1079
 * RDBMS' native dialect will be used
1080
 *
1081
 * Other dialect values may also be present for some drivers (for some of them,
1082
 * the query string to use might not even by SQL but a dedicated query
1083
 * language). For further details on their interpretation, see the documentation
1084
 * for the respective driver.
1085
 *
1086
 * @since GDAL 3.6
1087
 */
1088
5
#define GDAL_DMD_SUPPORTED_SQL_DIALECTS "DMD_SUPPORTED_SQL_DIALECTS"
1089
1090
/*! @cond Doxygen_Suppress */
1091
#define GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE "DMD_PLUGIN_INSTALLATION_MESSAGE"
1092
/*! @endcond */
1093
1094
/** List of (space separated) items that a dataset opened in update mode supports
1095
 * updating. Possible values are:
1096
 * - for raster: "GeoTransform" (through GDALDataset::SetGeoTransform),
1097
 *   "SRS" (GDALDataset::SetSpatialRef), "GCPs" (GDALDataset::SetGCPs()),
1098
 *    "NoData" (GDALRasterBand::SetNoDataValue),
1099
 *   "ColorInterpretation" (GDALRasterBand::SetColorInterpretation()),
1100
 *   "RasterValues" (GF_Write flag of GDALDataset::RasterIO() and GDALRasterBand::RasterIO()),
1101
 *   "DatasetMetadata" (GDALDataset::SetMetadata/SetMetadataItem), "BandMetadata"
1102
 *   (GDALRasterBand::SetMetadata/SetMetadataItem)
1103
 * - for vector: "Features" (OGRLayer::SetFeature()), "DatasetMetadata",
1104
 *   "LayerMetadata"
1105
 *
1106
 * No distinction is made if the update is done in the native format,
1107
 * or in a Persistent Auxiliary Metadata .aux.xml side car file.
1108
 *
1109
 * @since GDAL 3.11
1110
 */
1111
4
#define GDAL_DMD_UPDATE_ITEMS "DMD_UPDATE_ITEMS"
1112
1113
/** Value for GDALDimension::GetType() specifying the X axis of a horizontal
1114
 * CRS.
1115
 * @since GDAL 3.1
1116
 */
1117
0
#define GDAL_DIM_TYPE_HORIZONTAL_X "HORIZONTAL_X"
1118
1119
/** Value for GDALDimension::GetType() specifying the Y axis of a horizontal
1120
 * CRS.
1121
 * @since GDAL 3.1
1122
 */
1123
0
#define GDAL_DIM_TYPE_HORIZONTAL_Y "HORIZONTAL_Y"
1124
1125
/** Value for GDALDimension::GetType() specifying a vertical axis.
1126
 * @since GDAL 3.1
1127
 */
1128
#define GDAL_DIM_TYPE_VERTICAL "VERTICAL"
1129
1130
/** Value for GDALDimension::GetType() specifying a temporal axis.
1131
 * @since GDAL 3.1
1132
 */
1133
#define GDAL_DIM_TYPE_TEMPORAL "TEMPORAL"
1134
1135
/** Value for GDALDimension::GetType() specifying a parametric axis.
1136
 * @since GDAL 3.1
1137
 */
1138
#define GDAL_DIM_TYPE_PARAMETRIC "PARAMETRIC"
1139
1140
/** "Capability" set by drivers that require re-opening the dataset to be able
1141
 * to read its content if it has just been created previously
1142
 *
1143
 * @since GDAL 3.12
1144
 */
1145
0
#define GDAL_DCAP_REOPEN_AFTER_WRITE_REQUIRED "DCAP_REOPEN_AFTER_WRITE_REQUIRED"
1146
1147
/** Capability set by drivers that can read from a dataset, even if it deleted
1148
 * from disk after it has been opened (i.e. such drivers do not need to reopen
1149
 * or test the existence of the file at that point)
1150
 *
1151
 * @since GDAL 3.12
1152
 */
1153
2
#define GDAL_DCAP_CAN_READ_AFTER_DELETE "DCAP_CAN_READ_AFTER_DELETE"
1154
1155
#define GDsCAddRelationship                                                    \
1156
    "AddRelationship" /**< Dataset capability for supporting AddRelationship() \
1157
                         (at least partially) */
1158
#define GDsCDeleteRelationship                                                 \
1159
    "DeleteRelationship" /**< Dataset capability for supporting                \
1160
                            DeleteRelationship()*/
1161
#define GDsCUpdateRelationship                                                 \
1162
    "UpdateRelationship" /**< Dataset capability for supporting                \
1163
                            UpdateRelationship()*/
1164
1165
/** Dataset capability if GDALDataset::GetExtent() is fast.
1166
 *
1167
 * @since 3.12
1168
 */
1169
#define GDsCFastGetExtent "FastGetExtent"
1170
1171
/** Dataset capability if GDALDataset::GetExtentWGS84LongLat() is fast.
1172
 *
1173
 * @since 3.12
1174
 */
1175
#define GDsCFastGetExtentWGS84LongLat "FastGetExtentWGS84LongLat"
1176
1177
void CPL_DLL CPL_STDCALL GDALAllRegister(void);
1178
void CPL_DLL GDALRegisterPlugins(void);
1179
CPLErr CPL_DLL GDALRegisterPlugin(const char *name);
1180
1181
GDALDatasetH CPL_DLL CPL_STDCALL
1182
GDALCreate(GDALDriverH hDriver, const char *, int, int, int, GDALDataType,
1183
           CSLConstList) CPL_WARN_UNUSED_RESULT;
1184
GDALDatasetH CPL_DLL CPL_STDCALL GDALCreateCopy(GDALDriverH, const char *,
1185
                                                GDALDatasetH, int, CSLConstList,
1186
                                                GDALProgressFunc,
1187
                                                void *) CPL_WARN_UNUSED_RESULT;
1188
1189
GDALDriverH CPL_DLL CPL_STDCALL GDALIdentifyDriver(const char *pszFilename,
1190
                                                   CSLConstList papszFileList);
1191
1192
GDALDriverH CPL_DLL CPL_STDCALL GDALIdentifyDriverEx(
1193
    const char *pszFilename, unsigned int nIdentifyFlags,
1194
    const char *const *papszAllowedDrivers, const char *const *papszFileList);
1195
1196
GDALDatasetH CPL_DLL CPL_STDCALL
1197
GDALOpen(const char *pszFilename, GDALAccess eAccess) CPL_WARN_UNUSED_RESULT;
1198
GDALDatasetH CPL_DLL CPL_STDCALL GDALOpenShared(const char *, GDALAccess)
1199
    CPL_WARN_UNUSED_RESULT;
1200
1201
/* Note: we define GDAL_OF_READONLY and GDAL_OF_UPDATE to be on purpose */
1202
/* equals to GA_ReadOnly and GA_Update */
1203
1204
/** Open in read-only mode.
1205
 * Used by GDALOpenEx().
1206
 */
1207
0
#define GDAL_OF_READONLY 0x00
1208
1209
/** Open in update mode.
1210
 * Used by GDALOpenEx().
1211
 */
1212
0
#define GDAL_OF_UPDATE 0x01
1213
1214
/** Allow raster and vector drivers to be used.
1215
 * Used by GDALOpenEx().
1216
 */
1217
0
#define GDAL_OF_ALL 0x00
1218
1219
/** Allow raster drivers to be used.
1220
 * Used by GDALOpenEx().
1221
 */
1222
0
#define GDAL_OF_RASTER 0x02
1223
1224
/** Allow vector drivers to be used.
1225
 * Used by GDALOpenEx().
1226
 */
1227
0
#define GDAL_OF_VECTOR 0x04
1228
1229
/** Allow gnm drivers to be used.
1230
 * Used by GDALOpenEx().
1231
 */
1232
0
#define GDAL_OF_GNM 0x08
1233
1234
/** Allow multidimensional raster drivers to be used.
1235
 * Used by GDALOpenEx().
1236
 * @since GDAL 3.1
1237
 */
1238
0
#define GDAL_OF_MULTIDIM_RASTER 0x10
1239
1240
#ifndef DOXYGEN_SKIP
1241
0
#define GDAL_OF_KIND_MASK 0x1E
1242
#endif
1243
1244
/** Open in shared mode.
1245
 * Used by GDALOpenEx().
1246
 */
1247
0
#define GDAL_OF_SHARED 0x20
1248
1249
/** Emit error message in case of failed open.
1250
 * Used by GDALOpenEx().
1251
 */
1252
0
#define GDAL_OF_VERBOSE_ERROR 0x40
1253
1254
/** Open as internal dataset. Such dataset isn't registered in the global list
1255
 * of opened dataset. Cannot be used with GDAL_OF_SHARED.
1256
 *
1257
 * Used by GDALOpenEx().
1258
 */
1259
0
#define GDAL_OF_INTERNAL 0x80
1260
1261
/** Let GDAL decide if a array-based or hashset-based storage strategy for
1262
 * cached blocks must be used.
1263
 *
1264
 * GDAL_OF_DEFAULT_BLOCK_ACCESS, GDAL_OF_ARRAY_BLOCK_ACCESS and
1265
 * GDAL_OF_HASHSET_BLOCK_ACCESS are mutually exclusive.
1266
 *
1267
 * Used by GDALOpenEx().
1268
 */
1269
0
#define GDAL_OF_DEFAULT_BLOCK_ACCESS 0
1270
1271
/** Use a array-based storage strategy for cached blocks.
1272
 *
1273
 * GDAL_OF_DEFAULT_BLOCK_ACCESS, GDAL_OF_ARRAY_BLOCK_ACCESS and
1274
 * GDAL_OF_HASHSET_BLOCK_ACCESS are mutually exclusive.
1275
 *
1276
 * Used by GDALOpenEx().
1277
 */
1278
#define GDAL_OF_ARRAY_BLOCK_ACCESS 0x100
1279
1280
/** Use a hashset-based storage strategy for cached blocks.
1281
 *
1282
 * GDAL_OF_DEFAULT_BLOCK_ACCESS, GDAL_OF_ARRAY_BLOCK_ACCESS and
1283
 * GDAL_OF_HASHSET_BLOCK_ACCESS are mutually exclusive.
1284
 *
1285
 * Used by GDALOpenEx().
1286
 */
1287
0
#define GDAL_OF_HASHSET_BLOCK_ACCESS 0x200
1288
1289
#ifndef DOXYGEN_SKIP
1290
/* Reserved for a potential future alternative to GDAL_OF_ARRAY_BLOCK_ACCESS
1291
 * and GDAL_OF_HASHSET_BLOCK_ACCESS */
1292
#define GDAL_OF_RESERVED_1 0x300
1293
1294
/** Mask to detect the block access method */
1295
0
#define GDAL_OF_BLOCK_ACCESS_MASK 0x300
1296
#endif
1297
1298
#ifndef DOXYGEN_SKIP
1299
/** Set by GDALOpenEx() to indicate to Identify() method that they are called
1300
 * from it */
1301
0
#define GDAL_OF_FROM_GDALOPEN 0x400
1302
#endif
1303
1304
/** Open in thread-safe mode. Not compatible with
1305
 * GDAL_OF_VECTOR, GDAL_OF_MULTIDIM_RASTER or GDAL_OF_UPDATE
1306
 *
1307
 * Used by GDALOpenEx().
1308
 * @since GDAL 3.10
1309
 */
1310
0
#define GDAL_OF_THREAD_SAFE 0x800
1311
1312
GDALDatasetH CPL_DLL CPL_STDCALL GDALOpenEx(
1313
    const char *pszFilename, unsigned int nOpenFlags,
1314
    const char *const *papszAllowedDrivers, const char *const *papszOpenOptions,
1315
    const char *const *papszSiblingFiles) CPL_WARN_UNUSED_RESULT;
1316
1317
int CPL_DLL CPL_STDCALL GDALDumpOpenDatasets(FILE *);
1318
1319
GDALDriverH CPL_DLL CPL_STDCALL GDALGetDriverByName(const char *);
1320
int CPL_DLL CPL_STDCALL GDALGetDriverCount(void);
1321
GDALDriverH CPL_DLL CPL_STDCALL GDALGetDriver(int);
1322
GDALDriverH CPL_DLL CPL_STDCALL GDALCreateDriver(void);
1323
void CPL_DLL CPL_STDCALL GDALDestroyDriver(GDALDriverH);
1324
int CPL_DLL CPL_STDCALL GDALRegisterDriver(GDALDriverH);
1325
void CPL_DLL CPL_STDCALL GDALDeregisterDriver(GDALDriverH);
1326
void CPL_DLL CPL_STDCALL GDALDestroyDriverManager(void);
1327
void CPL_DLL GDALClearMemoryCaches(void);
1328
void CPL_DLL GDALDestroy(void);
1329
CPLErr CPL_DLL CPL_STDCALL GDALDeleteDataset(GDALDriverH, const char *);
1330
CPLErr CPL_DLL CPL_STDCALL GDALRenameDataset(GDALDriverH,
1331
                                             const char *pszNewName,
1332
                                             const char *pszOldName);
1333
CPLErr CPL_DLL CPL_STDCALL GDALCopyDatasetFiles(GDALDriverH,
1334
                                                const char *pszNewName,
1335
                                                const char *pszOldName);
1336
int CPL_DLL CPL_STDCALL
1337
GDALValidateCreationOptions(GDALDriverH, CSLConstList papszCreationOptions);
1338
char CPL_DLL **GDALGetOutputDriversForDatasetName(const char *pszDestFilename,
1339
                                                  int nFlagRasterVector,
1340
                                                  bool bSingleMatch,
1341
                                                  bool bEmitWarning);
1342
1343
bool CPL_DLL GDALDriverHasOpenOption(GDALDriverH,
1344
                                     const char *pszOpenOptionName);
1345
1346
/* The following are deprecated */
1347
const char CPL_DLL *CPL_STDCALL GDALGetDriverShortName(GDALDriverH);
1348
const char CPL_DLL *CPL_STDCALL GDALGetDriverLongName(GDALDriverH);
1349
const char CPL_DLL *CPL_STDCALL GDALGetDriverHelpTopic(GDALDriverH);
1350
const char CPL_DLL *CPL_STDCALL GDALGetDriverCreationOptionList(GDALDriverH);
1351
1352
/* ==================================================================== */
1353
/*      GDAL_GCP                                                        */
1354
/* ==================================================================== */
1355
1356
/** Ground Control Point */
1357
typedef struct
1358
{
1359
    /** Unique identifier, often numeric */
1360
    char *pszId;
1361
1362
    /** Informational message or "" */
1363
    char *pszInfo;
1364
1365
    /** Pixel (x) location of GCP on raster */
1366
    double dfGCPPixel;
1367
    /** Line (y) location of GCP on raster */
1368
    double dfGCPLine;
1369
1370
    /** X position of GCP in georeferenced space */
1371
    double dfGCPX;
1372
1373
    /** Y position of GCP in georeferenced space */
1374
    double dfGCPY;
1375
1376
    /** Elevation of GCP, or zero if not known */
1377
    double dfGCPZ;
1378
} GDAL_GCP;
1379
1380
void CPL_DLL CPL_STDCALL GDALInitGCPs(int, GDAL_GCP *);
1381
void CPL_DLL CPL_STDCALL GDALDeinitGCPs(int, GDAL_GCP *);
1382
GDAL_GCP CPL_DLL *CPL_STDCALL GDALDuplicateGCPs(int, const GDAL_GCP *);
1383
1384
int CPL_DLL CPL_STDCALL GDALGCPsToGeoTransform(
1385
    int nGCPCount, const GDAL_GCP *pasGCPs, double *padfGeoTransform,
1386
    int bApproxOK) CPL_WARN_UNUSED_RESULT;
1387
int CPL_DLL CPL_STDCALL GDALInvGeoTransform(const double *padfGeoTransformIn,
1388
                                            double *padfInvGeoTransformOut)
1389
    CPL_WARN_UNUSED_RESULT;
1390
void CPL_DLL CPL_STDCALL GDALApplyGeoTransform(const double *, double, double,
1391
                                               double *, double *);
1392
void CPL_DLL GDALComposeGeoTransforms(const double *padfGeoTransform1,
1393
                                      const double *padfGeoTransform2,
1394
                                      double *padfGeoTransformOut);
1395
int CPL_DLL GDALGCPsToHomography(int nGCPCount, const GDAL_GCP *pasGCPs,
1396
                                 double *padfHomography) CPL_WARN_UNUSED_RESULT;
1397
int CPL_DLL GDALInvHomography(const double *padfHomographyIn,
1398
                              double *padfInvHomographyOut)
1399
    CPL_WARN_UNUSED_RESULT;
1400
int CPL_DLL GDALApplyHomography(const double *, double, double, double *,
1401
                                double *) CPL_WARN_UNUSED_RESULT;
1402
void CPL_DLL GDALComposeHomographies(const double *padfHomography1,
1403
                                     const double *padfHomography2,
1404
                                     double *padfHomographyOut);
1405
1406
/* ==================================================================== */
1407
/*      major objects (dataset, and, driver, drivermanager).            */
1408
/* ==================================================================== */
1409
1410
char CPL_DLL **CPL_STDCALL GDALGetMetadataDomainList(GDALMajorObjectH hObject);
1411
CSLConstList CPL_DLL CPL_STDCALL GDALGetMetadata(GDALMajorObjectH,
1412
                                                 const char *);
1413
CPLErr CPL_DLL CPL_STDCALL GDALSetMetadata(GDALMajorObjectH, CSLConstList,
1414
                                           const char *);
1415
const char CPL_DLL *CPL_STDCALL GDALGetMetadataItem(GDALMajorObjectH,
1416
                                                    const char *, const char *);
1417
CPLErr CPL_DLL CPL_STDCALL GDALSetMetadataItem(GDALMajorObjectH, const char *,
1418
                                               const char *, const char *);
1419
const char CPL_DLL *CPL_STDCALL GDALGetDescription(GDALMajorObjectH);
1420
void CPL_DLL CPL_STDCALL GDALSetDescription(GDALMajorObjectH, const char *);
1421
1422
/* ==================================================================== */
1423
/*      GDALDataset class ... normally this represents one file.        */
1424
/* ==================================================================== */
1425
1426
/** Name of driver metadata item for layer creation option list */
1427
6
#define GDAL_DS_LAYER_CREATIONOPTIONLIST "DS_LAYER_CREATIONOPTIONLIST"
1428
1429
GDALDriverH CPL_DLL CPL_STDCALL GDALGetDatasetDriver(GDALDatasetH);
1430
char CPL_DLL **CPL_STDCALL GDALGetFileList(GDALDatasetH);
1431
void CPL_DLL GDALDatasetMarkSuppressOnClose(GDALDatasetH);
1432
CPLErr CPL_DLL CPL_STDCALL GDALClose(GDALDatasetH);
1433
CPLErr CPL_DLL GDALCloseEx(GDALDatasetH hDS, GDALProgressFunc pfnProgress,
1434
                           void *pProgressData);
1435
bool CPL_DLL GDALDatasetGetCloseReportsProgress(GDALDatasetH hDS);
1436
CPLErr CPL_DLL GDALDatasetRunCloseWithoutDestroying(GDALDatasetH hDS);
1437
CPLErr CPL_DLL GDALDatasetRunCloseWithoutDestroyingEx(
1438
    GDALDatasetH hDS, GDALProgressFunc pfnProgress, void *pProgressData);
1439
int CPL_DLL CPL_STDCALL GDALGetRasterXSize(GDALDatasetH);
1440
int CPL_DLL CPL_STDCALL GDALGetRasterYSize(GDALDatasetH);
1441
int CPL_DLL CPL_STDCALL GDALGetRasterCount(GDALDatasetH);
1442
GDALRasterBandH CPL_DLL CPL_STDCALL GDALGetRasterBand(GDALDatasetH, int);
1443
1444
bool CPL_DLL GDALDatasetIsThreadSafe(GDALDatasetH, int nScopeFlags,
1445
                                     CSLConstList papszOptions);
1446
GDALDatasetH CPL_DLL GDALGetThreadSafeDataset(GDALDatasetH, int nScopeFlags,
1447
                                              CSLConstList papszOptions);
1448
1449
CPLErr CPL_DLL CPL_STDCALL GDALAddBand(GDALDatasetH hDS, GDALDataType eType,
1450
                                       CSLConstList papszOptions);
1451
1452
GDALAsyncReaderH CPL_DLL CPL_STDCALL GDALBeginAsyncReader(
1453
    GDALDatasetH hDS, int nXOff, int nYOff, int nXSize, int nYSize, void *pBuf,
1454
    int nBufXSize, int nBufYSize, GDALDataType eBufType, int nBandCount,
1455
    int *panBandMap, int nPixelSpace, int nLineSpace, int nBandSpace,
1456
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
1457
1458
void CPL_DLL CPL_STDCALL GDALEndAsyncReader(GDALDatasetH hDS,
1459
                                            GDALAsyncReaderH hAsynchReaderH);
1460
1461
CPLErr CPL_DLL CPL_STDCALL GDALDatasetRasterIO(
1462
    GDALDatasetH hDS, GDALRWFlag eRWFlag, int nDSXOff, int nDSYOff,
1463
    int nDSXSize, int nDSYSize, void *pBuffer, int nBXSize, int nBYSize,
1464
    GDALDataType eBDataType, int nBandCount, const int *panBandCount,
1465
    int nPixelSpace, int nLineSpace, int nBandSpace) CPL_WARN_UNUSED_RESULT;
1466
1467
CPLErr CPL_DLL CPL_STDCALL GDALDatasetRasterIOEx(
1468
    GDALDatasetH hDS, GDALRWFlag eRWFlag, int nDSXOff, int nDSYOff,
1469
    int nDSXSize, int nDSYSize, void *pBuffer, int nBXSize, int nBYSize,
1470
    GDALDataType eBDataType, int nBandCount, const int *panBandCount,
1471
    GSpacing nPixelSpace, GSpacing nLineSpace, GSpacing nBandSpace,
1472
    GDALRasterIOExtraArg *psExtraArg) CPL_WARN_UNUSED_RESULT;
1473
1474
CPLErr CPL_DLL CPL_STDCALL GDALDatasetAdviseRead(
1475
    GDALDatasetH hDS, int nDSXOff, int nDSYOff, int nDSXSize, int nDSYSize,
1476
    int nBXSize, int nBYSize, GDALDataType eBDataType, int nBandCount,
1477
    int *panBandCount, CSLConstList papszOptions);
1478
1479
char CPL_DLL **
1480
GDALDatasetGetCompressionFormats(GDALDatasetH hDS, int nXOff, int nYOff,
1481
                                 int nXSize, int nYSize, int nBandCount,
1482
                                 const int *panBandList) CPL_WARN_UNUSED_RESULT;
1483
CPLErr CPL_DLL GDALDatasetReadCompressedData(
1484
    GDALDatasetH hDS, const char *pszFormat, int nXOff, int nYOff, int nXSize,
1485
    int nYSize, int nBandCount, const int *panBandList, void **ppBuffer,
1486
    size_t *pnBufferSize, char **ppszDetailedFormat);
1487
1488
const char CPL_DLL *CPL_STDCALL GDALGetProjectionRef(GDALDatasetH);
1489
OGRSpatialReferenceH CPL_DLL GDALGetSpatialRef(GDALDatasetH);
1490
CPLErr CPL_DLL CPL_STDCALL GDALSetProjection(GDALDatasetH, const char *);
1491
CPLErr CPL_DLL GDALSetSpatialRef(GDALDatasetH, OGRSpatialReferenceH);
1492
CPLErr CPL_DLL CPL_STDCALL GDALGetGeoTransform(GDALDatasetH, double *);
1493
CPLErr CPL_DLL CPL_STDCALL GDALSetGeoTransform(GDALDatasetH, const double *);
1494
1495
CPLErr CPL_DLL GDALGetExtent(GDALDatasetH, OGREnvelope *,
1496
                             OGRSpatialReferenceH hCRS);
1497
CPLErr CPL_DLL GDALGetExtentWGS84LongLat(GDALDatasetH, OGREnvelope *);
1498
1499
CPLErr CPL_DLL GDALDatasetGeolocationToPixelLine(
1500
    GDALDatasetH, double dfGeolocX, double dfGeolocY, OGRSpatialReferenceH hSRS,
1501
    double *pdfPixel, double *pdfLine, CSLConstList papszTransformerOptions);
1502
1503
CPLErr CPL_DLL GDALDatasetGetInterBandCovarianceMatrix(
1504
    GDALDatasetH hDS, double *padfCovMatrix, size_t nSize, int nBandCount,
1505
    const int *panBandList, bool bApproxOK, bool bForce,
1506
    bool bWriteIntoMetadata, int nDeltaDegreeOfFreedom,
1507
    GDALProgressFunc pfnProgress, void *pProgressData);
1508
1509
CPLErr CPL_DLL GDALDatasetComputeInterBandCovarianceMatrix(
1510
    GDALDatasetH hDS, double *padfCovMatrix, size_t nSize, int nBandCount,
1511
    const int *panBandList, bool bApproxOK, bool bWriteIntoMetadata,
1512
    int nDeltaDegreeOfFreedom, GDALProgressFunc pfnProgress,
1513
    void *pProgressData);
1514
1515
int CPL_DLL CPL_STDCALL GDALGetGCPCount(GDALDatasetH);
1516
const char CPL_DLL *CPL_STDCALL GDALGetGCPProjection(GDALDatasetH);
1517
OGRSpatialReferenceH CPL_DLL GDALGetGCPSpatialRef(GDALDatasetH);
1518
const GDAL_GCP CPL_DLL *CPL_STDCALL GDALGetGCPs(GDALDatasetH);
1519
CPLErr CPL_DLL CPL_STDCALL GDALSetGCPs(GDALDatasetH, int, const GDAL_GCP *,
1520
                                       const char *);
1521
CPLErr CPL_DLL GDALSetGCPs2(GDALDatasetH, int, const GDAL_GCP *,
1522
                            OGRSpatialReferenceH);
1523
1524
void CPL_DLL *CPL_STDCALL GDALGetInternalHandle(GDALDatasetH, const char *);
1525
int CPL_DLL CPL_STDCALL GDALReferenceDataset(GDALDatasetH);
1526
int CPL_DLL CPL_STDCALL GDALDereferenceDataset(GDALDatasetH);
1527
int CPL_DLL CPL_STDCALL GDALReleaseDataset(GDALDatasetH);
1528
1529
CPLErr CPL_DLL CPL_STDCALL GDALBuildOverviews(GDALDatasetH, const char *, int,
1530
                                              const int *, int, const int *,
1531
                                              GDALProgressFunc,
1532
                                              void *) CPL_WARN_UNUSED_RESULT;
1533
CPLErr CPL_DLL CPL_STDCALL GDALBuildOverviewsEx(
1534
    GDALDatasetH, const char *, int, const int *, int, const int *,
1535
    GDALProgressFunc, void *, CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
1536
void CPL_DLL CPL_STDCALL GDALGetOpenDatasets(GDALDatasetH **hDS, int *pnCount);
1537
int CPL_DLL CPL_STDCALL GDALGetAccess(GDALDatasetH hDS);
1538
CPLErr CPL_DLL CPL_STDCALL GDALFlushCache(GDALDatasetH hDS);
1539
CPLErr CPL_DLL CPL_STDCALL GDALDropCache(GDALDatasetH hDS);
1540
1541
CPLErr CPL_DLL CPL_STDCALL GDALCreateDatasetMaskBand(GDALDatasetH hDS,
1542
                                                     int nFlags);
1543
1544
CPLErr CPL_DLL CPL_STDCALL GDALDatasetCopyWholeRaster(
1545
    GDALDatasetH hSrcDS, GDALDatasetH hDstDS, CSLConstList papszOptions,
1546
    GDALProgressFunc pfnProgress, void *pProgressData) CPL_WARN_UNUSED_RESULT;
1547
1548
CPLErr CPL_DLL CPL_STDCALL GDALRasterBandCopyWholeRaster(
1549
    GDALRasterBandH hSrcBand, GDALRasterBandH hDstBand,
1550
    const char *const *constpapszOptions, GDALProgressFunc pfnProgress,
1551
    void *pProgressData) CPL_WARN_UNUSED_RESULT;
1552
1553
CPLErr CPL_DLL GDALRegenerateOverviews(GDALRasterBandH hSrcBand,
1554
                                       int nOverviewCount,
1555
                                       GDALRasterBandH *pahOverviewBands,
1556
                                       const char *pszResampling,
1557
                                       GDALProgressFunc pfnProgress,
1558
                                       void *pProgressData);
1559
1560
CPLErr CPL_DLL GDALRegenerateOverviewsEx(GDALRasterBandH hSrcBand,
1561
                                         int nOverviewCount,
1562
                                         GDALRasterBandH *pahOverviewBands,
1563
                                         const char *pszResampling,
1564
                                         GDALProgressFunc pfnProgress,
1565
                                         void *pProgressData,
1566
                                         CSLConstList papszOptions);
1567
1568
int CPL_DLL GDALDatasetGetLayerCount(GDALDatasetH);
1569
OGRLayerH CPL_DLL GDALDatasetGetLayer(GDALDatasetH, int);
1570
1571
/* Defined here to avoid circular dependency with ogr_api.h */
1572
GDALDatasetH CPL_DLL OGR_L_GetDataset(OGRLayerH hLayer);
1573
1574
OGRLayerH CPL_DLL GDALDatasetGetLayerByName(GDALDatasetH, const char *);
1575
int CPL_DLL GDALDatasetIsLayerPrivate(GDALDatasetH, int);
1576
OGRErr CPL_DLL GDALDatasetDeleteLayer(GDALDatasetH, int);
1577
OGRLayerH CPL_DLL GDALDatasetCreateLayer(GDALDatasetH, const char *,
1578
                                         OGRSpatialReferenceH,
1579
                                         OGRwkbGeometryType, CSLConstList);
1580
OGRLayerH CPL_DLL GDALDatasetCreateLayerFromGeomFieldDefn(GDALDatasetH,
1581
                                                          const char *,
1582
                                                          OGRGeomFieldDefnH,
1583
                                                          CSLConstList);
1584
OGRLayerH CPL_DLL GDALDatasetCopyLayer(GDALDatasetH, OGRLayerH, const char *,
1585
                                       CSLConstList);
1586
void CPL_DLL GDALDatasetResetReading(GDALDatasetH);
1587
OGRFeatureH CPL_DLL GDALDatasetGetNextFeature(GDALDatasetH hDS,
1588
                                              OGRLayerH *phBelongingLayer,
1589
                                              double *pdfProgressPct,
1590
                                              GDALProgressFunc pfnProgress,
1591
                                              void *pProgressData);
1592
int CPL_DLL GDALDatasetTestCapability(GDALDatasetH, const char *);
1593
OGRLayerH CPL_DLL GDALDatasetExecuteSQL(GDALDatasetH, const char *,
1594
                                        OGRGeometryH, const char *);
1595
OGRErr CPL_DLL GDALDatasetAbortSQL(GDALDatasetH);
1596
void CPL_DLL GDALDatasetReleaseResultSet(GDALDatasetH, OGRLayerH);
1597
OGRStyleTableH CPL_DLL GDALDatasetGetStyleTable(GDALDatasetH);
1598
void CPL_DLL GDALDatasetSetStyleTableDirectly(GDALDatasetH, OGRStyleTableH);
1599
void CPL_DLL GDALDatasetSetStyleTable(GDALDatasetH, OGRStyleTableH);
1600
OGRErr CPL_DLL GDALDatasetStartTransaction(GDALDatasetH hDS, int bForce);
1601
OGRErr CPL_DLL GDALDatasetCommitTransaction(GDALDatasetH hDS);
1602
OGRErr CPL_DLL GDALDatasetRollbackTransaction(GDALDatasetH hDS);
1603
void CPL_DLL GDALDatasetClearStatistics(GDALDatasetH hDS);
1604
1605
GDALMDArrayH CPL_DLL GDALDatasetAsMDArray(
1606
    GDALDatasetH hDS, CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
1607
1608
char CPL_DLL **GDALDatasetGetFieldDomainNames(GDALDatasetH, CSLConstList)
1609
    CPL_WARN_UNUSED_RESULT;
1610
OGRFieldDomainH CPL_DLL GDALDatasetGetFieldDomain(GDALDatasetH hDS,
1611
                                                  const char *pszName);
1612
bool CPL_DLL GDALDatasetAddFieldDomain(GDALDatasetH hDS,
1613
                                       OGRFieldDomainH hFieldDomain,
1614
                                       char **ppszFailureReason);
1615
bool CPL_DLL GDALDatasetDeleteFieldDomain(GDALDatasetH hDS, const char *pszName,
1616
                                          char **ppszFailureReason);
1617
bool CPL_DLL GDALDatasetUpdateFieldDomain(GDALDatasetH hDS,
1618
                                          OGRFieldDomainH hFieldDomain,
1619
                                          char **ppszFailureReason);
1620
1621
char CPL_DLL **GDALDatasetGetRelationshipNames(GDALDatasetH, CSLConstList)
1622
    CPL_WARN_UNUSED_RESULT;
1623
GDALRelationshipH CPL_DLL GDALDatasetGetRelationship(GDALDatasetH hDS,
1624
                                                     const char *pszName);
1625
1626
bool CPL_DLL GDALDatasetAddRelationship(GDALDatasetH hDS,
1627
                                        GDALRelationshipH hRelationship,
1628
                                        char **ppszFailureReason);
1629
bool CPL_DLL GDALDatasetDeleteRelationship(GDALDatasetH hDS,
1630
                                           const char *pszName,
1631
                                           char **ppszFailureReason);
1632
bool CPL_DLL GDALDatasetUpdateRelationship(GDALDatasetH hDS,
1633
                                           GDALRelationshipH hRelationship,
1634
                                           char **ppszFailureReason);
1635
1636
/** Type of functions to pass to GDALDatasetSetQueryLoggerFunc
1637
 * @since GDAL 3.7 */
1638
typedef void (*GDALQueryLoggerFunc)(const char *pszSQL, const char *pszError,
1639
                                    int64_t lNumRecords,
1640
                                    int64_t lExecutionTimeMilliseconds,
1641
                                    void *pQueryLoggerArg);
1642
1643
/**
1644
 * Sets the SQL query logger callback.
1645
 *
1646
 * When supported by the driver, the callback will be called with
1647
 * the executed SQL text, the error message, the execution time in milliseconds,
1648
 * the number of records fetched/affected and the client status data.
1649
 *
1650
 * A value of -1 in the execution time or in the number of records indicates
1651
 * that the values are unknown.
1652
 *
1653
 * @param hDS                   Dataset handle.
1654
 * @param pfnQueryLoggerFunc    Callback function
1655
 * @param poQueryLoggerArg      Opaque client status data
1656
 * @return                      true in case of success.
1657
 * @since                       GDAL 3.7
1658
 */
1659
bool CPL_DLL GDALDatasetSetQueryLoggerFunc(
1660
    GDALDatasetH hDS, GDALQueryLoggerFunc pfnQueryLoggerFunc,
1661
    void *poQueryLoggerArg);
1662
1663
/* ==================================================================== */
1664
/*      Informational utilities about subdatasets in file names         */
1665
/* ==================================================================== */
1666
1667
/**
1668
 * @brief Returns a new GDALSubdatasetInfo object with methods to extract
1669
 *        and manipulate subdataset information.
1670
 *        If the pszFileName argument is not recognized by any driver as
1671
 *        a subdataset descriptor, NULL is returned.
1672
 *        The returned object must be freed with GDALDestroySubdatasetInfo().
1673
 * @param pszFileName           File name with subdataset information
1674
 * @note                        This method does not check if the subdataset actually exists.
1675
 * @return                      Opaque pointer to a GDALSubdatasetInfo object or NULL if no drivers accepted the file name.
1676
 * @since                       GDAL 3.8
1677
 */
1678
GDALSubdatasetInfoH CPL_DLL GDALGetSubdatasetInfo(const char *pszFileName);
1679
1680
/**
1681
 * @brief Returns the file path component of a
1682
 *        subdataset descriptor effectively stripping the information about the subdataset
1683
 *        and returning the "parent" dataset descriptor.
1684
 *        The returned string must be freed with CPLFree().
1685
 * @param hInfo                 Pointer to GDALSubdatasetInfo object
1686
 * @note                        This method does not check if the subdataset actually exists.
1687
 * @return                      The original string with the subdataset information removed.
1688
 * @since                       GDAL 3.8
1689
 */
1690
char CPL_DLL *GDALSubdatasetInfoGetPathComponent(GDALSubdatasetInfoH hInfo);
1691
1692
/**
1693
 * @brief Returns the subdataset component of a subdataset descriptor descriptor.
1694
 *        The returned string must be freed with CPLFree().
1695
 * @param hInfo                 Pointer to GDALSubdatasetInfo object
1696
 * @note                        This method does not check if the subdataset actually exists.
1697
 * @return                      The subdataset name.
1698
 * @since                       GDAL 3.8
1699
 */
1700
char CPL_DLL *
1701
GDALSubdatasetInfoGetSubdatasetComponent(GDALSubdatasetInfoH hInfo);
1702
1703
/**
1704
 * @brief Replaces the path component of a subdataset descriptor.
1705
 *        The returned string must be freed with CPLFree().
1706
 * @param hInfo                 Pointer to GDALSubdatasetInfo object
1707
 * @param pszNewPath            New path.
1708
 * @note                        This method does not check if the subdataset actually exists.
1709
 * @return                      The original subdataset descriptor with the old path component replaced by newPath.
1710
 * @since                       GDAL 3.8
1711
 */
1712
char CPL_DLL *GDALSubdatasetInfoModifyPathComponent(GDALSubdatasetInfoH hInfo,
1713
                                                    const char *pszNewPath);
1714
1715
/**
1716
 * @brief Destroys a GDALSubdatasetInfo object.
1717
 * @param hInfo                 Pointer to GDALSubdatasetInfo object
1718
 * @since                       GDAL 3.8
1719
 */
1720
void CPL_DLL GDALDestroySubdatasetInfo(GDALSubdatasetInfoH hInfo);
1721
1722
/* ==================================================================== */
1723
/*      GDALRasterBand ... one band/channel in a dataset.               */
1724
/* ==================================================================== */
1725
1726
/* Note: the only user of SRCVAL() is alg/gdal_simplesurf.cpp */
1727
1728
/* clang-format off */
1729
/**
1730
 * SRCVAL - Macro which may be used by pixel functions to obtain
1731
 *          a pixel from a source buffer.
1732
 */
1733
#define SRCVAL(papoSource, eSrcType, ii) \
1734
    (eSrcType == GDT_UInt8 ? CPL_REINTERPRET_CAST(const GByte *, papoSource)[ii] : \
1735
     eSrcType == GDT_Int8 ? CPL_REINTERPRET_CAST(const GInt8 *, papoSource)[ii] : \
1736
     eSrcType == GDT_UInt16 ? CPL_REINTERPRET_CAST(const GUInt16 *, papoSource)[ii] : \
1737
     eSrcType == GDT_Int16 ? CPL_REINTERPRET_CAST(const GInt16 *, papoSource)[ii] : \
1738
     eSrcType == GDT_UInt32 ? CPL_REINTERPRET_CAST(const GUInt32 *, papoSource)[ii] : \
1739
     eSrcType == GDT_Int32 ? CPL_REINTERPRET_CAST(const GInt32 *, papoSource)[ii] : \
1740
     eSrcType == GDT_UInt64 ? CPL_STATIC_CAST(double, CPL_REINTERPRET_CAST(const GUInt64 *, papoSource)[ii]) : \
1741
     eSrcType == GDT_Int64 ? CPL_STATIC_CAST(double, CPL_REINTERPRET_CAST(const GUInt64 *, papoSource)[ii]) : \
1742
     eSrcType == GDT_Float32 ? CPL_STATIC_CAST(double, CPL_REINTERPRET_CAST(const float *, papoSource)[ii]) : \
1743
     eSrcType == GDT_Float64 ? CPL_REINTERPRET_CAST(const double *, papoSource)[ii] : \
1744
     eSrcType == GDT_CInt16 ? CPL_REINTERPRET_CAST(const GInt16 *, papoSource)[(ii)*2] : \
1745
     eSrcType == GDT_CInt32 ? CPL_REINTERPRET_CAST(const GInt32 *, papoSource)[(ii)*2] : \
1746
     eSrcType == GDT_CFloat32 ? CPL_STATIC_CAST(double, CPL_REINTERPRET_CAST(const float *, papoSource)[ii*2]) : \
1747
     eSrcType == GDT_CFloat64 ? CPL_REINTERPRET_CAST(const double *, papoSource)[ii*2] : \
1748
     0)
1749
1750
/* clang-format on */
1751
1752
/** Type of functions to pass to GDALAddDerivedBandPixelFunc.
1753
 */
1754
typedef CPLErr (*GDALDerivedPixelFunc)(void **papoSources, int nSources,
1755
                                       void *pData, int nBufXSize,
1756
                                       int nBufYSize, GDALDataType eSrcType,
1757
                                       GDALDataType eBufType, int nPixelSpace,
1758
                                       int nLineSpace);
1759
1760
/** Type of functions to pass to GDALAddDerivedBandPixelFuncWithArgs.
1761
 * @since GDAL 3.4 */
1762
typedef CPLErr (*GDALDerivedPixelFuncWithArgs)(
1763
    void **papoSources, int nSources, void *pData, int nBufXSize, int nBufYSize,
1764
    GDALDataType eSrcType, GDALDataType eBufType, int nPixelSpace,
1765
    int nLineSpace, CSLConstList papszFunctionArgs);
1766
1767
GDALDataType CPL_DLL CPL_STDCALL GDALGetRasterDataType(GDALRasterBandH);
1768
void CPL_DLL CPL_STDCALL GDALGetBlockSize(GDALRasterBandH, int *pnXSize,
1769
                                          int *pnYSize);
1770
1771
CPLErr CPL_DLL CPL_STDCALL GDALGetActualBlockSize(GDALRasterBandH,
1772
                                                  int nXBlockOff,
1773
                                                  int nYBlockOff, int *pnXValid,
1774
                                                  int *pnYValid);
1775
1776
CPLErr CPL_DLL CPL_STDCALL GDALRasterAdviseRead(GDALRasterBandH hRB,
1777
                                                int nDSXOff, int nDSYOff,
1778
                                                int nDSXSize, int nDSYSize,
1779
                                                int nBXSize, int nBYSize,
1780
                                                GDALDataType eBDataType,
1781
                                                CSLConstList papszOptions);
1782
1783
CPLErr CPL_DLL CPL_STDCALL GDALRasterIO(GDALRasterBandH hRBand,
1784
                                        GDALRWFlag eRWFlag, int nDSXOff,
1785
                                        int nDSYOff, int nDSXSize, int nDSYSize,
1786
                                        void *pBuffer, int nBXSize, int nBYSize,
1787
                                        GDALDataType eBDataType,
1788
                                        int nPixelSpace,
1789
                                        int nLineSpace) CPL_WARN_UNUSED_RESULT;
1790
CPLErr CPL_DLL CPL_STDCALL GDALRasterIOEx(
1791
    GDALRasterBandH hRBand, GDALRWFlag eRWFlag, int nDSXOff, int nDSYOff,
1792
    int nDSXSize, int nDSYSize, void *pBuffer, int nBXSize, int nBYSize,
1793
    GDALDataType eBDataType, GSpacing nPixelSpace, GSpacing nLineSpace,
1794
    GDALRasterIOExtraArg *psExtraArg) CPL_WARN_UNUSED_RESULT;
1795
CPLErr CPL_DLL CPL_STDCALL GDALReadBlock(GDALRasterBandH, int, int,
1796
                                         void *) CPL_WARN_UNUSED_RESULT;
1797
CPLErr CPL_DLL CPL_STDCALL GDALWriteBlock(GDALRasterBandH, int, int,
1798
                                          void *) CPL_WARN_UNUSED_RESULT;
1799
int CPL_DLL CPL_STDCALL GDALGetRasterBandXSize(GDALRasterBandH);
1800
int CPL_DLL CPL_STDCALL GDALGetRasterBandYSize(GDALRasterBandH);
1801
GDALAccess CPL_DLL CPL_STDCALL GDALGetRasterAccess(GDALRasterBandH);
1802
int CPL_DLL CPL_STDCALL GDALGetBandNumber(GDALRasterBandH);
1803
GDALDatasetH CPL_DLL CPL_STDCALL GDALGetBandDataset(GDALRasterBandH);
1804
1805
GDALColorInterp
1806
    CPL_DLL CPL_STDCALL GDALGetRasterColorInterpretation(GDALRasterBandH);
1807
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterColorInterpretation(GDALRasterBandH,
1808
                                                            GDALColorInterp);
1809
GDALColorTableH CPL_DLL CPL_STDCALL GDALGetRasterColorTable(GDALRasterBandH);
1810
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterColorTable(GDALRasterBandH,
1811
                                                   GDALColorTableH);
1812
int CPL_DLL CPL_STDCALL GDALHasArbitraryOverviews(GDALRasterBandH);
1813
int CPL_DLL CPL_STDCALL GDALGetOverviewCount(GDALRasterBandH);
1814
GDALRasterBandH CPL_DLL CPL_STDCALL GDALGetOverview(GDALRasterBandH, int);
1815
double CPL_DLL CPL_STDCALL GDALGetRasterNoDataValue(GDALRasterBandH, int *);
1816
int64_t CPL_DLL CPL_STDCALL GDALGetRasterNoDataValueAsInt64(GDALRasterBandH,
1817
                                                            int *);
1818
uint64_t CPL_DLL CPL_STDCALL GDALGetRasterNoDataValueAsUInt64(GDALRasterBandH,
1819
                                                              int *);
1820
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterNoDataValue(GDALRasterBandH, double);
1821
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterNoDataValueAsInt64(GDALRasterBandH,
1822
                                                           int64_t);
1823
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterNoDataValueAsUInt64(GDALRasterBandH,
1824
                                                            uint64_t);
1825
CPLErr CPL_DLL CPL_STDCALL GDALDeleteRasterNoDataValue(GDALRasterBandH);
1826
char CPL_DLL **CPL_STDCALL GDALGetRasterCategoryNames(GDALRasterBandH);
1827
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterCategoryNames(GDALRasterBandH,
1828
                                                      CSLConstList);
1829
double CPL_DLL CPL_STDCALL GDALGetRasterMinimum(GDALRasterBandH,
1830
                                                int *pbSuccess);
1831
double CPL_DLL CPL_STDCALL GDALGetRasterMaximum(GDALRasterBandH,
1832
                                                int *pbSuccess);
1833
CPLErr CPL_DLL CPL_STDCALL GDALGetRasterStatistics(
1834
    GDALRasterBandH, int bApproxOK, int bForce, double *pdfMin, double *pdfMax,
1835
    double *pdfMean, double *pdfStdDev);
1836
CPLErr CPL_DLL CPL_STDCALL
1837
GDALComputeRasterStatistics(GDALRasterBandH, int bApproxOK, double *pdfMin,
1838
                            double *pdfMax, double *pdfMean, double *pdfStdDev,
1839
                            GDALProgressFunc pfnProgress, void *pProgressData);
1840
CPLErr CPL_DLL GDALComputeRasterStatisticsEx(GDALRasterBandH, int bApproxOK,
1841
                                             double *pdfMin, double *pdfMax,
1842
                                             double *pdfMean, double *pdfStdDev,
1843
                                             GDALProgressFunc pfnProgress,
1844
                                             void *pProgressData,
1845
                                             CSLConstList papszOptions);
1846
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterStatistics(GDALRasterBandH hBand,
1847
                                                   double dfMin, double dfMax,
1848
                                                   double dfMean,
1849
                                                   double dfStdDev);
1850
1851
GDALMDArrayH
1852
    CPL_DLL GDALRasterBandAsMDArray(GDALRasterBandH) CPL_WARN_UNUSED_RESULT;
1853
1854
const char CPL_DLL *CPL_STDCALL GDALGetRasterUnitType(GDALRasterBandH);
1855
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterUnitType(GDALRasterBandH hBand,
1856
                                                 const char *pszNewValue);
1857
double CPL_DLL CPL_STDCALL GDALGetRasterOffset(GDALRasterBandH, int *pbSuccess);
1858
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterOffset(GDALRasterBandH hBand,
1859
                                               double dfNewOffset);
1860
double CPL_DLL CPL_STDCALL GDALGetRasterScale(GDALRasterBandH, int *pbSuccess);
1861
CPLErr CPL_DLL CPL_STDCALL GDALSetRasterScale(GDALRasterBandH hBand,
1862
                                              double dfNewOffset);
1863
CPLErr CPL_DLL CPL_STDCALL GDALComputeRasterMinMax(GDALRasterBandH hBand,
1864
                                                   int bApproxOK,
1865
                                                   double adfMinMax[2]);
1866
CPLErr CPL_DLL GDALComputeRasterMinMaxLocation(GDALRasterBandH hBand,
1867
                                               double *pdfMin, double *pdfMax,
1868
                                               int *pnMinX, int *pnMinY,
1869
                                               int *pnMaxX, int *pnMaxY);
1870
CPLErr CPL_DLL CPL_STDCALL GDALFlushRasterCache(GDALRasterBandH hBand);
1871
CPLErr CPL_DLL CPL_STDCALL GDALDropRasterCache(GDALRasterBandH hBand);
1872
CPLErr CPL_DLL CPL_STDCALL GDALGetRasterHistogram(
1873
    GDALRasterBandH hBand, double dfMin, double dfMax, int nBuckets,
1874
    int *panHistogram, int bIncludeOutOfRange, int bApproxOK,
1875
    GDALProgressFunc pfnProgress, void *pProgressData)
1876
    /*! @cond Doxygen_Suppress */
1877
    CPL_WARN_DEPRECATED("Use GDALGetRasterHistogramEx() instead")
1878
    /*! @endcond */
1879
    ;
1880
CPLErr CPL_DLL CPL_STDCALL GDALGetRasterHistogramEx(
1881
    GDALRasterBandH hBand, double dfMin, double dfMax, int nBuckets,
1882
    GUIntBig *panHistogram, int bIncludeOutOfRange, int bApproxOK,
1883
    GDALProgressFunc pfnProgress, void *pProgressData);
1884
CPLErr CPL_DLL CPL_STDCALL
1885
GDALGetDefaultHistogram(GDALRasterBandH hBand, double *pdfMin, double *pdfMax,
1886
                        int *pnBuckets, int **ppanHistogram, int bForce,
1887
                        GDALProgressFunc pfnProgress, void *pProgressData)
1888
    /*! @cond Doxygen_Suppress */
1889
    CPL_WARN_DEPRECATED("Use GDALGetDefaultHistogramEx() instead")
1890
    /*! @endcond */
1891
    ;
1892
CPLErr CPL_DLL CPL_STDCALL
1893
GDALGetDefaultHistogramEx(GDALRasterBandH hBand, double *pdfMin, double *pdfMax,
1894
                          int *pnBuckets, GUIntBig **ppanHistogram, int bForce,
1895
                          GDALProgressFunc pfnProgress, void *pProgressData);
1896
CPLErr CPL_DLL CPL_STDCALL GDALSetDefaultHistogram(GDALRasterBandH hBand,
1897
                                                   double dfMin, double dfMax,
1898
                                                   int nBuckets,
1899
                                                   int *panHistogram)
1900
    /*! @cond Doxygen_Suppress */
1901
    CPL_WARN_DEPRECATED("Use GDALSetDefaultHistogramEx() instead")
1902
    /*! @endcond */
1903
    ;
1904
CPLErr CPL_DLL CPL_STDCALL GDALSetDefaultHistogramEx(GDALRasterBandH hBand,
1905
                                                     double dfMin, double dfMax,
1906
                                                     int nBuckets,
1907
                                                     GUIntBig *panHistogram);
1908
int CPL_DLL CPL_STDCALL GDALGetRandomRasterSample(GDALRasterBandH, int,
1909
                                                  float *);
1910
GDALRasterBandH CPL_DLL CPL_STDCALL GDALGetRasterSampleOverview(GDALRasterBandH,
1911
                                                                int);
1912
GDALRasterBandH CPL_DLL CPL_STDCALL
1913
    GDALGetRasterSampleOverviewEx(GDALRasterBandH, GUIntBig);
1914
CPLErr CPL_DLL CPL_STDCALL GDALFillRaster(GDALRasterBandH hBand,
1915
                                          double dfRealValue,
1916
                                          double dfImaginaryValue);
1917
CPLErr CPL_DLL CPL_STDCALL GDALComputeBandStats(
1918
    GDALRasterBandH hBand, int nSampleStep, double *pdfMean, double *pdfStdDev,
1919
    GDALProgressFunc pfnProgress, void *pProgressData);
1920
CPLErr CPL_DLL GDALOverviewMagnitudeCorrection(GDALRasterBandH hBaseBand,
1921
                                               int nOverviewCount,
1922
                                               GDALRasterBandH *pahOverviews,
1923
                                               GDALProgressFunc pfnProgress,
1924
                                               void *pProgressData);
1925
1926
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
1927
GDALGetDefaultRAT(GDALRasterBandH hBand);
1928
CPLErr CPL_DLL CPL_STDCALL GDALSetDefaultRAT(GDALRasterBandH,
1929
                                             GDALRasterAttributeTableH);
1930
CPLErr CPL_DLL CPL_STDCALL GDALAddDerivedBandPixelFunc(
1931
    const char *pszName, GDALDerivedPixelFunc pfnPixelFunc);
1932
CPLErr CPL_DLL CPL_STDCALL GDALAddDerivedBandPixelFuncWithArgs(
1933
    const char *pszName, GDALDerivedPixelFuncWithArgs pfnPixelFunc,
1934
    const char *pszMetadata);
1935
1936
CPLErr CPL_DLL GDALRasterInterpolateAtPoint(GDALRasterBandH hBand,
1937
                                            double dfPixel, double dfLine,
1938
                                            GDALRIOResampleAlg eInterpolation,
1939
                                            double *pdfRealValue,
1940
                                            double *pdfImagValue);
1941
1942
CPLErr CPL_DLL GDALRasterInterpolateAtGeolocation(
1943
    GDALRasterBandH hBand, double dfGeolocX, double dfGeolocY,
1944
    OGRSpatialReferenceH hSRS, GDALRIOResampleAlg eInterpolation,
1945
    double *pdfRealValue, double *pdfImagValue,
1946
    CSLConstList papszTransformerOptions);
1947
1948
/** Generic pointer for the working structure of VRTProcessedDataset
1949
 * function. */
1950
typedef void *VRTPDWorkingDataPtr;
1951
1952
/** Initialization function to pass to GDALVRTRegisterProcessedDatasetFunc.
1953
 *
1954
 * This initialization function is called for each step of a VRTProcessedDataset
1955
 * that uses the related algorithm.
1956
 * The initialization function returns the output data type, output band count
1957
 * and potentially initializes a working structure, typically parsing arguments.
1958
 *
1959
 * @param pszFuncName Function name. Must be unique and not null.
1960
 * @param pUserData User data. May be nullptr. Must remain valid during the
1961
 *                  lifetime of GDAL.
1962
 * @param papszFunctionArgs Function arguments as a list of key=value pairs.
1963
 * @param nInBands Number of input bands.
1964
 * @param eInDT Input data type.
1965
 * @param[in,out] padfInNoData Array of nInBands values for the input nodata
1966
 *                             value. The init function may also override them.
1967
 * @param[in,out] pnOutBands Pointer whose value must be set to the number of
1968
 *                           output bands. This will be set to 0 by the caller
1969
 *                           when calling the function, unless this is the
1970
 *                           final step, in which case it will be initialized
1971
 *                           with the number of expected output bands.
1972
 * @param[out] peOutDT Pointer whose value must be set to the output
1973
 *                     data type.
1974
 * @param[in,out] ppadfOutNoData Pointer to an array of *pnOutBands values
1975
 *                               for the output nodata value that the
1976
 *                               function must set.
1977
 *                               For non-final steps, *ppadfOutNoData
1978
 *                               will be nullptr and it is the responsibility
1979
 *                               of the function to CPLMalloc()'ate it.
1980
 *                               If this is the final step, it will be
1981
 *                               already allocated and initialized with the
1982
 *                               expected nodata values from the output
1983
 *                               dataset (if the init function need to
1984
 *                               reallocate it, it must use CPLRealloc())
1985
 * @param pszVRTPath Directory of the VRT
1986
 * @param[out] ppWorkingData Pointer whose value must be set to a working
1987
 *                           structure, or nullptr.
1988
 * @return CE_None in case of success, error otherwise.
1989
 * @since GDAL 3.9 */
1990
typedef CPLErr (*GDALVRTProcessedDatasetFuncInit)(
1991
    const char *pszFuncName, void *pUserData, CSLConstList papszFunctionArgs,
1992
    int nInBands, GDALDataType eInDT, double *padfInNoData, int *pnOutBands,
1993
    GDALDataType *peOutDT, double **ppadfOutNoData, const char *pszVRTPath,
1994
    VRTPDWorkingDataPtr *ppWorkingData);
1995
1996
/** Free function to pass to GDALVRTRegisterProcessedDatasetFunc.
1997
 *
1998
 * @param pszFuncName Function name. Must be unique and not null.
1999
 * @param pUserData User data. May be nullptr. Must remain valid during the
2000
 *                  lifetime of GDAL.
2001
 * @param pWorkingData Value of the *ppWorkingData output parameter of
2002
 *                     GDALVRTProcessedDatasetFuncInit.
2003
 * @since GDAL 3.9
2004
 */
2005
typedef void (*GDALVRTProcessedDatasetFuncFree)(
2006
    const char *pszFuncName, void *pUserData, VRTPDWorkingDataPtr pWorkingData);
2007
2008
/** Processing function to pass to GDALVRTRegisterProcessedDatasetFunc.
2009
 * @param pszFuncName Function name. Must be unique and not null.
2010
 * @param pUserData User data. May be nullptr. Must remain valid during the
2011
 *                  lifetime of GDAL.
2012
 * @param pWorkingData Value of the *ppWorkingData output parameter of
2013
 *                     GDALVRTProcessedDatasetFuncInit.
2014
 * @param papszFunctionArgs Function arguments as a list of key=value pairs.
2015
 * @param nBufXSize Width in pixels of pInBuffer and pOutBuffer
2016
 * @param nBufYSize Height in pixels of pInBuffer and pOutBuffer
2017
 * @param pInBuffer Input buffer. It is pixel-interleaved
2018
 *                  (i.e. R00,G00,B00,R01,G01,B01, etc.)
2019
 * @param nInBufferSize Size in bytes of pInBuffer
2020
 * @param eInDT Data type of pInBuffer
2021
 * @param nInBands Number of bands in pInBuffer.
2022
 * @param padfInNoData Input nodata values.
2023
 * @param pOutBuffer Output buffer. It is pixel-interleaved
2024
 *                   (i.e. R00,G00,B00,R01,G01,B01, etc.)
2025
 * @param nOutBufferSize Size in bytes of pOutBuffer
2026
 * @param eOutDT Data type of pOutBuffer
2027
 * @param nOutBands Number of bands in pOutBuffer.
2028
 * @param padfOutNoData Input nodata values.
2029
 * @param dfSrcXOff Source X coordinate in pixel of the top-left of the region
2030
 * @param dfSrcYOff Source Y coordinate in pixel of the top-left of the region
2031
 * @param dfSrcXSize Width in pixels of the region
2032
 * @param dfSrcYSize Height in pixels of the region
2033
 * @param adfSrcGT Source geotransform
2034
 * @param pszVRTPath Directory of the VRT
2035
 * @param papszExtra Extra arguments (unused for now)
2036
 * @since GDAL 3.9
2037
 */
2038
typedef CPLErr (*GDALVRTProcessedDatasetFuncProcess)(
2039
    const char *pszFuncName, void *pUserData, VRTPDWorkingDataPtr pWorkingData,
2040
    CSLConstList papszFunctionArgs, int nBufXSize, int nBufYSize,
2041
    const void *pInBuffer, size_t nInBufferSize, GDALDataType eInDT,
2042
    int nInBands, const double *padfInNoData, void *pOutBuffer,
2043
    size_t nOutBufferSize, GDALDataType eOutDT, int nOutBands,
2044
    const double *padfOutNoData, double dfSrcXOff, double dfSrcYOff,
2045
    double dfSrcXSize, double dfSrcYSize, const double adfSrcGT[/*6*/],
2046
    const char *pszVRTPath, CSLConstList papszExtra);
2047
2048
CPLErr CPL_DLL GDALVRTRegisterProcessedDatasetFunc(
2049
    const char *pszFuncName, void *pUserData, const char *pszXMLMetadata,
2050
    GDALDataType eRequestedInputDT, const GDALDataType *paeSupportedInputDT,
2051
    size_t nSupportedInputDTSize, const int *panSupportedInputBandCount,
2052
    size_t nSupportedInputBandCountSize,
2053
    GDALVRTProcessedDatasetFuncInit pfnInit,
2054
    GDALVRTProcessedDatasetFuncFree pfnFree,
2055
    GDALVRTProcessedDatasetFuncProcess pfnProcess, CSLConstList papszOptions);
2056
2057
GDALRasterBandH CPL_DLL CPL_STDCALL GDALGetMaskBand(GDALRasterBandH hBand);
2058
int CPL_DLL CPL_STDCALL GDALGetMaskFlags(GDALRasterBandH hBand);
2059
CPLErr CPL_DLL CPL_STDCALL GDALCreateMaskBand(GDALRasterBandH hBand,
2060
                                              int nFlags);
2061
bool CPL_DLL GDALIsMaskBand(GDALRasterBandH hBand);
2062
2063
/** Flag returned by GDALGetMaskFlags() to indicate that all pixels are valid */
2064
0
#define GMF_ALL_VALID 0x01
2065
/** Flag returned by GDALGetMaskFlags() to indicate that the mask band is
2066
 * valid for all bands */
2067
0
#define GMF_PER_DATASET 0x02
2068
/** Flag returned by GDALGetMaskFlags() to indicate that the mask band is
2069
 * an alpha band */
2070
0
#define GMF_ALPHA 0x04
2071
/** Flag returned by GDALGetMaskFlags() to indicate that the mask band is
2072
 * computed from nodata values */
2073
0
#define GMF_NODATA 0x08
2074
2075
/** Flag returned by GDALGetDataCoverageStatus() when the driver does not
2076
 * implement GetDataCoverageStatus(). This flag should be returned together
2077
 * with GDAL_DATA_COVERAGE_STATUS_DATA */
2078
0
#define GDAL_DATA_COVERAGE_STATUS_UNIMPLEMENTED 0x01
2079
2080
/** Flag returned by GDALGetDataCoverageStatus() when there is (potentially)
2081
 * data in the queried window. Can be combined with the binary or operator
2082
 * with GDAL_DATA_COVERAGE_STATUS_UNIMPLEMENTED or
2083
 * GDAL_DATA_COVERAGE_STATUS_EMPTY */
2084
0
#define GDAL_DATA_COVERAGE_STATUS_DATA 0x02
2085
2086
/** Flag returned by GDALGetDataCoverageStatus() when there is nodata in the
2087
 * queried window. This is typically identified by the concept of missing block
2088
 * in formats that supports it.
2089
 * Can be combined with the binary or operator with
2090
 * GDAL_DATA_COVERAGE_STATUS_DATA */
2091
0
#define GDAL_DATA_COVERAGE_STATUS_EMPTY 0x04
2092
2093
int CPL_DLL CPL_STDCALL GDALGetDataCoverageStatus(GDALRasterBandH hBand,
2094
                                                  int nXOff, int nYOff,
2095
                                                  int nXSize, int nYSize,
2096
                                                  int nMaskFlagStop,
2097
                                                  double *pdfDataPct);
2098
2099
void CPL_DLL GDALComputedRasterBandRelease(GDALComputedRasterBandH hBand);
2100
2101
/** Raster algebra unary operation */
2102
typedef enum
2103
{
2104
    /** Logical not */
2105
    GRAUO_LOGICAL_NOT,
2106
    /** Absolute value (module for complex data type) */
2107
    GRAUO_ABS,
2108
    /** Square root */
2109
    GRAUO_SQRT,
2110
    /** Natural logarithm (``ln``) */
2111
    GRAUO_LOG,
2112
    /** Logarithm base 10 */
2113
    GRAUO_LOG10,
2114
} GDALRasterAlgebraUnaryOperation;
2115
2116
GDALComputedRasterBandH CPL_DLL GDALRasterBandUnaryOp(
2117
    GDALRasterBandH hBand,
2118
    GDALRasterAlgebraUnaryOperation eOp) CPL_WARN_UNUSED_RESULT;
2119
2120
/** Raster algebra binary operation */
2121
typedef enum
2122
{
2123
    /** Addition */
2124
    GRABO_ADD,
2125
    /** Subtraction */
2126
    GRABO_SUB,
2127
    /** Multiplication */
2128
    GRABO_MUL,
2129
    /** Division */
2130
    GRABO_DIV,
2131
    /** Power */
2132
    GRABO_POW,
2133
    /** Strictly greater than test*/
2134
    GRABO_GT,
2135
    /** Greater or equal to test */
2136
    GRABO_GE,
2137
    /** Strictly lesser than test */
2138
    GRABO_LT,
2139
    /** Lesser or equal to test */
2140
    GRABO_LE,
2141
    /** Equality test */
2142
    GRABO_EQ,
2143
    /** Non-equality test */
2144
    GRABO_NE,
2145
    /** Logical and */
2146
    GRABO_LOGICAL_AND,
2147
    /** Logical or */
2148
    GRABO_LOGICAL_OR
2149
} GDALRasterAlgebraBinaryOperation;
2150
2151
GDALComputedRasterBandH CPL_DLL GDALRasterBandBinaryOpBand(
2152
    GDALRasterBandH hBand, GDALRasterAlgebraBinaryOperation eOp,
2153
    GDALRasterBandH hOtherBand) CPL_WARN_UNUSED_RESULT;
2154
GDALComputedRasterBandH CPL_DLL GDALRasterBandBinaryOpDouble(
2155
    GDALRasterBandH hBand, GDALRasterAlgebraBinaryOperation eOp,
2156
    double constant) CPL_WARN_UNUSED_RESULT;
2157
GDALComputedRasterBandH CPL_DLL GDALRasterBandBinaryOpDoubleToBand(
2158
    double constant, GDALRasterAlgebraBinaryOperation eOp,
2159
    GDALRasterBandH hBand) CPL_WARN_UNUSED_RESULT;
2160
2161
GDALComputedRasterBandH CPL_DLL
2162
GDALRasterBandIfThenElse(GDALRasterBandH hCondBand, GDALRasterBandH hThenBand,
2163
                         GDALRasterBandH hElseBand) CPL_WARN_UNUSED_RESULT;
2164
2165
GDALComputedRasterBandH CPL_DLL GDALRasterBandAsDataType(
2166
    GDALRasterBandH hBand, GDALDataType eDT) CPL_WARN_UNUSED_RESULT;
2167
2168
GDALComputedRasterBandH CPL_DLL GDALMaximumOfNBands(
2169
    size_t nBandCount, GDALRasterBandH *pahBands) CPL_WARN_UNUSED_RESULT;
2170
GDALComputedRasterBandH CPL_DLL GDALRasterBandMaxConstant(
2171
    GDALRasterBandH hBand, double dfConstant) CPL_WARN_UNUSED_RESULT;
2172
GDALComputedRasterBandH CPL_DLL GDALMinimumOfNBands(
2173
    size_t nBandCount, GDALRasterBandH *pahBands) CPL_WARN_UNUSED_RESULT;
2174
GDALComputedRasterBandH CPL_DLL GDALRasterBandMinConstant(
2175
    GDALRasterBandH hBand, double dfConstant) CPL_WARN_UNUSED_RESULT;
2176
GDALComputedRasterBandH CPL_DLL GDALMeanOfNBands(
2177
    size_t nBandCount, GDALRasterBandH *pahBands) CPL_WARN_UNUSED_RESULT;
2178
2179
/* ==================================================================== */
2180
/*     GDALAsyncReader                                                  */
2181
/* ==================================================================== */
2182
2183
GDALAsyncStatusType CPL_DLL CPL_STDCALL GDALARGetNextUpdatedRegion(
2184
    GDALAsyncReaderH hARIO, double dfTimeout, int *pnXBufOff, int *pnYBufOff,
2185
    int *pnXBufSize, int *pnYBufSize);
2186
int CPL_DLL CPL_STDCALL GDALARLockBuffer(GDALAsyncReaderH hARIO,
2187
                                         double dfTimeout);
2188
void CPL_DLL CPL_STDCALL GDALARUnlockBuffer(GDALAsyncReaderH hARIO);
2189
2190
/* -------------------------------------------------------------------- */
2191
/*      Helper functions.                                               */
2192
/* -------------------------------------------------------------------- */
2193
int CPL_DLL CPL_STDCALL GDALGeneralCmdLineProcessor(int nArgc,
2194
                                                    char ***ppapszArgv,
2195
                                                    int nOptions);
2196
void CPL_DLL CPL_STDCALL GDALSwapWords(void *pData, int nWordSize,
2197
                                       int nWordCount, int nWordSkip);
2198
void CPL_DLL CPL_STDCALL GDALSwapWordsEx(void *pData, int nWordSize,
2199
                                         size_t nWordCount, int nWordSkip);
2200
2201
void CPL_DLL CPL_STDCALL GDALCopyWords(const void *CPL_RESTRICT pSrcData,
2202
                                       GDALDataType eSrcType,
2203
                                       int nSrcPixelOffset,
2204
                                       void *CPL_RESTRICT pDstData,
2205
                                       GDALDataType eDstType,
2206
                                       int nDstPixelOffset, int nWordCount);
2207
2208
void CPL_DLL CPL_STDCALL GDALCopyWords64(
2209
    const void *CPL_RESTRICT pSrcData, GDALDataType eSrcType,
2210
    int nSrcPixelOffset, void *CPL_RESTRICT pDstData, GDALDataType eDstType,
2211
    int nDstPixelOffset, GPtrDiff_t nWordCount);
2212
2213
void CPL_DLL GDALCopyBits(const GByte *pabySrcData, int nSrcOffset,
2214
                          int nSrcStep, GByte *pabyDstData, int nDstOffset,
2215
                          int nDstStep, int nBitCount, int nStepCount);
2216
2217
void CPL_DLL GDALDeinterleave(const void *pSourceBuffer, GDALDataType eSourceDT,
2218
                              int nComponents, void **ppDestBuffer,
2219
                              GDALDataType eDestDT, size_t nIters);
2220
2221
void CPL_DLL GDALTranspose2D(const void *pSrc, GDALDataType eSrcType,
2222
                             void *pDst, GDALDataType eDstType,
2223
                             size_t nSrcWidth, size_t nSrcHeight);
2224
2225
double CPL_DLL GDALGetNoDataReplacementValue(GDALDataType, double);
2226
2227
int CPL_DLL CPL_STDCALL GDALLoadWorldFile(const char *, double *);
2228
int CPL_DLL CPL_STDCALL GDALReadWorldFile(const char *, const char *, double *);
2229
int CPL_DLL CPL_STDCALL GDALWriteWorldFile(const char *, const char *,
2230
                                           double *);
2231
int CPL_DLL CPL_STDCALL GDALLoadTabFile(const char *, double *, char **, int *,
2232
                                        GDAL_GCP **);
2233
int CPL_DLL CPL_STDCALL GDALReadTabFile(const char *, double *, char **, int *,
2234
                                        GDAL_GCP **);
2235
int CPL_DLL CPL_STDCALL GDALLoadOziMapFile(const char *, double *, char **,
2236
                                           int *, GDAL_GCP **);
2237
int CPL_DLL CPL_STDCALL GDALReadOziMapFile(const char *, double *, char **,
2238
                                           int *, GDAL_GCP **);
2239
2240
const char CPL_DLL *CPL_STDCALL GDALDecToDMS(double, const char *, int);
2241
double CPL_DLL CPL_STDCALL GDALPackedDMSToDec(double);
2242
double CPL_DLL CPL_STDCALL GDALDecToPackedDMS(double);
2243
2244
/* Note to developers : please keep this section in sync with ogr_core.h */
2245
2246
#ifndef GDAL_VERSION_INFO_DEFINED
2247
#ifndef DOXYGEN_SKIP
2248
#define GDAL_VERSION_INFO_DEFINED
2249
#endif
2250
const char CPL_DLL *CPL_STDCALL GDALVersionInfo(const char *);
2251
#endif
2252
2253
#ifndef GDAL_CHECK_VERSION
2254
2255
int CPL_DLL CPL_STDCALL GDALCheckVersion(int nVersionMajor, int nVersionMinor,
2256
                                         const char *pszCallingComponentName);
2257
2258
/** Helper macro for GDALCheckVersion()
2259
  @see GDALCheckVersion()
2260
  */
2261
#define GDAL_CHECK_VERSION(pszCallingComponentName)                            \
2262
    GDALCheckVersion(GDAL_VERSION_MAJOR, GDAL_VERSION_MINOR,                   \
2263
                     pszCallingComponentName)
2264
2265
#endif
2266
2267
/*! @cond Doxygen_Suppress */
2268
#ifdef GDAL_COMPILATION
2269
#define GDALExtractRPCInfoV1 GDALExtractRPCInfo
2270
#else
2271
#define GDALRPCInfo GDALRPCInfoV2
2272
#define GDALExtractRPCInfo GDALExtractRPCInfoV2
2273
#endif
2274
2275
/* Deprecated: use GDALRPCInfoV2 */
2276
typedef struct
2277
{
2278
    double dfLINE_OFF;   /*!< Line offset */
2279
    double dfSAMP_OFF;   /*!< Sample/Pixel offset */
2280
    double dfLAT_OFF;    /*!< Latitude offset */
2281
    double dfLONG_OFF;   /*!< Longitude offset */
2282
    double dfHEIGHT_OFF; /*!< Height offset */
2283
2284
    double dfLINE_SCALE;   /*!< Line scale */
2285
    double dfSAMP_SCALE;   /*!< Sample/Pixel scale */
2286
    double dfLAT_SCALE;    /*!< Latitude scale */
2287
    double dfLONG_SCALE;   /*!< Longitude scale */
2288
    double dfHEIGHT_SCALE; /*!< Height scale */
2289
2290
    double adfLINE_NUM_COEFF[20]; /*!< Line Numerator Coefficients */
2291
    double adfLINE_DEN_COEFF[20]; /*!< Line Denominator Coefficients */
2292
    double adfSAMP_NUM_COEFF[20]; /*!< Sample/Pixel Numerator Coefficients */
2293
    double adfSAMP_DEN_COEFF[20]; /*!< Sample/Pixel Denominator Coefficients */
2294
2295
    double dfMIN_LONG; /*!< Minimum longitude */
2296
    double dfMIN_LAT;  /*!< Minimum latitude */
2297
    double dfMAX_LONG; /*!< Maximum longitude */
2298
    double dfMAX_LAT;  /*!< Maximum latitude */
2299
} GDALRPCInfoV1;
2300
2301
/*! @endcond */
2302
2303
/** Structure to store Rational Polynomial Coefficients / Rigorous Projection
2304
 * Model. See http://geotiff.maptools.org/rpc_prop.html */
2305
typedef struct
2306
{
2307
    double dfLINE_OFF;   /*!< Line offset */
2308
    double dfSAMP_OFF;   /*!< Sample/Pixel offset */
2309
    double dfLAT_OFF;    /*!< Latitude offset */
2310
    double dfLONG_OFF;   /*!< Longitude offset */
2311
    double dfHEIGHT_OFF; /*!< Height offset */
2312
2313
    double dfLINE_SCALE;   /*!< Line scale */
2314
    double dfSAMP_SCALE;   /*!< Sample/Pixel scale */
2315
    double dfLAT_SCALE;    /*!< Latitude scale */
2316
    double dfLONG_SCALE;   /*!< Longitude scale */
2317
    double dfHEIGHT_SCALE; /*!< Height scale */
2318
2319
    double adfLINE_NUM_COEFF[20]; /*!< Line Numerator Coefficients */
2320
    double adfLINE_DEN_COEFF[20]; /*!< Line Denominator Coefficients */
2321
    double adfSAMP_NUM_COEFF[20]; /*!< Sample/Pixel Numerator Coefficients */
2322
    double adfSAMP_DEN_COEFF[20]; /*!< Sample/Pixel Denominator Coefficients */
2323
2324
    double dfMIN_LONG; /*!< Minimum longitude */
2325
    double dfMIN_LAT;  /*!< Minimum latitude */
2326
    double dfMAX_LONG; /*!< Maximum longitude */
2327
    double dfMAX_LAT;  /*!< Maximum latitude */
2328
2329
    /* Those fields should be at the end. And all above fields should be the
2330
     * same as in GDALRPCInfoV1 */
2331
    double dfERR_BIAS; /*!< Bias error */
2332
    double dfERR_RAND; /*!< Random error */
2333
} GDALRPCInfoV2;
2334
2335
/*! @cond Doxygen_Suppress */
2336
int CPL_DLL CPL_STDCALL GDALExtractRPCInfoV1(CSLConstList, GDALRPCInfoV1 *);
2337
/*! @endcond */
2338
int CPL_DLL CPL_STDCALL GDALExtractRPCInfoV2(CSLConstList, GDALRPCInfoV2 *);
2339
2340
/* ==================================================================== */
2341
/*      Color tables.                                                   */
2342
/* ==================================================================== */
2343
2344
/** Color tuple */
2345
typedef struct
2346
{
2347
    /*! gray, red, cyan or hue */
2348
    short c1;
2349
2350
    /*! green, magenta, or lightness */
2351
    short c2;
2352
2353
    /*! blue, yellow, or saturation */
2354
    short c3;
2355
2356
    /*! alpha or blackband */
2357
    short c4;
2358
} GDALColorEntry;
2359
2360
GDALColorTableH CPL_DLL CPL_STDCALL GDALCreateColorTable(GDALPaletteInterp)
2361
    CPL_WARN_UNUSED_RESULT;
2362
void CPL_DLL CPL_STDCALL GDALDestroyColorTable(GDALColorTableH);
2363
GDALColorTableH CPL_DLL CPL_STDCALL GDALCloneColorTable(GDALColorTableH);
2364
GDALPaletteInterp
2365
    CPL_DLL CPL_STDCALL GDALGetPaletteInterpretation(GDALColorTableH);
2366
int CPL_DLL CPL_STDCALL GDALGetColorEntryCount(GDALColorTableH);
2367
const GDALColorEntry CPL_DLL *CPL_STDCALL GDALGetColorEntry(GDALColorTableH,
2368
                                                            int);
2369
int CPL_DLL CPL_STDCALL GDALGetColorEntryAsRGB(GDALColorTableH, int,
2370
                                               GDALColorEntry *);
2371
void CPL_DLL CPL_STDCALL GDALSetColorEntry(GDALColorTableH, int,
2372
                                           const GDALColorEntry *);
2373
void CPL_DLL CPL_STDCALL GDALCreateColorRamp(GDALColorTableH hTable,
2374
                                             int nStartIndex,
2375
                                             const GDALColorEntry *psStartColor,
2376
                                             int nEndIndex,
2377
                                             const GDALColorEntry *psEndColor);
2378
2379
/* ==================================================================== */
2380
/*      Raster Attribute Table                                          */
2381
/* ==================================================================== */
2382
2383
/** Field type of raster attribute table */
2384
typedef enum
2385
{
2386
    /*! Integer field */ GFT_Integer,
2387
    /*! Floating point (double) field */ GFT_Real,
2388
    /*! String field */ GFT_String,
2389
    /*! Boolean field (GDAL >= 3.12) */ GFT_Boolean,
2390
    /*! DateTime field (GDAL >= 3.12) */ GFT_DateTime,
2391
    /*! Geometry field, as WKB (GDAL >= 3.12) */ GFT_WKBGeometry
2392
} GDALRATFieldType;
2393
2394
/** First invalid value for the GDALRATFieldType enumeration */
2395
0
#define GFT_MaxCount (GFT_WKBGeometry + 1)
2396
2397
/** Field usage of raster attribute table */
2398
typedef enum
2399
{
2400
    /*! General purpose field. */ GFU_Generic = 0,
2401
    /*! Histogram pixel count */ GFU_PixelCount = 1,
2402
    /*! Class name */ GFU_Name = 2,
2403
    /*! Class range minimum */ GFU_Min = 3,
2404
    /*! Class range maximum */ GFU_Max = 4,
2405
    /*! Class value (min=max) */ GFU_MinMax = 5,
2406
    /*! Red class color (0-255) */ GFU_Red = 6,
2407
    /*! Green class color (0-255) */ GFU_Green = 7,
2408
    /*! Blue class color (0-255) */ GFU_Blue = 8,
2409
    /*! Alpha (0=transparent,255=opaque)*/ GFU_Alpha = 9,
2410
    /*! Color Range Red Minimum */ GFU_RedMin = 10,
2411
    /*! Color Range Green Minimum */ GFU_GreenMin = 11,
2412
    /*! Color Range Blue Minimum */ GFU_BlueMin = 12,
2413
    /*! Color Range Alpha Minimum */ GFU_AlphaMin = 13,
2414
    /*! Color Range Red Maximum */ GFU_RedMax = 14,
2415
    /*! Color Range Green Maximum */ GFU_GreenMax = 15,
2416
    /*! Color Range Blue Maximum */ GFU_BlueMax = 16,
2417
    /*! Color Range Alpha Maximum */ GFU_AlphaMax = 17,
2418
    /*! Maximum GFU value (equals to GFU_AlphaMax+1 currently) */ GFU_MaxCount
2419
} GDALRATFieldUsage;
2420
2421
/** RAT table type (thematic or athematic)
2422
 */
2423
typedef enum
2424
{
2425
    /*! Thematic table type */ GRTT_THEMATIC,
2426
    /*! Athematic table type */ GRTT_ATHEMATIC
2427
} GDALRATTableType;
2428
2429
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
2430
GDALCreateRasterAttributeTable(void) CPL_WARN_UNUSED_RESULT;
2431
2432
void CPL_DLL CPL_STDCALL
2433
    GDALDestroyRasterAttributeTable(GDALRasterAttributeTableH);
2434
2435
int CPL_DLL CPL_STDCALL GDALRATGetColumnCount(GDALRasterAttributeTableH);
2436
2437
const char CPL_DLL *CPL_STDCALL GDALRATGetNameOfCol(GDALRasterAttributeTableH,
2438
                                                    int);
2439
GDALRATFieldUsage CPL_DLL CPL_STDCALL
2440
GDALRATGetUsageOfCol(GDALRasterAttributeTableH, int);
2441
GDALRATFieldType CPL_DLL CPL_STDCALL
2442
GDALRATGetTypeOfCol(GDALRasterAttributeTableH, int);
2443
2444
const char CPL_DLL *GDALGetRATFieldTypeName(GDALRATFieldType);
2445
const char CPL_DLL *GDALGetRATFieldUsageName(GDALRATFieldUsage);
2446
2447
int CPL_DLL CPL_STDCALL GDALRATGetColOfUsage(GDALRasterAttributeTableH,
2448
                                             GDALRATFieldUsage);
2449
int CPL_DLL CPL_STDCALL GDALRATGetRowCount(GDALRasterAttributeTableH);
2450
2451
const char CPL_DLL *CPL_STDCALL
2452
GDALRATGetValueAsString(GDALRasterAttributeTableH, int iRow, int iField);
2453
int CPL_DLL CPL_STDCALL GDALRATGetValueAsInt(GDALRasterAttributeTableH,
2454
                                             int iRow, int iField);
2455
double CPL_DLL CPL_STDCALL GDALRATGetValueAsDouble(GDALRasterAttributeTableH,
2456
                                                   int iRow, int iField);
2457
bool CPL_DLL GDALRATGetValueAsBoolean(GDALRasterAttributeTableH, int iRow,
2458
                                      int iField);
2459
2460
#ifdef __cplusplus
2461
extern "C++"
2462
{
2463
#endif
2464
2465
    /** Structure encoding a DateTime field for a GDAL Raster Attribute Table.
2466
 *
2467
 * @since 3.12
2468
 */
2469
    struct GDALRATDateTime
2470
    {
2471
        /*! Year */ int nYear;
2472
        /*! Month [1, 12] */ int nMonth;
2473
        /*! Day [1, 31] */ int nDay;
2474
        /*! Hour [0, 23] */ int nHour;
2475
        /*! Minute [0, 59] */ int nMinute;
2476
        /*! Second [0, 61) */ float fSecond;
2477
        /*! Time zone hour [0, 23] */ int nTimeZoneHour;
2478
        /*! Time zone minute: 0, 15, 30, 45 */ int nTimeZoneMinute;
2479
        /*! Whether time zone is positive (or null) */ bool bPositiveTimeZone;
2480
        /*! Whether this object is valid */ bool bIsValid;
2481
2482
#ifdef __cplusplus
2483
        GDALRATDateTime()
2484
0
            : nYear(0), nMonth(0), nDay(0), nHour(0), nMinute(0), fSecond(0),
2485
0
              nTimeZoneHour(0), nTimeZoneMinute(0), bPositiveTimeZone(false),
2486
0
              bIsValid(false)
2487
0
        {
2488
0
        }
2489
#endif
2490
    };
2491
2492
#ifdef __cplusplus
2493
}
2494
#endif
2495
2496
/*! @cond Doxygen_Suppress */
2497
typedef struct GDALRATDateTime GDALRATDateTime;
2498
/*! @endcond */
2499
2500
CPLErr CPL_DLL GDALRATGetValueAsDateTime(GDALRasterAttributeTableH, int iRow,
2501
                                         int iField,
2502
                                         GDALRATDateTime *psDateTime);
2503
const GByte CPL_DLL *GDALRATGetValueAsWKBGeometry(GDALRasterAttributeTableH,
2504
                                                  int iRow, int iField,
2505
                                                  size_t *pnWKBSize);
2506
2507
void CPL_DLL CPL_STDCALL GDALRATSetValueAsString(GDALRasterAttributeTableH,
2508
                                                 int iRow, int iField,
2509
                                                 const char *);
2510
void CPL_DLL CPL_STDCALL GDALRATSetValueAsInt(GDALRasterAttributeTableH,
2511
                                              int iRow, int iField, int);
2512
void CPL_DLL CPL_STDCALL GDALRATSetValueAsDouble(GDALRasterAttributeTableH,
2513
                                                 int iRow, int iField, double);
2514
CPLErr CPL_DLL GDALRATSetValueAsBoolean(GDALRasterAttributeTableH, int iRow,
2515
                                        int iField, bool);
2516
CPLErr CPL_DLL GDALRATSetValueAsDateTime(GDALRasterAttributeTableH, int iRow,
2517
                                         int iField,
2518
                                         const GDALRATDateTime *psDateTime);
2519
CPLErr CPL_DLL GDALRATSetValueAsWKBGeometry(GDALRasterAttributeTableH, int iRow,
2520
                                            int iField, const void *pabyWKB,
2521
                                            size_t nWKBSize);
2522
2523
int CPL_DLL CPL_STDCALL
2524
GDALRATChangesAreWrittenToFile(GDALRasterAttributeTableH hRAT);
2525
2526
CPLErr CPL_DLL CPL_STDCALL GDALRATValuesIOAsDouble(
2527
    GDALRasterAttributeTableH hRAT, GDALRWFlag eRWFlag, int iField,
2528
    int iStartRow, int iLength, double *pdfData);
2529
CPLErr CPL_DLL CPL_STDCALL
2530
GDALRATValuesIOAsInteger(GDALRasterAttributeTableH hRAT, GDALRWFlag eRWFlag,
2531
                         int iField, int iStartRow, int iLength, int *pnData);
2532
CPLErr CPL_DLL CPL_STDCALL GDALRATValuesIOAsString(
2533
    GDALRasterAttributeTableH hRAT, GDALRWFlag eRWFlag, int iField,
2534
    int iStartRow, int iLength, char **papszStrList);
2535
CPLErr CPL_DLL GDALRATValuesIOAsBoolean(GDALRasterAttributeTableH hRAT,
2536
                                        GDALRWFlag eRWFlag, int iField,
2537
                                        int iStartRow, int iLength,
2538
                                        bool *pbData);
2539
CPLErr CPL_DLL GDALRATValuesIOAsDateTime(GDALRasterAttributeTableH hRAT,
2540
                                         GDALRWFlag eRWFlag, int iField,
2541
                                         int iStartRow, int iLength,
2542
                                         GDALRATDateTime *pasDateTime);
2543
CPLErr CPL_DLL GDALRATValuesIOAsWKBGeometry(GDALRasterAttributeTableH hRAT,
2544
                                            GDALRWFlag eRWFlag, int iField,
2545
                                            int iStartRow, int iLength,
2546
                                            GByte **ppabyWKB,
2547
                                            size_t *pnWKBSize);
2548
2549
void CPL_DLL CPL_STDCALL GDALRATSetRowCount(GDALRasterAttributeTableH, int);
2550
CPLErr CPL_DLL CPL_STDCALL GDALRATCreateColumn(GDALRasterAttributeTableH,
2551
                                               const char *, GDALRATFieldType,
2552
                                               GDALRATFieldUsage);
2553
CPLErr CPL_DLL CPL_STDCALL GDALRATSetLinearBinning(GDALRasterAttributeTableH,
2554
                                                   double, double);
2555
int CPL_DLL CPL_STDCALL GDALRATGetLinearBinning(GDALRasterAttributeTableH,
2556
                                                double *, double *);
2557
CPLErr CPL_DLL CPL_STDCALL GDALRATSetTableType(
2558
    GDALRasterAttributeTableH hRAT, const GDALRATTableType eInTableType);
2559
GDALRATTableType CPL_DLL CPL_STDCALL
2560
GDALRATGetTableType(GDALRasterAttributeTableH hRAT);
2561
CPLErr CPL_DLL CPL_STDCALL
2562
    GDALRATInitializeFromColorTable(GDALRasterAttributeTableH, GDALColorTableH);
2563
GDALColorTableH CPL_DLL CPL_STDCALL
2564
GDALRATTranslateToColorTable(GDALRasterAttributeTableH, int nEntryCount);
2565
void CPL_DLL CPL_STDCALL GDALRATDumpReadable(GDALRasterAttributeTableH, FILE *);
2566
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
2567
GDALRATClone(const GDALRasterAttributeTableH);
2568
2569
void CPL_DLL *CPL_STDCALL GDALRATSerializeJSON(GDALRasterAttributeTableH)
2570
    CPL_WARN_UNUSED_RESULT;
2571
2572
int CPL_DLL CPL_STDCALL GDALRATGetRowOfValue(GDALRasterAttributeTableH, double);
2573
void CPL_DLL CPL_STDCALL GDALRATRemoveStatistics(GDALRasterAttributeTableH);
2574
2575
/* -------------------------------------------------------------------- */
2576
/*                          Relationships                               */
2577
/* -------------------------------------------------------------------- */
2578
2579
/** Cardinality of relationship.
2580
 *
2581
 * @since GDAL 3.6
2582
 */
2583
typedef enum
2584
{
2585
    /** One-to-one */
2586
    GRC_ONE_TO_ONE,
2587
    /** One-to-many */
2588
    GRC_ONE_TO_MANY,
2589
    /** Many-to-one */
2590
    GRC_MANY_TO_ONE,
2591
    /** Many-to-many */
2592
    GRC_MANY_TO_MANY,
2593
} GDALRelationshipCardinality;
2594
2595
/** Type of relationship.
2596
 *
2597
 * @since GDAL 3.6
2598
 */
2599
typedef enum
2600
{
2601
    /** Composite relationship */
2602
    GRT_COMPOSITE,
2603
    /** Association relationship */
2604
    GRT_ASSOCIATION,
2605
    /** Aggregation relationship */
2606
    GRT_AGGREGATION,
2607
} GDALRelationshipType;
2608
2609
GDALRelationshipH CPL_DLL GDALRelationshipCreate(const char *, const char *,
2610
                                                 const char *,
2611
                                                 GDALRelationshipCardinality);
2612
void CPL_DLL CPL_STDCALL GDALDestroyRelationship(GDALRelationshipH);
2613
const char CPL_DLL *GDALRelationshipGetName(GDALRelationshipH);
2614
GDALRelationshipCardinality
2615
    CPL_DLL GDALRelationshipGetCardinality(GDALRelationshipH);
2616
const char CPL_DLL *GDALRelationshipGetLeftTableName(GDALRelationshipH);
2617
const char CPL_DLL *GDALRelationshipGetRightTableName(GDALRelationshipH);
2618
const char CPL_DLL *GDALRelationshipGetMappingTableName(GDALRelationshipH);
2619
void CPL_DLL GDALRelationshipSetMappingTableName(GDALRelationshipH,
2620
                                                 const char *);
2621
char CPL_DLL **GDALRelationshipGetLeftTableFields(GDALRelationshipH);
2622
char CPL_DLL **GDALRelationshipGetRightTableFields(GDALRelationshipH);
2623
void CPL_DLL GDALRelationshipSetLeftTableFields(GDALRelationshipH,
2624
                                                CSLConstList);
2625
void CPL_DLL GDALRelationshipSetRightTableFields(GDALRelationshipH,
2626
                                                 CSLConstList);
2627
char CPL_DLL **GDALRelationshipGetLeftMappingTableFields(GDALRelationshipH);
2628
char CPL_DLL **GDALRelationshipGetRightMappingTableFields(GDALRelationshipH);
2629
void CPL_DLL GDALRelationshipSetLeftMappingTableFields(GDALRelationshipH,
2630
                                                       CSLConstList);
2631
void CPL_DLL GDALRelationshipSetRightMappingTableFields(GDALRelationshipH,
2632
                                                        CSLConstList);
2633
GDALRelationshipType CPL_DLL GDALRelationshipGetType(GDALRelationshipH);
2634
void CPL_DLL GDALRelationshipSetType(GDALRelationshipH, GDALRelationshipType);
2635
const char CPL_DLL *GDALRelationshipGetForwardPathLabel(GDALRelationshipH);
2636
void CPL_DLL GDALRelationshipSetForwardPathLabel(GDALRelationshipH,
2637
                                                 const char *);
2638
const char CPL_DLL *GDALRelationshipGetBackwardPathLabel(GDALRelationshipH);
2639
void CPL_DLL GDALRelationshipSetBackwardPathLabel(GDALRelationshipH,
2640
                                                  const char *);
2641
const char CPL_DLL *GDALRelationshipGetRelatedTableType(GDALRelationshipH);
2642
void CPL_DLL GDALRelationshipSetRelatedTableType(GDALRelationshipH,
2643
                                                 const char *);
2644
2645
/* ==================================================================== */
2646
/*      GDAL Cache Management                                           */
2647
/* ==================================================================== */
2648
2649
void CPL_DLL CPL_STDCALL GDALSetCacheMax(int nBytes);
2650
int CPL_DLL CPL_STDCALL GDALGetCacheMax(void);
2651
int CPL_DLL CPL_STDCALL GDALGetCacheUsed(void);
2652
void CPL_DLL CPL_STDCALL GDALSetCacheMax64(GIntBig nBytes);
2653
GIntBig CPL_DLL CPL_STDCALL GDALGetCacheMax64(void);
2654
GIntBig CPL_DLL CPL_STDCALL GDALGetCacheUsed64(void);
2655
2656
int CPL_DLL CPL_STDCALL GDALFlushCacheBlock(void);
2657
2658
/* ==================================================================== */
2659
/*      GDAL virtual memory                                             */
2660
/* ==================================================================== */
2661
2662
CPLVirtualMem CPL_DLL *GDALDatasetGetVirtualMem(
2663
    GDALDatasetH hDS, GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
2664
    int nYSize, int nBufXSize, int nBufYSize, GDALDataType eBufType,
2665
    int nBandCount, int *panBandMap, int nPixelSpace, GIntBig nLineSpace,
2666
    GIntBig nBandSpace, size_t nCacheSize, size_t nPageSizeHint,
2667
    int bSingleThreadUsage, CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2668
2669
CPLVirtualMem CPL_DLL *GDALRasterBandGetVirtualMem(
2670
    GDALRasterBandH hBand, GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
2671
    int nYSize, int nBufXSize, int nBufYSize, GDALDataType eBufType,
2672
    int nPixelSpace, GIntBig nLineSpace, size_t nCacheSize,
2673
    size_t nPageSizeHint, int bSingleThreadUsage,
2674
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2675
2676
CPLVirtualMem CPL_DLL *
2677
GDALGetVirtualMemAuto(GDALRasterBandH hBand, GDALRWFlag eRWFlag,
2678
                      int *pnPixelSpace, GIntBig *pnLineSpace,
2679
                      CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2680
2681
/**! Enumeration to describe the tile organization */
2682
typedef enum
2683
{
2684
    /*! Tile Interleaved by Pixel: tile (0,0) with internal band interleaved by
2685
       pixel organization, tile (1, 0), ...  */
2686
    GTO_TIP,
2687
    /*! Band Interleaved by Tile : tile (0,0) of first band, tile (0,0) of
2688
       second band, ... tile (1,0) of first band, tile (1,0) of second band, ...
2689
     */
2690
    GTO_BIT,
2691
    /*! Band SeQuential : all the tiles of first band, all the tiles of
2692
       following band... */
2693
    GTO_BSQ
2694
} GDALTileOrganization;
2695
2696
CPLVirtualMem CPL_DLL *GDALDatasetGetTiledVirtualMem(
2697
    GDALDatasetH hDS, GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
2698
    int nYSize, int nTileXSize, int nTileYSize, GDALDataType eBufType,
2699
    int nBandCount, int *panBandMap, GDALTileOrganization eTileOrganization,
2700
    size_t nCacheSize, int bSingleThreadUsage,
2701
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2702
2703
CPLVirtualMem CPL_DLL *GDALRasterBandGetTiledVirtualMem(
2704
    GDALRasterBandH hBand, GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
2705
    int nYSize, int nTileXSize, int nTileYSize, GDALDataType eBufType,
2706
    size_t nCacheSize, int bSingleThreadUsage,
2707
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2708
2709
/* ==================================================================== */
2710
/*      VRTPansharpenedDataset class.                                   */
2711
/* ==================================================================== */
2712
2713
GDALDatasetH CPL_DLL GDALCreatePansharpenedVRT(
2714
    const char *pszXML, GDALRasterBandH hPanchroBand, int nInputSpectralBands,
2715
    GDALRasterBandH *pahInputSpectralBands) CPL_WARN_UNUSED_RESULT;
2716
2717
/* =================================================================== */
2718
/*      Misc API                                                        */
2719
/* ==================================================================== */
2720
2721
CPLXMLNode CPL_DLL *
2722
GDALGetJPEG2000Structure(const char *pszFilename,
2723
                         CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2724
2725
/* ==================================================================== */
2726
/*      Multidimensional API_api                                       */
2727
/* ==================================================================== */
2728
2729
GDALDatasetH CPL_DLL
2730
GDALCreateMultiDimensional(GDALDriverH hDriver, const char *pszName,
2731
                           CSLConstList papszRootGroupOptions,
2732
                           CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2733
2734
GDALExtendedDataTypeH CPL_DLL GDALExtendedDataTypeCreate(GDALDataType eType)
2735
    CPL_WARN_UNUSED_RESULT;
2736
GDALExtendedDataTypeH CPL_DLL GDALExtendedDataTypeCreateString(
2737
    size_t nMaxStringLength) CPL_WARN_UNUSED_RESULT;
2738
GDALExtendedDataTypeH CPL_DLL GDALExtendedDataTypeCreateStringEx(
2739
    size_t nMaxStringLength,
2740
    GDALExtendedDataTypeSubType eSubType) CPL_WARN_UNUSED_RESULT;
2741
GDALExtendedDataTypeH CPL_DLL GDALExtendedDataTypeCreateCompound(
2742
    const char *pszName, size_t nTotalSize, size_t nComponents,
2743
    const GDALEDTComponentH *comps) CPL_WARN_UNUSED_RESULT;
2744
void CPL_DLL GDALExtendedDataTypeRelease(GDALExtendedDataTypeH hEDT);
2745
const char CPL_DLL *GDALExtendedDataTypeGetName(GDALExtendedDataTypeH hEDT);
2746
GDALExtendedDataTypeClass CPL_DLL
2747
GDALExtendedDataTypeGetClass(GDALExtendedDataTypeH hEDT);
2748
GDALDataType CPL_DLL
2749
GDALExtendedDataTypeGetNumericDataType(GDALExtendedDataTypeH hEDT);
2750
size_t CPL_DLL GDALExtendedDataTypeGetSize(GDALExtendedDataTypeH hEDT);
2751
size_t CPL_DLL
2752
GDALExtendedDataTypeGetMaxStringLength(GDALExtendedDataTypeH hEDT);
2753
GDALEDTComponentH CPL_DLL *
2754
GDALExtendedDataTypeGetComponents(GDALExtendedDataTypeH hEDT,
2755
                                  size_t *pnCount) CPL_WARN_UNUSED_RESULT;
2756
void CPL_DLL GDALExtendedDataTypeFreeComponents(GDALEDTComponentH *components,
2757
                                                size_t nCount);
2758
int CPL_DLL GDALExtendedDataTypeCanConvertTo(GDALExtendedDataTypeH hSourceEDT,
2759
                                             GDALExtendedDataTypeH hTargetEDT);
2760
int CPL_DLL GDALExtendedDataTypeEquals(GDALExtendedDataTypeH hFirstEDT,
2761
                                       GDALExtendedDataTypeH hSecondEDT);
2762
GDALExtendedDataTypeSubType CPL_DLL
2763
GDALExtendedDataTypeGetSubType(GDALExtendedDataTypeH hEDT);
2764
GDALRasterAttributeTableH CPL_DLL
2765
GDALExtendedDataTypeGetRAT(GDALExtendedDataTypeH hEDT) CPL_WARN_UNUSED_RESULT;
2766
2767
GDALEDTComponentH CPL_DLL
2768
GDALEDTComponentCreate(const char *pszName, size_t nOffset,
2769
                       GDALExtendedDataTypeH hType) CPL_WARN_UNUSED_RESULT;
2770
void CPL_DLL GDALEDTComponentRelease(GDALEDTComponentH hComp);
2771
const char CPL_DLL *GDALEDTComponentGetName(GDALEDTComponentH hComp);
2772
size_t CPL_DLL GDALEDTComponentGetOffset(GDALEDTComponentH hComp);
2773
GDALExtendedDataTypeH CPL_DLL GDALEDTComponentGetType(GDALEDTComponentH hComp)
2774
    CPL_WARN_UNUSED_RESULT;
2775
2776
GDALGroupH CPL_DLL GDALDatasetGetRootGroup(GDALDatasetH hDS)
2777
    CPL_WARN_UNUSED_RESULT;
2778
void CPL_DLL GDALGroupRelease(GDALGroupH hGroup);
2779
const char CPL_DLL *GDALGroupGetName(GDALGroupH hGroup);
2780
const char CPL_DLL *GDALGroupGetFullName(GDALGroupH hGroup);
2781
char CPL_DLL **
2782
GDALGroupGetMDArrayNames(GDALGroupH hGroup,
2783
                         CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2784
char CPL_DLL **GDALGroupGetMDArrayFullNamesRecursive(
2785
    GDALGroupH hGroup, CSLConstList papszGroupOptions,
2786
    CSLConstList papszArrayOptions) CPL_WARN_UNUSED_RESULT;
2787
GDALMDArrayH CPL_DLL
2788
GDALGroupOpenMDArray(GDALGroupH hGroup, const char *pszMDArrayName,
2789
                     CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2790
GDALMDArrayH CPL_DLL GDALGroupOpenMDArrayFromFullname(
2791
    GDALGroupH hGroup, const char *pszMDArrayName,
2792
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2793
GDALMDArrayH CPL_DLL GDALGroupResolveMDArray(
2794
    GDALGroupH hGroup, const char *pszName, const char *pszStartingPoint,
2795
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2796
char CPL_DLL **
2797
GDALGroupGetGroupNames(GDALGroupH hGroup,
2798
                       CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2799
GDALGroupH CPL_DLL
2800
GDALGroupOpenGroup(GDALGroupH hGroup, const char *pszSubGroupName,
2801
                   CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2802
GDALGroupH CPL_DLL GDALGroupOpenGroupFromFullname(
2803
    GDALGroupH hGroup, const char *pszMDArrayName,
2804
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2805
char CPL_DLL **
2806
GDALGroupGetVectorLayerNames(GDALGroupH hGroup,
2807
                             CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2808
OGRLayerH CPL_DLL
2809
GDALGroupOpenVectorLayer(GDALGroupH hGroup, const char *pszVectorLayerName,
2810
                         CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2811
GDALDimensionH CPL_DLL *
2812
GDALGroupGetDimensions(GDALGroupH hGroup, size_t *pnCount,
2813
                       CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2814
GDALAttributeH CPL_DLL GDALGroupGetAttribute(
2815
    GDALGroupH hGroup, const char *pszName) CPL_WARN_UNUSED_RESULT;
2816
GDALAttributeH CPL_DLL *
2817
GDALGroupGetAttributes(GDALGroupH hGroup, size_t *pnCount,
2818
                       CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2819
CSLConstList CPL_DLL GDALGroupGetStructuralInfo(GDALGroupH hGroup);
2820
GDALGroupH CPL_DLL
2821
GDALGroupCreateGroup(GDALGroupH hGroup, const char *pszSubGroupName,
2822
                     CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2823
bool CPL_DLL GDALGroupDeleteGroup(GDALGroupH hGroup, const char *pszName,
2824
                                  CSLConstList papszOptions);
2825
GDALDimensionH CPL_DLL GDALGroupCreateDimension(
2826
    GDALGroupH hGroup, const char *pszName, const char *pszType,
2827
    const char *pszDirection, GUInt64 nSize,
2828
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2829
GDALMDArrayH CPL_DLL GDALGroupCreateMDArray(
2830
    GDALGroupH hGroup, const char *pszName, size_t nDimensions,
2831
    GDALDimensionH *pahDimensions, GDALExtendedDataTypeH hEDT,
2832
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2833
bool CPL_DLL GDALGroupDeleteMDArray(GDALGroupH hGroup, const char *pszName,
2834
                                    CSLConstList papszOptions);
2835
GDALAttributeH CPL_DLL GDALGroupCreateAttribute(
2836
    GDALGroupH hGroup, const char *pszName, size_t nDimensions,
2837
    const GUInt64 *panDimensions, GDALExtendedDataTypeH hEDT,
2838
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2839
bool CPL_DLL GDALGroupDeleteAttribute(GDALGroupH hGroup, const char *pszName,
2840
                                      CSLConstList papszOptions);
2841
bool CPL_DLL GDALGroupRename(GDALGroupH hGroup, const char *pszNewName);
2842
GDALGroupH CPL_DLL GDALGroupSubsetDimensionFromSelection(
2843
    GDALGroupH hGroup, const char *pszSelection, CSLConstList papszOptions);
2844
size_t CPL_DLL GDALGroupGetDataTypeCount(GDALGroupH hGroup);
2845
GDALExtendedDataTypeH CPL_DLL GDALGroupGetDataType(GDALGroupH hGroup,
2846
                                                   size_t nIdx);
2847
2848
void CPL_DLL GDALMDArrayRelease(GDALMDArrayH hMDArray);
2849
const char CPL_DLL *GDALMDArrayGetName(GDALMDArrayH hArray);
2850
const char CPL_DLL *GDALMDArrayGetFullName(GDALMDArrayH hArray);
2851
GUInt64 CPL_DLL GDALMDArrayGetTotalElementsCount(GDALMDArrayH hArray);
2852
size_t CPL_DLL GDALMDArrayGetDimensionCount(GDALMDArrayH hArray);
2853
GDALDimensionH CPL_DLL *
2854
GDALMDArrayGetDimensions(GDALMDArrayH hArray,
2855
                         size_t *pnCount) CPL_WARN_UNUSED_RESULT;
2856
GDALExtendedDataTypeH CPL_DLL GDALMDArrayGetDataType(GDALMDArrayH hArray)
2857
    CPL_WARN_UNUSED_RESULT;
2858
int CPL_DLL GDALMDArrayRead(GDALMDArrayH hArray, const GUInt64 *arrayStartIdx,
2859
                            const size_t *count, const GInt64 *arrayStep,
2860
                            const GPtrDiff_t *bufferStride,
2861
                            GDALExtendedDataTypeH bufferDatatype,
2862
                            void *pDstBuffer, const void *pDstBufferAllocStart,
2863
                            size_t nDstBufferllocSize);
2864
int CPL_DLL GDALMDArrayWrite(GDALMDArrayH hArray, const GUInt64 *arrayStartIdx,
2865
                             const size_t *count, const GInt64 *arrayStep,
2866
                             const GPtrDiff_t *bufferStride,
2867
                             GDALExtendedDataTypeH bufferDatatype,
2868
                             const void *pSrcBuffer,
2869
                             const void *psrcBufferAllocStart,
2870
                             size_t nSrcBufferllocSize);
2871
int CPL_DLL GDALMDArrayAdviseRead(GDALMDArrayH hArray,
2872
                                  const GUInt64 *arrayStartIdx,
2873
                                  const size_t *count);
2874
int CPL_DLL GDALMDArrayAdviseReadEx(GDALMDArrayH hArray,
2875
                                    const GUInt64 *arrayStartIdx,
2876
                                    const size_t *count,
2877
                                    CSLConstList papszOptions);
2878
GDALAttributeH CPL_DLL GDALMDArrayGetAttribute(
2879
    GDALMDArrayH hArray, const char *pszName) CPL_WARN_UNUSED_RESULT;
2880
GDALAttributeH CPL_DLL *
2881
GDALMDArrayGetAttributes(GDALMDArrayH hArray, size_t *pnCount,
2882
                         CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2883
GDALAttributeH CPL_DLL GDALMDArrayCreateAttribute(
2884
    GDALMDArrayH hArray, const char *pszName, size_t nDimensions,
2885
    const GUInt64 *panDimensions, GDALExtendedDataTypeH hEDT,
2886
    CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2887
bool CPL_DLL GDALMDArrayDeleteAttribute(GDALMDArrayH hArray,
2888
                                        const char *pszName,
2889
                                        CSLConstList papszOptions);
2890
bool CPL_DLL GDALMDArrayResize(GDALMDArrayH hArray,
2891
                               const GUInt64 *panNewDimSizes,
2892
                               CSLConstList papszOptions);
2893
const void CPL_DLL *GDALMDArrayGetRawNoDataValue(GDALMDArrayH hArray);
2894
double CPL_DLL GDALMDArrayGetNoDataValueAsDouble(GDALMDArrayH hArray,
2895
                                                 int *pbHasNoDataValue);
2896
int64_t CPL_DLL GDALMDArrayGetNoDataValueAsInt64(GDALMDArrayH hArray,
2897
                                                 int *pbHasNoDataValue);
2898
uint64_t CPL_DLL GDALMDArrayGetNoDataValueAsUInt64(GDALMDArrayH hArray,
2899
                                                   int *pbHasNoDataValue);
2900
int CPL_DLL GDALMDArraySetRawNoDataValue(GDALMDArrayH hArray, const void *);
2901
int CPL_DLL GDALMDArraySetNoDataValueAsDouble(GDALMDArrayH hArray,
2902
                                              double dfNoDataValue);
2903
int CPL_DLL GDALMDArraySetNoDataValueAsInt64(GDALMDArrayH hArray,
2904
                                             int64_t nNoDataValue);
2905
int CPL_DLL GDALMDArraySetNoDataValueAsUInt64(GDALMDArrayH hArray,
2906
                                              uint64_t nNoDataValue);
2907
int CPL_DLL GDALMDArraySetScale(GDALMDArrayH hArray, double dfScale);
2908
int CPL_DLL GDALMDArraySetScaleEx(GDALMDArrayH hArray, double dfScale,
2909
                                  GDALDataType eStorageType);
2910
double CPL_DLL GDALMDArrayGetScale(GDALMDArrayH hArray, int *pbHasValue);
2911
double CPL_DLL GDALMDArrayGetScaleEx(GDALMDArrayH hArray, int *pbHasValue,
2912
                                     GDALDataType *peStorageType);
2913
int CPL_DLL GDALMDArraySetOffset(GDALMDArrayH hArray, double dfOffset);
2914
int CPL_DLL GDALMDArraySetOffsetEx(GDALMDArrayH hArray, double dfOffset,
2915
                                   GDALDataType eStorageType);
2916
double CPL_DLL GDALMDArrayGetOffset(GDALMDArrayH hArray, int *pbHasValue);
2917
double CPL_DLL GDALMDArrayGetOffsetEx(GDALMDArrayH hArray, int *pbHasValue,
2918
                                      GDALDataType *peStorageType);
2919
GUInt64 CPL_DLL *GDALMDArrayGetBlockSize(GDALMDArrayH hArray, size_t *pnCount);
2920
int CPL_DLL GDALMDArraySetUnit(GDALMDArrayH hArray, const char *);
2921
const char CPL_DLL *GDALMDArrayGetUnit(GDALMDArrayH hArray);
2922
int CPL_DLL GDALMDArraySetSpatialRef(GDALMDArrayH, OGRSpatialReferenceH);
2923
OGRSpatialReferenceH CPL_DLL GDALMDArrayGetSpatialRef(GDALMDArrayH hArray);
2924
size_t CPL_DLL *GDALMDArrayGetProcessingChunkSize(GDALMDArrayH hArray,
2925
                                                  size_t *pnCount,
2926
                                                  size_t nMaxChunkMemory);
2927
CSLConstList CPL_DLL GDALMDArrayGetStructuralInfo(GDALMDArrayH hArray);
2928
GDALMDArrayH CPL_DLL GDALMDArrayGetView(GDALMDArrayH hArray,
2929
                                        const char *pszViewExpr);
2930
GDALMDArrayH CPL_DLL GDALMDArrayTranspose(GDALMDArrayH hArray,
2931
                                          size_t nNewAxisCount,
2932
                                          const int *panMapNewAxisToOldAxis);
2933
GDALMDArrayH CPL_DLL GDALMDArrayGetUnscaled(GDALMDArrayH hArray);
2934
GDALMDArrayH CPL_DLL GDALMDArrayGetMask(GDALMDArrayH hArray,
2935
                                        CSLConstList papszOptions);
2936
GDALDatasetH CPL_DLL GDALMDArrayAsClassicDataset(GDALMDArrayH hArray,
2937
                                                 size_t iXDim, size_t iYDim);
2938
GDALDatasetH CPL_DLL GDALMDArrayAsClassicDatasetEx(GDALMDArrayH hArray,
2939
                                                   size_t iXDim, size_t iYDim,
2940
                                                   GDALGroupH hRootGroup,
2941
                                                   CSLConstList papszOptions);
2942
CPLErr CPL_DLL GDALMDArrayGetStatistics(
2943
    GDALMDArrayH hArray, GDALDatasetH, int bApproxOK, int bForce,
2944
    double *pdfMin, double *pdfMax, double *pdfMean, double *pdfStdDev,
2945
    GUInt64 *pnValidCount, GDALProgressFunc pfnProgress, void *pProgressData);
2946
int CPL_DLL GDALMDArrayComputeStatistics(GDALMDArrayH hArray, GDALDatasetH,
2947
                                         int bApproxOK, double *pdfMin,
2948
                                         double *pdfMax, double *pdfMean,
2949
                                         double *pdfStdDev,
2950
                                         GUInt64 *pnValidCount,
2951
                                         GDALProgressFunc, void *pProgressData);
2952
int CPL_DLL GDALMDArrayComputeStatisticsEx(
2953
    GDALMDArrayH hArray, GDALDatasetH, int bApproxOK, double *pdfMin,
2954
    double *pdfMax, double *pdfMean, double *pdfStdDev, GUInt64 *pnValidCount,
2955
    GDALProgressFunc, void *pProgressData, CSLConstList papszOptions);
2956
GDALMDArrayH CPL_DLL GDALMDArrayGetResampled(GDALMDArrayH hArray,
2957
                                             size_t nNewDimCount,
2958
                                             const GDALDimensionH *pahNewDims,
2959
                                             GDALRIOResampleAlg resampleAlg,
2960
                                             OGRSpatialReferenceH hTargetSRS,
2961
                                             CSLConstList papszOptions);
2962
GDALMDArrayH CPL_DLL GDALMDArrayGetGridded(
2963
    GDALMDArrayH hArray, const char *pszGridOptions, GDALMDArrayH hXArray,
2964
    GDALMDArrayH hYArray, CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2965
2966
GDALMDArrayH CPL_DLL *
2967
GDALMDArrayGetCoordinateVariables(GDALMDArrayH hArray,
2968
                                  size_t *pnCount) CPL_WARN_UNUSED_RESULT;
2969
2970
GDALMDArrayH CPL_DLL *
2971
GDALMDArrayGetMeshGrid(const GDALMDArrayH *pahInputArrays,
2972
                       size_t nCountInputArrays, size_t *pnCountOutputArrays,
2973
                       CSLConstList papszOptions) CPL_WARN_UNUSED_RESULT;
2974
2975
bool CPL_DLL GDALMDArrayGuessGeoTransform(GDALMDArrayH hArray, size_t nDimX,
2976
                                          size_t nDimY, bool bPixelIsPoint,
2977
                                          double padfGeoTransform[6]);
2978
2979
bool CPL_DLL GDALMDArrayIsRegularlySpaced(GDALMDArrayH hArray, double *pdfStart,
2980
                                          double *pdfIncrement);
2981
2982
GDALMDArrayH CPL_DLL GDALMDArrayBinaryOperation(
2983
    GDALMDArrayH hArrayLeft, GDALRasterAlgebraBinaryOperation eOp,
2984
    GDALMDArrayH hArrayRight) CPL_WARN_UNUSED_RESULT;
2985
2986
#ifdef __cplusplus
2987
extern "C++"
2988
{
2989
#endif
2990
2991
    /** Information on a raw block of a GDALMDArray
2992
     *
2993
     * @since 3.12
2994
     */
2995
    struct
2996
#ifdef __cplusplus
2997
        CPL_DLL
2998
#endif
2999
        GDALMDArrayRawBlockInfo
3000
    {
3001
        /** Filename into which the raw block is found */
3002
        char *pszFilename;
3003
        /** File offset within pszFilename of the start of the raw block */
3004
        uint64_t nOffset;
3005
        /** Size in bytes of the raw block */
3006
        uint64_t nSize;
3007
        /** NULL or Null-terminated list of driver specific information on the
3008
         * raw block */
3009
        char **papszInfo;
3010
        /** In-memory buffer of nSize bytes. When this is set, pszFilename and
3011
         * nOffset are set to NULL.
3012
         *
3013
         * When using C++ copy constructor or copy-assignment operator, if
3014
         * a memory allocation fails, a CPLError() will be emitted and this
3015
         * field will be NULL, but nSize not zero.
3016
         */
3017
        GByte *pabyInlineData;
3018
3019
#ifdef __cplusplus
3020
        /*! @cond Doxygen_Suppress */
3021
        inline GDALMDArrayRawBlockInfo()
3022
0
            : pszFilename(nullptr), nOffset(0), nSize(0), papszInfo(nullptr),
3023
0
              pabyInlineData(nullptr)
3024
0
        {
3025
0
        }
3026
3027
        ~GDALMDArrayRawBlockInfo();
3028
3029
        void clear();
3030
3031
        GDALMDArrayRawBlockInfo(const GDALMDArrayRawBlockInfo &);
3032
        GDALMDArrayRawBlockInfo &operator=(const GDALMDArrayRawBlockInfo &);
3033
        GDALMDArrayRawBlockInfo(GDALMDArrayRawBlockInfo &&);
3034
        GDALMDArrayRawBlockInfo &operator=(GDALMDArrayRawBlockInfo &&);
3035
        /*! @endcond */
3036
#endif
3037
    };
3038
3039
#ifdef __cplusplus
3040
}
3041
#endif
3042
3043
/*! @cond Doxygen_Suppress */
3044
typedef struct GDALMDArrayRawBlockInfo GDALMDArrayRawBlockInfo;
3045
/*! @endcond */
3046
3047
GDALMDArrayRawBlockInfo CPL_DLL *GDALMDArrayRawBlockInfoCreate(void);
3048
void CPL_DLL
3049
GDALMDArrayRawBlockInfoRelease(GDALMDArrayRawBlockInfo *psBlockInfo);
3050
bool CPL_DLL GDALMDArrayGetRawBlockInfo(GDALMDArrayH hArray,
3051
                                        const uint64_t *panBlockCoordinates,
3052
                                        GDALMDArrayRawBlockInfo *psBlockInfo);
3053
3054
int CPL_DLL GDALMDArrayGetOverviewCount(GDALMDArrayH hArray);
3055
GDALMDArrayH CPL_DLL GDALMDArrayGetOverview(GDALMDArrayH hArray, int nIdx);
3056
CPLErr CPL_DLL GDALMDArrayBuildOverviews(
3057
    GDALMDArrayH hArray, const char *pszResampling, int nOverviews,
3058
    const int *panOverviewList, GDALProgressFunc pfnProgress,
3059
    void *pProgressData, CSLConstList papszOptions);
3060
3061
void CPL_DLL GDALReleaseArrays(GDALMDArrayH *arrays, size_t nCount);
3062
int CPL_DLL GDALMDArrayCache(GDALMDArrayH hArray, CSLConstList papszOptions);
3063
bool CPL_DLL GDALMDArrayRename(GDALMDArrayH hArray, const char *pszNewName);
3064
3065
GDALRasterAttributeTableH CPL_DLL GDALCreateRasterAttributeTableFromMDArrays(
3066
    GDALRATTableType eTableType, int nArrays, const GDALMDArrayH *ahArrays,
3067
    const GDALRATFieldUsage *paeUsages);
3068
3069
void CPL_DLL GDALAttributeRelease(GDALAttributeH hAttr);
3070
void CPL_DLL GDALReleaseAttributes(GDALAttributeH *attributes, size_t nCount);
3071
const char CPL_DLL *GDALAttributeGetName(GDALAttributeH hAttr);
3072
const char CPL_DLL *GDALAttributeGetFullName(GDALAttributeH hAttr);
3073
GUInt64 CPL_DLL GDALAttributeGetTotalElementsCount(GDALAttributeH hAttr);
3074
size_t CPL_DLL GDALAttributeGetDimensionCount(GDALAttributeH hAttr);
3075
GUInt64 CPL_DLL *
3076
GDALAttributeGetDimensionsSize(GDALAttributeH hAttr,
3077
                               size_t *pnCount) CPL_WARN_UNUSED_RESULT;
3078
GDALExtendedDataTypeH CPL_DLL GDALAttributeGetDataType(GDALAttributeH hAttr)
3079
    CPL_WARN_UNUSED_RESULT;
3080
GByte CPL_DLL *GDALAttributeReadAsRaw(GDALAttributeH hAttr,
3081
                                      size_t *pnSize) CPL_WARN_UNUSED_RESULT;
3082
void CPL_DLL GDALAttributeFreeRawResult(GDALAttributeH hAttr, GByte *raw,
3083
                                        size_t nSize);
3084
const char CPL_DLL *GDALAttributeReadAsString(GDALAttributeH hAttr);
3085
int CPL_DLL GDALAttributeReadAsInt(GDALAttributeH hAttr);
3086
int64_t CPL_DLL GDALAttributeReadAsInt64(GDALAttributeH hAttr);
3087
double CPL_DLL GDALAttributeReadAsDouble(GDALAttributeH hAttr);
3088
char CPL_DLL **
3089
GDALAttributeReadAsStringArray(GDALAttributeH hAttr) CPL_WARN_UNUSED_RESULT;
3090
int CPL_DLL *GDALAttributeReadAsIntArray(GDALAttributeH hAttr, size_t *pnCount)
3091
    CPL_WARN_UNUSED_RESULT;
3092
int64_t CPL_DLL *
3093
GDALAttributeReadAsInt64Array(GDALAttributeH hAttr,
3094
                              size_t *pnCount) CPL_WARN_UNUSED_RESULT;
3095
double CPL_DLL *
3096
GDALAttributeReadAsDoubleArray(GDALAttributeH hAttr,
3097
                               size_t *pnCount) CPL_WARN_UNUSED_RESULT;
3098
int CPL_DLL GDALAttributeWriteRaw(GDALAttributeH hAttr, const void *, size_t);
3099
int CPL_DLL GDALAttributeWriteString(GDALAttributeH hAttr, const char *);
3100
int CPL_DLL GDALAttributeWriteStringArray(GDALAttributeH hAttr, CSLConstList);
3101
int CPL_DLL GDALAttributeWriteInt(GDALAttributeH hAttr, int);
3102
int CPL_DLL GDALAttributeWriteIntArray(GDALAttributeH hAttr, const int *,
3103
                                       size_t);
3104
int CPL_DLL GDALAttributeWriteInt64(GDALAttributeH hAttr, int64_t);
3105
int CPL_DLL GDALAttributeWriteInt64Array(GDALAttributeH hAttr, const int64_t *,
3106
                                         size_t);
3107
int CPL_DLL GDALAttributeWriteDouble(GDALAttributeH hAttr, double);
3108
int CPL_DLL GDALAttributeWriteDoubleArray(GDALAttributeH hAttr, const double *,
3109
                                          size_t);
3110
bool CPL_DLL GDALAttributeRename(GDALAttributeH hAttr, const char *pszNewName);
3111
3112
void CPL_DLL GDALDimensionRelease(GDALDimensionH hDim);
3113
void CPL_DLL GDALReleaseDimensions(GDALDimensionH *dims, size_t nCount);
3114
const char CPL_DLL *GDALDimensionGetName(GDALDimensionH hDim);
3115
const char CPL_DLL *GDALDimensionGetFullName(GDALDimensionH hDim);
3116
const char CPL_DLL *GDALDimensionGetType(GDALDimensionH hDim);
3117
const char CPL_DLL *GDALDimensionGetDirection(GDALDimensionH hDim);
3118
GUInt64 CPL_DLL GDALDimensionGetSize(GDALDimensionH hDim);
3119
GDALMDArrayH CPL_DLL GDALDimensionGetIndexingVariable(GDALDimensionH hDim)
3120
    CPL_WARN_UNUSED_RESULT;
3121
int CPL_DLL GDALDimensionSetIndexingVariable(GDALDimensionH hDim,
3122
                                             GDALMDArrayH hArray);
3123
bool CPL_DLL GDALDimensionRename(GDALDimensionH hDim, const char *pszNewName);
3124
3125
CPL_C_END
3126
3127
#endif /* ndef GDAL_H_INCLUDED */