31#ifndef OGRSF_FRMTS_H_INCLUDED
32#define OGRSF_FRMTS_H_INCLUDED
34#include "cpl_progress.h"
48#if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
49#define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
51#define OGR_DEPRECATED(x)
55class OGRLayerAttrIndex;
58struct ArrowArrayStream;
76 std::unique_ptr<Private> m_poPrivate;
78 void ConvertGeomsIfNecessary(
OGRFeature *poFeature);
80 class CPL_DLL FeatureIterator
83 std::unique_ptr<Private> m_poPrivate;
86 FeatureIterator(
OGRLayer *poLayer,
bool bStart);
88 FeatureIterator &&oOther)
noexcept;
92 FeatureIterator &operator++();
93 bool operator!=(
const FeatureIterator &it)
const;
97 friend inline FeatureIterator
end(
OGRLayer *poLayer);
103 int m_bFilterIsEnvelope;
105 OGRPreparedGeometry *m_pPreparedFilterGeom;
108 int m_iGeomFieldFilter;
125 struct ArrowArrayStreamPrivateData
127 bool m_bArrowArrayStreamInProgress =
false;
130 std::shared_ptr<ArrowArrayStreamPrivateData>
131 m_poSharedArrowArrayStreamPrivateData{};
132 struct ArrowArrayStreamPrivateDataSharedDataWrapper
134 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
138 friend class OGRArrowArrayHelper;
139 static void ReleaseArray(
struct ArrowArray *array);
140 static void ReleaseSchema(
struct ArrowSchema *schema);
141 static void ReleaseStream(
struct ArrowArrayStream *stream);
142 virtual int GetArrowSchema(
struct ArrowArrayStream *,
143 struct ArrowSchema *out_schema);
144 virtual int GetNextArrowArray(
struct ArrowArrayStream *,
145 struct ArrowArray *out_array);
146 static int StaticGetArrowSchema(
struct ArrowArrayStream *,
147 struct ArrowSchema *out_schema);
148 static int StaticGetNextArrowArray(
struct ArrowArrayStream *,
149 struct ArrowArray *out_array);
150 static const char *GetLastErrorArrowArrayStream(
struct ArrowArrayStream *);
166 FeatureIterator
begin();
169 FeatureIterator
end();
173 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
174 double dfMaxX,
double dfMaxY);
176 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry *);
177 virtual void SetSpatialFilterRect(
int iGeomField,
double dfMinX,
178 double dfMinY,
double dfMaxX,
181 virtual OGRErr SetAttributeFilter(
const char *);
189 virtual
bool GetArrowStream(struct ArrowArrayStream *out_stream,
198 virtual const
char *GetName();
201 virtual
int FindFieldIndex(const
char *pszFieldName,
int bExactMatch);
205 virtual
GIntBig GetFeatureCount(
int bForce = TRUE);
211 virtual
int TestCapability(const
char *) = 0;
216 virtual
OGRErr DeleteField(
int iField);
217 virtual
OGRErr ReorderFields(
int *panMap);
221 AlterGeomFieldDefn(
int iGeomField,
226 int bApproxOK = TRUE);
228 virtual
OGRErr SyncToDisk();
231 virtual
void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
237 virtual
OGRErr RollbackTransaction();
239 virtual const
char *GetFIDColumn();
240 virtual const
char *GetGeometryColumn();
242 virtual
OGRErr SetIgnoredFields(const
char **papszFields);
245 GetGeometryTypes(
int iGeomField,
int nFlagsGGT,
int &nEntryCountOut,
246 GDALProgressFunc pfnProgress,
void *pProgressData);
249 char **papszOptions =
nullptr,
250 GDALProgressFunc pfnProgress =
nullptr,
251 void *pProgressArg =
nullptr);
253 char **papszOptions =
nullptr,
254 GDALProgressFunc pfnProgress =
nullptr,
255 void *pProgressArg =
nullptr);
257 char **papszOptions, GDALProgressFunc pfnProgress,
260 char **papszOptions =
nullptr,
261 GDALProgressFunc pfnProgress =
nullptr,
262 void *pProgressArg =
nullptr);
264 char **papszOptions =
nullptr,
265 GDALProgressFunc pfnProgress =
nullptr,
266 void *pProgressArg =
nullptr);
268 char **papszOptions =
nullptr,
269 GDALProgressFunc pfnProgress =
nullptr,
270 void *pProgressArg =
nullptr);
272 char **papszOptions =
nullptr,
273 GDALProgressFunc pfnProgress =
nullptr,
274 void *pProgressArg =
nullptr);
278 int GetRefCount() const;
284 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos);
287 int AttributeFilterEvaluationNeedsGeometry();
290 OGRErr InitializeIndexSupport(const
char *);
291 OGRLayerAttrIndex *GetIndex()
293 return m_poAttrIndex;
295 int GetGeomFieldFilter()
const
297 return m_iGeomFieldFilter;
299 const char *GetAttrQueryString()
const
301 return m_pszAttrQueryString;
310 return reinterpret_cast<OGRLayerH>(poLayer);
318 return reinterpret_cast<OGRLayer *
>(hLayer);
324 OGRFeatureQuery *m_poAttrQuery;
325 char *m_pszAttrQueryString;
326 OGRLayerAttrIndex *m_poAttrIndex;
347 return poLayer->
begin();
355 return poLayer->
end();
382 const auto poThis =
static_cast<BaseLayer *
>(
this);
385 OGRFeature *poFeature = poThis->GetNextRawFeature();
386 if (poFeature ==
nullptr)
389 if ((poThis->m_poFilterGeom ==
nullptr ||
391 (poThis->m_poAttrQuery ==
nullptr ||
392 poThis->m_poAttrQuery->Evaluate(poFeature)))
403#define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
405 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
408 OGRFeature *GetNextFeature() override \
410 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
441 virtual const char *GetName()
442 OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
445 OGR_DEPRECATED(
"Use GDALDataset class instead");
477 virtual const char *GetName()
478 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
480 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate = FALSE)
481 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
483 virtual int TestCapability(
const char *pszCap)
484 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
488 OGR_DEPRECATED(
"Use GDALDriver class instead");
489 virtual OGRErr DeleteDataSource(
const char *pszName)
490 OGR_DEPRECATED(
"Use GDALDriver class instead");
521 char **papszOptions);
527 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
531 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
534 int GetDriverCount(
void)
535 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
538 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
541 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
544 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
547 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
557void OGRRegisterAllInternal();
559void CPL_DLL RegisterOGRFileGDB();
560void CPL_DLL RegisterOGRShape();
561void CPL_DLL RegisterOGRNTF();
562void CPL_DLL RegisterOGRSDTS();
563void CPL_DLL RegisterOGRTiger();
564void CPL_DLL RegisterOGRS57();
565void CPL_DLL RegisterOGRTAB();
566void CPL_DLL RegisterOGRMIF();
567void CPL_DLL RegisterOGROGDI();
568void CPL_DLL RegisterOGRODBC();
569void CPL_DLL RegisterOGRWAsP();
570void CPL_DLL RegisterOGRPG();
571void CPL_DLL RegisterOGRMSSQLSpatial();
572void CPL_DLL RegisterOGRMySQL();
573void CPL_DLL RegisterOGROCI();
574void CPL_DLL RegisterOGRDGN();
575void CPL_DLL RegisterOGRGML();
576void CPL_DLL RegisterOGRLIBKML();
577void CPL_DLL RegisterOGRKML();
578void CPL_DLL RegisterOGRFlatGeobuf();
579void CPL_DLL RegisterOGRGeoJSON();
580void CPL_DLL RegisterOGRGeoJSONSeq();
581void CPL_DLL RegisterOGRESRIJSON();
582void CPL_DLL RegisterOGRTopoJSON();
583void CPL_DLL RegisterOGRAVCBin();
584void CPL_DLL RegisterOGRAVCE00();
585void CPL_DLL RegisterOGRMEM();
586void CPL_DLL RegisterOGRVRT();
587void CPL_DLL RegisterOGRSQLite();
588void CPL_DLL RegisterOGRCSV();
589void CPL_DLL RegisterOGRILI1();
590void CPL_DLL RegisterOGRILI2();
591void CPL_DLL RegisterOGRPGeo();
592void CPL_DLL RegisterOGRDXF();
593void CPL_DLL RegisterOGRCAD();
594void CPL_DLL RegisterOGRDWG();
595void CPL_DLL RegisterOGRDGNV8();
596void CPL_DLL RegisterOGRIDB();
597void CPL_DLL RegisterOGRGMT();
598void CPL_DLL RegisterOGRGPX();
599void CPL_DLL RegisterOGRGeoconcept();
600void CPL_DLL RegisterOGRNAS();
601void CPL_DLL RegisterOGRGeoRSS();
602void CPL_DLL RegisterOGRVFK();
603void CPL_DLL RegisterOGRPGDump();
604void CPL_DLL RegisterOGROSM();
605void CPL_DLL RegisterOGRGPSBabel();
606void CPL_DLL RegisterOGRPDS();
607void CPL_DLL RegisterOGRWFS();
608void CPL_DLL RegisterOGROAPIF();
609void CPL_DLL RegisterOGRSOSI();
610void CPL_DLL RegisterOGREDIGEO();
611void CPL_DLL RegisterOGRSVG();
612void CPL_DLL RegisterOGRIdrisi();
613void CPL_DLL RegisterOGRXLS();
614void CPL_DLL RegisterOGRODS();
615void CPL_DLL RegisterOGRXLSX();
616void CPL_DLL RegisterOGRElastic();
617void CPL_DLL RegisterOGRGeoPackage();
618void CPL_DLL RegisterOGRCarto();
619void CPL_DLL RegisterOGRAmigoCloud();
620void CPL_DLL RegisterOGRSXF();
621void CPL_DLL RegisterOGROpenFileGDB();
622void CPL_DLL RegisterOGRSelafin();
623void CPL_DLL RegisterOGRJML();
624void CPL_DLL RegisterOGRPLSCENES();
625void CPL_DLL RegisterOGRCSW();
626void CPL_DLL RegisterOGRMongoDBv3();
627void CPL_DLL RegisterOGRVDV();
628void CPL_DLL RegisterOGRGMLAS();
629void CPL_DLL RegisterOGRMVT();
630void CPL_DLL RegisterOGRNGW();
631void CPL_DLL RegisterOGRMapML();
632void CPL_DLL RegisterOGRLVBAG();
633void CPL_DLL RegisterOGRHANA();
634void CPL_DLL RegisterOGRParquet();
635void CPL_DLL RegisterOGRArrow();
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:438
A set of associated raster bands, usually from one file.
Definition gdal_priv.h:348
Format specific driver.
Definition gdal_priv.h:1641
Object with metadata.
Definition gdal_priv.h:138
Class for dataset open functions.
Definition gdal_priv.h:277
LEGACY class.
Definition ogrsf_frmts.h:437
Simple container for a bounding region (rectangle)
Definition ogr_core.h:58
Definition of a feature class or feature layer.
Definition ogr_feature.h:364
A simple feature, including geometry and attributes.
Definition ogr_feature.h:497
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition ogrfeature.cpp:712
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:104
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:265
Abstract base class for all geometry classes.
Definition ogr_geometry.h:335
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition ogrsf_frmts.h:373
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition ogrsf_frmts.h:380
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:73
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:345
virtual OGRFeature * GetNextFeature()=0
Fetch the next available feature from this layer.
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition ogrsf_frmts.h:308
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:353
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Convert a OGRLayerH to a OGRLayer*.
Definition ogrsf_frmts.h:316
LEGACY class.
Definition ogrsf_frmts.h:512
LEGACY class.
Definition ogrsf_frmts.h:472
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:167
This class represents a style table.
Definition ogr_featurestyle.h:85
CPLErr
Error category.
Definition cpl_error.h:53
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:317
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:313
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:1049
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1190
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:983
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:233
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition ogr_api.h:613
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:407
int OGRErr
Type for a OGR error.
Definition ogr_core.h:378
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1106
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition ogrsf_frmts.h:361
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:345
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:353
Result item of OGR_L_GetGeometryTypes.
Definition ogr_api.h:627