15#ifndef OGRSF_FRMTS_H_INCLUDED
16#define OGRSF_FRMTS_H_INCLUDED
18#include "cpl_progress.h"
33#if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
34#define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
36#define OGR_DEPRECATED(x)
40class OGRLayerAttrIndex;
43struct ArrowArrayStream;
61 std::unique_ptr<Private> m_poPrivate;
63 void ConvertGeomsIfNecessary(
OGRFeature *poFeature);
65 class CPL_DLL FeatureIterator
68 std::unique_ptr<Private> m_poPrivate;
71 FeatureIterator(
OGRLayer *poLayer,
bool bStart);
73 FeatureIterator &&oOther)
noexcept;
77 FeatureIterator &operator++();
78 bool operator!=(
const FeatureIterator &it)
const;
82 friend inline FeatureIterator
end(
OGRLayer *poLayer);
88 int m_bFilterIsEnvelope;
90 OGRPreparedGeometry *m_pPreparedFilterGeom;
93 int m_iGeomFieldFilter;
101 ValidateGeometryFieldIndexForSetSpatialFilter(
int iGeomField,
103 bool bIsSelectLayer =
false);
112 IUpdateFeature(
OGRFeature *poFeature,
int nUpdatedFieldsCount,
113 const int *panUpdatedFieldsIdx,
int nUpdatedGeomFieldsCount,
114 const int *panUpdatedGeomFieldsIdx,
120 friend struct OGRGenSQLResultsLayerArrowStreamPrivateData;
122 struct ArrowArrayStreamPrivateData
124 bool m_bArrowArrayStreamInProgress =
false;
127 std::vector<GIntBig> m_anQueriedFIDs{};
128 size_t m_iQueriedFIDS = 0;
129 std::deque<std::unique_ptr<OGRFeature>> m_oFeatureQueue{};
132 std::shared_ptr<ArrowArrayStreamPrivateData>
133 m_poSharedArrowArrayStreamPrivateData{};
135 struct ArrowArrayStreamPrivateDataSharedDataWrapper
137 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
141 friend class OGRArrowArrayHelper;
142 friend class OGRGenSQLResultsLayer;
143 static void ReleaseArray(
struct ArrowArray *array);
144 static void ReleaseSchema(
struct ArrowSchema *schema);
145 static void ReleaseStream(
struct ArrowArrayStream *stream);
146 virtual int GetArrowSchema(
struct ArrowArrayStream *,
147 struct ArrowSchema *out_schema);
148 virtual int GetNextArrowArray(
struct ArrowArrayStream *,
149 struct ArrowArray *out_array);
150 static int StaticGetArrowSchema(
struct ArrowArrayStream *,
151 struct ArrowSchema *out_schema);
152 static int StaticGetNextArrowArray(
struct ArrowArrayStream *,
153 struct ArrowArray *out_array);
154 static const char *GetLastErrorArrowArrayStream(
struct ArrowArrayStream *);
156 static struct ArrowSchema *
158 const char *pszArrowFormat,
159 const char *pszExtensionName);
162 CanPostFilterArrowArray(
const struct ArrowSchema *schema)
const;
163 void PostFilterArrowArray(
const struct ArrowSchema *schema,
164 struct ArrowArray *array,
168 bool CreateFieldFromArrowSchemaInternal(
const struct ArrowSchema *schema,
169 const std::string &osFieldPrefix,
187 FeatureIterator
begin();
190 FeatureIterator
end();
194 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
195 double dfMaxX,
double dfMaxY);
197 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry *);
198 virtual void SetSpatialFilterRect(
int iGeomField,
double dfMinX,
199 double dfMinY,
double dfMaxX,
202 virtual OGRErr SetAttributeFilter(
const char *);
210 virtual
bool GetArrowStream(struct ArrowArrayStream *out_stream,
212 virtual
bool IsArrowSchemaSupported(const struct ArrowSchema *schema,
214 std::
string &osErrorMsg) const;
216 CreateFieldFromArrowSchema(const struct ArrowSchema *schema,
218 virtual
bool WriteArrowBatch(const struct ArrowSchema *schema,
219 struct ArrowArray *array,
226 const
int *panUpdatedFieldsIdx,
227 int nUpdatedGeomFieldsCount,
228 const
int *panUpdatedGeomFieldsIdx,
233 virtual const
char *GetName();
236 virtual
int FindFieldIndex(const
char *pszFieldName,
int bExactMatch);
245 GetSupportedSRSList(
int iGeomField);
246 virtual
OGRErr SetActiveSRS(
int iGeomField,
249 virtual
GIntBig GetFeatureCount(
int bForce = TRUE);
258 virtual
int TestCapability(const
char *) = 0;
263 int bApproxOK = TRUE);
264 virtual
OGRErr DeleteField(
int iField);
265 virtual
OGRErr ReorderFields(
int *panMap);
269 AlterGeomFieldDefn(
int iGeomField,
274 int bApproxOK = TRUE);
276 virtual
OGRErr SyncToDisk();
279 virtual
void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
285 virtual
OGRErr RollbackTransaction();
287 virtual const
char *GetFIDColumn();
288 virtual const
char *GetGeometryColumn();
293 GetGeometryTypes(
int iGeomField,
int nFlagsGGT,
int &nEntryCountOut,
294 GDALProgressFunc pfnProgress,
void *pProgressData);
297 char **papszOptions =
nullptr,
298 GDALProgressFunc pfnProgress =
nullptr,
299 void *pProgressArg =
nullptr);
301 char **papszOptions =
nullptr,
302 GDALProgressFunc pfnProgress =
nullptr,
303 void *pProgressArg =
nullptr);
305 char **papszOptions, GDALProgressFunc pfnProgress,
308 char **papszOptions =
nullptr,
309 GDALProgressFunc pfnProgress =
nullptr,
310 void *pProgressArg =
nullptr);
312 char **papszOptions =
nullptr,
313 GDALProgressFunc pfnProgress =
nullptr,
314 void *pProgressArg =
nullptr);
316 char **papszOptions =
nullptr,
317 GDALProgressFunc pfnProgress =
nullptr,
318 void *pProgressArg =
nullptr);
320 char **papszOptions =
nullptr,
321 GDALProgressFunc pfnProgress =
nullptr,
322 void *pProgressArg =
nullptr);
326 int GetRefCount() const;
332 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos);
335 int AttributeFilterEvaluationNeedsGeometry();
338 OGRErr InitializeIndexSupport(const
char *);
340 OGRLayerAttrIndex *GetIndex()
342 return m_poAttrIndex;
345 int GetGeomFieldFilter()
const
347 return m_iGeomFieldFilter;
350 const char *GetAttrQueryString()
const
352 return m_pszAttrQueryString;
362 return reinterpret_cast<OGRLayerH>(poLayer);
370 return reinterpret_cast<OGRLayer *
>(hLayer);
374 bool FilterWKBGeometry(
const GByte *pabyWKB,
size_t nWKBSize,
375 bool bEnvelopeAlreadySet,
378 static bool FilterWKBGeometry(
const GByte *pabyWKB,
size_t nWKBSize,
379 bool bEnvelopeAlreadySet,
382 bool bFilterIsEnvelope,
384 OGRPreparedGeometry *&poPreparedFilterGeom);
390 static constexpr const char *DEFAULT_ARROW_FID_NAME =
"OGC_FID";
395 static constexpr const char *DEFAULT_ARROW_GEOMETRY_NAME =
"wkb_geometry";
400 OGRFeatureQuery *m_poAttrQuery;
401 char *m_pszAttrQueryString;
402 OGRLayerAttrIndex *m_poAttrIndex;
423 return poLayer->
begin();
431 return poLayer->
end();
458 const auto poThis =
static_cast<BaseLayer *
>(
this);
461 OGRFeature *poFeature = poThis->GetNextRawFeature();
462 if (poFeature ==
nullptr)
465 if ((poThis->m_poFilterGeom ==
nullptr ||
467 (poThis->m_poAttrQuery ==
nullptr ||
468 poThis->m_poAttrQuery->Evaluate(poFeature)))
479#define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
481 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
484 OGRFeature *GetNextFeature() override \
486 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
517 virtual const char *GetName()
518 OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
521 OGR_DEPRECATED(
"Use GDALDataset class instead");
553 virtual const char *GetName()
554 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
556 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate = FALSE)
557 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
559 virtual int TestCapability(
const char *pszCap)
560 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
564 OGR_DEPRECATED(
"Use GDALDriver class instead");
565 virtual OGRErr DeleteDataSource(
const char *pszName)
566 OGR_DEPRECATED(
"Use GDALDriver class instead");
597 char **papszOptions);
603 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
607 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
610 int GetDriverCount(
void)
611 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
614 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
617 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
620 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
623 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
633void OGRRegisterAllInternal();
635void CPL_DLL RegisterOGRFileGDB();
636void DeclareDeferredOGRFileGDBPlugin();
637void CPL_DLL RegisterOGRShape();
638void CPL_DLL RegisterOGRNTF();
639void CPL_DLL RegisterOGRSDTS();
640void CPL_DLL RegisterOGRTiger();
641void CPL_DLL RegisterOGRS57();
642void CPL_DLL RegisterOGRTAB();
643void CPL_DLL RegisterOGRMIF();
644void CPL_DLL RegisterOGROGDI();
645void DeclareDeferredOGROGDIPlugin();
646void CPL_DLL RegisterOGRODBC();
647void DeclareDeferredOGRODBCPlugin();
648void CPL_DLL RegisterOGRWAsP();
649void CPL_DLL RegisterOGRPG();
650void DeclareDeferredOGRPGPlugin();
651void CPL_DLL RegisterOGRMSSQLSpatial();
652void DeclareDeferredOGRMSSQLSpatialPlugin();
653void CPL_DLL RegisterOGRMySQL();
654void DeclareDeferredOGRMySQLPlugin();
655void CPL_DLL RegisterOGROCI();
656void DeclareDeferredOGROCIPlugin();
657void CPL_DLL RegisterOGRDGN();
658void CPL_DLL RegisterOGRGML();
659void CPL_DLL RegisterOGRLIBKML();
660void DeclareDeferredOGRLIBKMLPlugin();
661void CPL_DLL RegisterOGRKML();
662void CPL_DLL RegisterOGRFlatGeobuf();
663void CPL_DLL RegisterOGRGeoJSON();
664void CPL_DLL RegisterOGRGeoJSONSeq();
665void CPL_DLL RegisterOGRESRIJSON();
666void CPL_DLL RegisterOGRTopoJSON();
667void CPL_DLL RegisterOGRAVCBin();
668void CPL_DLL RegisterOGRAVCE00();
669void CPL_DLL RegisterOGRMEM();
670void CPL_DLL RegisterOGRVRT();
671void CPL_DLL RegisterOGRSQLite();
672void CPL_DLL RegisterOGRCSV();
673void CPL_DLL RegisterOGRILI1();
674void CPL_DLL RegisterOGRILI2();
675void CPL_DLL RegisterOGRPGeo();
676void CPL_DLL RegisterOGRDXF();
677void CPL_DLL RegisterOGRCAD();
678void DeclareDeferredOGRCADPlugin();
679void CPL_DLL RegisterOGRDWG();
680void CPL_DLL RegisterOGRDGNV8();
681void DeclareDeferredOGRDWGPlugin();
682void DeclareDeferredOGRDGNV8Plugin();
683void CPL_DLL RegisterOGRIDB();
684void DeclareDeferredOGRIDBPlugin();
685void CPL_DLL RegisterOGRGMT();
686void CPL_DLL RegisterOGRGPX();
687void CPL_DLL RegisterOGRGeoconcept();
688void CPL_DLL RegisterOGRNAS();
689void CPL_DLL RegisterOGRGeoRSS();
690void CPL_DLL RegisterOGRVFK();
691void DeclareDeferredOGRVFKPlugin();
692void CPL_DLL RegisterOGRPGDump();
693void CPL_DLL RegisterOGROSM();
694void CPL_DLL RegisterOGRGPSBabel();
695void CPL_DLL RegisterOGRPDS();
696void CPL_DLL RegisterOGRWFS();
697void CPL_DLL RegisterOGROAPIF();
698void CPL_DLL RegisterOGRSOSI();
699void DeclareDeferredOGRSOSIPlugin();
700void CPL_DLL RegisterOGREDIGEO();
701void CPL_DLL RegisterOGRSVG();
702void CPL_DLL RegisterOGRIdrisi();
703void CPL_DLL RegisterOGRXLS();
704void DeclareDeferredOGRXLSPlugin();
705void CPL_DLL RegisterOGRODS();
706void CPL_DLL RegisterOGRXLSX();
707void CPL_DLL RegisterOGRElastic();
708void DeclareDeferredOGRElasticPlugin();
709void CPL_DLL RegisterOGRGeoPackage();
710void CPL_DLL RegisterOGRCarto();
711void DeclareDeferredOGRCartoPlugin();
712void CPL_DLL RegisterOGRAmigoCloud();
713void CPL_DLL RegisterOGRSXF();
714void CPL_DLL RegisterOGROpenFileGDB();
715void DeclareDeferredOGROpenFileGDBPlugin();
716void CPL_DLL RegisterOGRSelafin();
717void CPL_DLL RegisterOGRJML();
718void CPL_DLL RegisterOGRPLSCENES();
719void DeclareDeferredOGRPLSCENESPlugin();
720void CPL_DLL RegisterOGRCSW();
721void CPL_DLL RegisterOGRMongoDBv3();
722void DeclareDeferredOGRMongoDBv3Plugin();
723void CPL_DLL RegisterOGRVDV();
724void CPL_DLL RegisterOGRGMLAS();
725void DeclareDeferredOGRGMLASPlugin();
726void CPL_DLL RegisterOGRMVT();
727void CPL_DLL RegisterOGRNGW();
728void CPL_DLL RegisterOGRMapML();
729void CPL_DLL RegisterOGRLVBAG();
730void CPL_DLL RegisterOGRHANA();
731void DeclareDeferredOGRHANAPlugin();
732void CPL_DLL RegisterOGRParquet();
733void DeclareDeferredOGRParquetPlugin();
734void CPL_DLL RegisterOGRArrow();
735void DeclareDeferredOGRArrowPlugin();
736void CPL_DLL RegisterOGRGTFS();
737void CPL_DLL RegisterOGRPMTiles();
738void CPL_DLL RegisterOGRJSONFG();
739void CPL_DLL RegisterOGRMiraMon();
740void CPL_DLL RegisterOGRXODR();
741void DeclareDeferredOGRXODRPlugin();
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:436
A set of associated raster bands, usually from one file.
Definition gdal_priv.h:495
Format specific driver.
Definition gdal_priv.h:2124
Object with metadata.
Definition gdal_priv.h:141
Class for dataset open functions.
Definition gdal_priv.h:293
LEGACY class.
Definition ogrsf_frmts.h:513
Simple container for a bounding region in 3D.
Definition ogr_core.h:200
Simple container for a bounding region (rectangle)
Definition ogr_core.h:45
Definition of a feature class or feature layer.
Definition ogr_feature.h:501
A simple feature, including geometry and attributes.
Definition ogr_feature.h:877
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition ogrfeature.cpp:707
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:95
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:330
Abstract base class for all geometry classes.
Definition ogr_geometry.h:361
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition ogrsf_frmts.h:449
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition ogrsf_frmts.h:456
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:58
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:421
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:360
std::vector< std::unique_ptr< OGRSpatialReference, OGRSpatialReferenceReleaser > > GetSupportedSRSListRetType
Return type of OGRLayer::GetSupportedSRSList()
Definition ogrsf_frmts.h:243
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:429
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:368
LEGACY class.
Definition ogrsf_frmts.h:588
LEGACY class.
Definition ogrsf_frmts.h:548
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:153
This class represents a style table.
Definition ogr_featurestyle.h:70
CPLErr
Error category.
Definition cpl_error.h:37
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:283
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:279
#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:1030
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1179
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:964
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:169
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:199
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition ogr_api.h:676
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:407
int OGRErr
Type for a OGR error.
Definition ogr_core.h:371
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1554
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition ogrsf_frmts.h:437
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:421
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:429
Result item of OGR_L_GetGeometryTypes.
Definition ogr_api.h:693