31 #ifndef OGRSF_FRMTS_H_INCLUDED
32 #define OGRSF_FRMTS_H_INCLUDED
34 #include "cpl_progress.h"
49 #if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
50 #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
52 #define OGR_DEPRECATED(x)
56 class OGRLayerAttrIndex;
59 struct ArrowArrayStream;
77 std::unique_ptr<Private> m_poPrivate;
79 void ConvertGeomsIfNecessary(
OGRFeature *poFeature);
81 class CPL_DLL FeatureIterator
84 std::unique_ptr<Private> m_poPrivate;
87 FeatureIterator(
OGRLayer *poLayer,
bool bStart);
89 FeatureIterator &&oOther) noexcept;
93 FeatureIterator &operator++();
94 bool operator!=(
const FeatureIterator &it)
const;
98 friend inline FeatureIterator
end(
OGRLayer *poLayer);
104 int m_bFilterIsEnvelope;
106 OGRPreparedGeometry *m_pPreparedFilterGeom;
109 int m_iGeomFieldFilter;
117 ValidateGeometryFieldIndexForSetSpatialFilter(
int iGeomField,
119 bool bIsSelectLayer =
false);
128 IUpdateFeature(
OGRFeature *poFeature,
int nUpdatedFieldsCount,
129 const int *panUpdatedFieldsIdx,
int nUpdatedGeomFieldsCount,
130 const int *panUpdatedGeomFieldsIdx,
136 struct ArrowArrayStreamPrivateData
138 bool m_bArrowArrayStreamInProgress =
false;
141 std::vector<GIntBig> m_anQueriedFIDs{};
142 size_t m_iQueriedFIDS = 0;
143 std::deque<std::unique_ptr<OGRFeature>> m_oFeatureQueue{};
146 std::shared_ptr<ArrowArrayStreamPrivateData>
147 m_poSharedArrowArrayStreamPrivateData{};
149 struct ArrowArrayStreamPrivateDataSharedDataWrapper
151 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
155 friend class OGRArrowArrayHelper;
156 static void ReleaseArray(
struct ArrowArray *array);
157 static void ReleaseSchema(
struct ArrowSchema *schema);
158 static void ReleaseStream(
struct ArrowArrayStream *stream);
159 virtual int GetArrowSchema(
struct ArrowArrayStream *,
160 struct ArrowSchema *out_schema);
161 virtual int GetNextArrowArray(
struct ArrowArrayStream *,
162 struct ArrowArray *out_array);
163 static int StaticGetArrowSchema(
struct ArrowArrayStream *,
164 struct ArrowSchema *out_schema);
165 static int StaticGetNextArrowArray(
struct ArrowArrayStream *,
166 struct ArrowArray *out_array);
167 static const char *GetLastErrorArrowArrayStream(
struct ArrowArrayStream *);
169 static struct ArrowSchema *
171 const char *pszArrowFormat,
172 const char *pszExtensionName);
175 CanPostFilterArrowArray(
const struct ArrowSchema *schema)
const;
176 void PostFilterArrowArray(
const struct ArrowSchema *schema,
177 struct ArrowArray *array,
181 bool CreateFieldFromArrowSchemaInternal(
const struct ArrowSchema *schema,
182 const std::string &osFieldPrefix,
200 FeatureIterator
begin();
203 FeatureIterator
end();
207 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
208 double dfMaxX,
double dfMaxY);
210 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry *);
211 virtual void SetSpatialFilterRect(
int iGeomField,
double dfMinX,
212 double dfMinY,
double dfMaxX,
215 virtual OGRErr SetAttributeFilter(
const char *);
223 virtual
bool GetArrowStream(struct ArrowArrayStream *out_stream,
225 virtual
bool IsArrowSchemaSupported(const struct ArrowSchema *schema,
227 std::
string &osErrorMsg) const;
229 CreateFieldFromArrowSchema(const struct ArrowSchema *schema,
231 virtual
bool WriteArrowBatch(const struct ArrowSchema *schema,
232 struct ArrowArray *array,
239 const
int *panUpdatedFieldsIdx,
240 int nUpdatedGeomFieldsCount,
241 const
int *panUpdatedGeomFieldsIdx,
246 virtual const
char *GetName();
249 virtual
int FindFieldIndex(const
char *pszFieldName,
int bExactMatch);
258 GetSupportedSRSList(
int iGeomField);
259 virtual
OGRErr SetActiveSRS(
int iGeomField,
262 virtual
GIntBig GetFeatureCount(
int bForce = TRUE);
271 virtual
int TestCapability(const
char *) = 0;
276 int bApproxOK = TRUE);
277 virtual
OGRErr DeleteField(
int iField);
278 virtual
OGRErr ReorderFields(
int *panMap);
282 AlterGeomFieldDefn(
int iGeomField,
287 int bApproxOK = TRUE);
289 virtual
OGRErr SyncToDisk();
292 virtual
void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
298 virtual
OGRErr RollbackTransaction();
300 virtual const
char *GetFIDColumn();
301 virtual const
char *GetGeometryColumn();
306 GetGeometryTypes(
int iGeomField,
int nFlagsGGT,
int &nEntryCountOut,
307 GDALProgressFunc pfnProgress,
void *pProgressData);
310 char **papszOptions =
nullptr,
311 GDALProgressFunc pfnProgress =
nullptr,
312 void *pProgressArg =
nullptr);
314 char **papszOptions =
nullptr,
315 GDALProgressFunc pfnProgress =
nullptr,
316 void *pProgressArg =
nullptr);
318 char **papszOptions, GDALProgressFunc pfnProgress,
321 char **papszOptions =
nullptr,
322 GDALProgressFunc pfnProgress =
nullptr,
323 void *pProgressArg =
nullptr);
325 char **papszOptions =
nullptr,
326 GDALProgressFunc pfnProgress =
nullptr,
327 void *pProgressArg =
nullptr);
329 char **papszOptions =
nullptr,
330 GDALProgressFunc pfnProgress =
nullptr,
331 void *pProgressArg =
nullptr);
333 char **papszOptions =
nullptr,
334 GDALProgressFunc pfnProgress =
nullptr,
335 void *pProgressArg =
nullptr);
339 int GetRefCount() const;
345 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos);
348 int AttributeFilterEvaluationNeedsGeometry();
351 OGRErr InitializeIndexSupport(const
char *);
353 OGRLayerAttrIndex *GetIndex()
355 return m_poAttrIndex;
358 int GetGeomFieldFilter()
const
360 return m_iGeomFieldFilter;
363 const char *GetAttrQueryString()
const
365 return m_pszAttrQueryString;
375 return reinterpret_cast<OGRLayerH>(poLayer);
383 return reinterpret_cast<OGRLayer *
>(hLayer);
387 bool FilterWKBGeometry(
const GByte *pabyWKB,
size_t nWKBSize,
388 bool bEnvelopeAlreadySet,
391 static bool FilterWKBGeometry(
const GByte *pabyWKB,
size_t nWKBSize,
392 bool bEnvelopeAlreadySet,
395 bool bFilterIsEnvelope,
397 OGRPreparedGeometry *&poPreparedFilterGeom);
403 static constexpr
const char *DEFAULT_ARROW_FID_NAME =
"OGC_FID";
408 static constexpr
const char *DEFAULT_ARROW_GEOMETRY_NAME =
"wkb_geometry";
413 OGRFeatureQuery *m_poAttrQuery;
414 char *m_pszAttrQueryString;
415 OGRLayerAttrIndex *m_poAttrIndex;
436 return poLayer->
begin();
444 return poLayer->
end();
471 const auto poThis =
static_cast<BaseLayer *
>(
this);
474 OGRFeature *poFeature = poThis->GetNextRawFeature();
475 if (poFeature ==
nullptr)
478 if ((poThis->m_poFilterGeom ==
nullptr ||
480 (poThis->m_poAttrQuery ==
nullptr ||
481 poThis->m_poAttrQuery->Evaluate(poFeature)))
492 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
494 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
497 OGRFeature *GetNextFeature() override \
499 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
530 virtual const char *GetName()
531 OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
534 OGR_DEPRECATED(
"Use GDALDataset class instead");
566 virtual const char *GetName()
567 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
569 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate = FALSE)
570 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
572 virtual int TestCapability(
const char *pszCap)
573 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
577 OGR_DEPRECATED(
"Use GDALDriver class instead");
578 virtual OGRErr DeleteDataSource(
const char *pszName)
579 OGR_DEPRECATED(
"Use GDALDriver class instead");
610 char **papszOptions);
616 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
620 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
623 int GetDriverCount(
void)
624 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
627 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
630 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
633 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
636 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
646 void OGRRegisterAllInternal();
648 void CPL_DLL RegisterOGRFileGDB();
649 void DeclareDeferredOGRFileGDBPlugin();
650 void CPL_DLL RegisterOGRShape();
651 void CPL_DLL RegisterOGRNTF();
652 void CPL_DLL RegisterOGRSDTS();
653 void CPL_DLL RegisterOGRTiger();
654 void CPL_DLL RegisterOGRS57();
655 void CPL_DLL RegisterOGRTAB();
656 void CPL_DLL RegisterOGRMIF();
657 void CPL_DLL RegisterOGROGDI();
658 void DeclareDeferredOGROGDIPlugin();
659 void CPL_DLL RegisterOGRODBC();
660 void DeclareDeferredOGRODBCPlugin();
661 void CPL_DLL RegisterOGRWAsP();
662 void CPL_DLL RegisterOGRPG();
663 void DeclareDeferredOGRPGPlugin();
664 void CPL_DLL RegisterOGRMSSQLSpatial();
665 void DeclareDeferredOGRMSSQLSpatialPlugin();
666 void CPL_DLL RegisterOGRMySQL();
667 void DeclareDeferredOGRMySQLPlugin();
668 void CPL_DLL RegisterOGROCI();
669 void DeclareDeferredOGROCIPlugin();
670 void CPL_DLL RegisterOGRDGN();
671 void CPL_DLL RegisterOGRGML();
672 void CPL_DLL RegisterOGRLIBKML();
673 void DeclareDeferredOGRLIBKMLPlugin();
674 void CPL_DLL RegisterOGRKML();
675 void CPL_DLL RegisterOGRFlatGeobuf();
676 void CPL_DLL RegisterOGRGeoJSON();
677 void CPL_DLL RegisterOGRGeoJSONSeq();
678 void CPL_DLL RegisterOGRESRIJSON();
679 void CPL_DLL RegisterOGRTopoJSON();
680 void CPL_DLL RegisterOGRAVCBin();
681 void CPL_DLL RegisterOGRAVCE00();
682 void CPL_DLL RegisterOGRMEM();
683 void CPL_DLL RegisterOGRVRT();
684 void CPL_DLL RegisterOGRSQLite();
685 void CPL_DLL RegisterOGRCSV();
686 void CPL_DLL RegisterOGRILI1();
687 void CPL_DLL RegisterOGRILI2();
688 void CPL_DLL RegisterOGRPGeo();
689 void CPL_DLL RegisterOGRDXF();
690 void CPL_DLL RegisterOGRCAD();
691 void DeclareDeferredOGRCADPlugin();
692 void CPL_DLL RegisterOGRDWG();
693 void CPL_DLL RegisterOGRDGNV8();
694 void DeclareDeferredOGRDWGPlugin();
695 void DeclareDeferredOGRDGNV8Plugin();
696 void CPL_DLL RegisterOGRIDB();
697 void DeclareDeferredOGRIDBPlugin();
698 void CPL_DLL RegisterOGRGMT();
699 void CPL_DLL RegisterOGRGPX();
700 void CPL_DLL RegisterOGRGeoconcept();
701 void CPL_DLL RegisterOGRNAS();
702 void CPL_DLL RegisterOGRGeoRSS();
703 void CPL_DLL RegisterOGRVFK();
704 void DeclareDeferredOGRVFKPlugin();
705 void CPL_DLL RegisterOGRPGDump();
706 void CPL_DLL RegisterOGROSM();
707 void CPL_DLL RegisterOGRGPSBabel();
708 void CPL_DLL RegisterOGRPDS();
709 void CPL_DLL RegisterOGRWFS();
710 void CPL_DLL RegisterOGROAPIF();
711 void CPL_DLL RegisterOGRSOSI();
712 void DeclareDeferredOGRSOSIPlugin();
713 void CPL_DLL RegisterOGREDIGEO();
714 void CPL_DLL RegisterOGRSVG();
715 void CPL_DLL RegisterOGRIdrisi();
716 void CPL_DLL RegisterOGRXLS();
717 void DeclareDeferredOGRXLSPlugin();
718 void CPL_DLL RegisterOGRODS();
719 void CPL_DLL RegisterOGRXLSX();
720 void CPL_DLL RegisterOGRElastic();
721 void DeclareDeferredOGRElasticPlugin();
722 void CPL_DLL RegisterOGRGeoPackage();
723 void CPL_DLL RegisterOGRCarto();
724 void DeclareDeferredOGRCartoPlugin();
725 void CPL_DLL RegisterOGRAmigoCloud();
726 void CPL_DLL RegisterOGRSXF();
727 void CPL_DLL RegisterOGROpenFileGDB();
728 void DeclareDeferredOGROpenFileGDBPlugin();
729 void CPL_DLL RegisterOGRSelafin();
730 void CPL_DLL RegisterOGRJML();
731 void CPL_DLL RegisterOGRPLSCENES();
732 void DeclareDeferredOGRPLSCENESPlugin();
733 void CPL_DLL RegisterOGRCSW();
734 void CPL_DLL RegisterOGRMongoDBv3();
735 void DeclareDeferredOGRMongoDBv3Plugin();
736 void CPL_DLL RegisterOGRVDV();
737 void CPL_DLL RegisterOGRGMLAS();
738 void DeclareDeferredOGRGMLASPlugin();
739 void CPL_DLL RegisterOGRMVT();
740 void CPL_DLL RegisterOGRNGW();
741 void CPL_DLL RegisterOGRMapML();
742 void CPL_DLL RegisterOGRLVBAG();
743 void CPL_DLL RegisterOGRHANA();
744 void DeclareDeferredOGRHANAPlugin();
745 void CPL_DLL RegisterOGRParquet();
746 void DeclareDeferredOGRParquetPlugin();
747 void CPL_DLL RegisterOGRArrow();
748 void DeclareDeferredOGRArrowPlugin();
749 void CPL_DLL RegisterOGRGTFS();
750 void CPL_DLL RegisterOGRPMTiles();
751 void CPL_DLL RegisterOGRJSONFG();
752 void CPL_DLL RegisterOGRMiraMon();
753 void CPL_DLL RegisterOGRXODR();
754 void DeclareDeferredOGRXODRPlugin();
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:449
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:503
Format specific driver.
Definition: gdal_priv.h:2001
Object with metadata.
Definition: gdal_priv.h:156
Class for dataset open functions.
Definition: gdal_priv.h:301
LEGACY class.
Definition: ogrsf_frmts.h:526
Simple container for a bounding region in 3D.
Definition: ogr_core.h:216
Simple container for a bounding region (rectangle)
Definition: ogr_core.h:61
Definition of a feature class or feature layer.
Definition: ogr_feature.h:517
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:893
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition: ogrfeature.cpp:719
Definition of an attribute of an OGRFeatureDefn.
Definition: ogr_feature.h:111
Definition of a geometry field of an OGRFeatureDefn.
Definition: ogr_feature.h:346
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:377
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition: ogrsf_frmts.h:462
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition: ogrsf_frmts.h:469
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:74
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:434
virtual OGRFeature * GetNextFeature()=0
Fetch the next available feature from this layer.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Convert a OGRLayerH to a OGRLayer*.
Definition: ogrsf_frmts.h:381
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition: ogrsf_frmts.h:373
std::vector< std::unique_ptr< OGRSpatialReference, OGRSpatialReferenceReleaser > > GetSupportedSRSListRetType
Return type of OGRLayer::GetSupportedSRSList()
Definition: ogrsf_frmts.h:256
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:442
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
LEGACY class.
Definition: ogrsf_frmts.h:601
LEGACY class.
Definition: ogrsf_frmts.h:561
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:169
This class represents a style table.
Definition: ogr_featurestyle.h:86
CPLErr
Error category.
Definition: cpl_error.h:53
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:299
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:295
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition: cpl_port.h:1042
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1183
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:976
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:185
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:215
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition: ogr_api.h:691
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:416
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:387
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:1570
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition: ogrsf_frmts.h:450
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:434
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:442
Result item of OGR_L_GetGeometryTypes.
Definition: ogr_api.h:708