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)
55 class OGRLayerAttrIndex;
74 std::unique_ptr<Private> m_poPrivate;
76 void ConvertGeomsIfNecessary(
OGRFeature *poFeature );
78 class CPL_DLL FeatureIterator
81 std::unique_ptr<Private> m_poPrivate;
83 FeatureIterator(
OGRLayer* poLayer,
bool bStart);
84 FeatureIterator(FeatureIterator&& oOther) noexcept;
87 FeatureIterator& operator++();
88 bool operator!=(
const FeatureIterator& it)
const;
92 friend inline FeatureIterator
end(
OGRLayer* poLayer);
98 int m_bFilterIsEnvelope;
100 OGRPreparedGeometry *m_pPreparedFilterGeom;
102 int m_iGeomFieldFilter;
129 FeatureIterator
begin();
132 FeatureIterator
end();
136 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
137 double dfMaxX,
double dfMaxY );
139 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry * );
140 virtual void SetSpatialFilterRect(
int iGeomField,
141 double dfMinX,
double dfMinY,
142 double dfMaxX,
double dfMaxY );
144 virtual OGRErr SetAttributeFilter(
const char * );
156 virtual const
char *GetName();
159 virtual
int FindFieldIndex( const
char *pszFieldName,
int bExactMatch );
163 virtual
GIntBig GetFeatureCount(
int bForce = TRUE );
168 virtual
int TestCapability( const
char * ) = 0;
173 int bApproxOK = TRUE );
174 virtual
OGRErr DeleteField(
int iField );
175 virtual
OGRErr ReorderFields(
int* panMap );
176 virtual
OGRErr AlterFieldDefn(
int iField,
OGRFieldDefn* poNewFieldDefn,
int nFlagsIn );
179 int bApproxOK = TRUE );
181 virtual
OGRErr SyncToDisk();
184 virtual
void SetStyleTableDirectly(
OGRStyleTable *poStyleTable );
190 virtual
OGRErr RollbackTransaction();
192 virtual const
char *GetFIDColumn();
193 virtual const
char *GetGeometryColumn();
195 virtual
OGRErr SetIgnoredFields( const
char **papszFields );
199 char** papszOptions =
nullptr,
200 GDALProgressFunc pfnProgress =
nullptr,
201 void * pProgressArg =
nullptr );
204 char** papszOptions =
nullptr,
205 GDALProgressFunc pfnProgress =
nullptr,
206 void * pProgressArg =
nullptr );
210 GDALProgressFunc pfnProgress,
211 void * pProgressArg );
214 char** papszOptions =
nullptr,
215 GDALProgressFunc pfnProgress =
nullptr,
216 void * pProgressArg =
nullptr );
219 char** papszOptions =
nullptr,
220 GDALProgressFunc pfnProgress =
nullptr,
221 void * pProgressArg =
nullptr );
224 char** papszOptions =
nullptr,
225 GDALProgressFunc pfnProgress =
nullptr,
226 void * pProgressArg =
nullptr );
229 char** papszOptions =
nullptr,
230 GDALProgressFunc pfnProgress =
nullptr,
231 void * pProgressArg =
nullptr );
235 int GetRefCount() const;
241 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos );
244 int AttributeFilterEvaluationNeedsGeometry();
247 OGRErr InitializeIndexSupport( const
char * );
248 OGRLayerAttrIndex *GetIndex() {
return m_poAttrIndex; }
249 int GetGeomFieldFilter()
const {
return m_iGeomFieldFilter; }
250 const char *GetAttrQueryString()
const {
return m_pszAttrQueryString; }
257 {
return reinterpret_cast<OGRLayerH>(poLayer); }
263 {
return reinterpret_cast<OGRLayer*
>(hLayer); }
268 OGRFeatureQuery *m_poAttrQuery;
269 char *m_pszAttrQueryString;
270 OGRLayerAttrIndex *m_poAttrIndex;
294 inline OGRLayer::FeatureIterator
end(
OGRLayer* poLayer) {
return poLayer->
end(); }
320 const auto poThis =
static_cast<BaseLayer*
>(
this);
323 OGRFeature *poFeature = poThis->GetNextRawFeature();
324 if (poFeature ==
nullptr)
327 if((poThis->m_poFilterGeom ==
nullptr
329 && (poThis->m_poAttrQuery ==
nullptr
330 || poThis->m_poAttrQuery->Evaluate( poFeature )) )
341 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
343 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
345 OGRFeature* GetNextFeature() override { return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); }
376 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
378 static void DestroyDataSource(
OGRDataSource * ) OGR_DEPRECATED(
"Use GDALDataset class instead");
410 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
412 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate=FALSE ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
414 virtual int TestCapability(
const char *pszCap ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
416 virtual OGRDataSource *CreateDataSource(
const char *pszName,
417 char ** =
nullptr ) OGR_DEPRECATED(
"Use GDALDriver class instead");
418 virtual OGRErr DeleteDataSource(
const char *pszName ) OGR_DEPRECATED(
"Use GDALDriver class instead");
448 const char * pszName,
449 char ** papszOptions );
451 const char * pszName );
455 static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
458 void RegisterDriver(
OGRSFDriver * poDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
461 int GetDriverCount(
void ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
463 GDALDriver *GetDriver(
int iDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
465 GDALDriver *GetDriverByName(
const char * ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
468 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
470 OGRDataSource *GetOpenDS(
int ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
480 void OGRRegisterAllInternal();
482 void CPL_DLL RegisterOGRFileGDB();
483 void CPL_DLL RegisterOGRShape();
484 void CPL_DLL RegisterOGRNTF();
485 void CPL_DLL RegisterOGRSDTS();
486 void CPL_DLL RegisterOGRTiger();
487 void CPL_DLL RegisterOGRS57();
488 void CPL_DLL RegisterOGRTAB();
489 void CPL_DLL RegisterOGRMIF();
490 void CPL_DLL RegisterOGROGDI();
491 void CPL_DLL RegisterOGRODBC();
492 void CPL_DLL RegisterOGRWAsP();
493 void CPL_DLL RegisterOGRPG();
494 void CPL_DLL RegisterOGRMSSQLSpatial();
495 void CPL_DLL RegisterOGRMySQL();
496 void CPL_DLL RegisterOGROCI();
497 void CPL_DLL RegisterOGRDGN();
498 void CPL_DLL RegisterOGRGML();
499 void CPL_DLL RegisterOGRLIBKML();
500 void CPL_DLL RegisterOGRKML();
501 void CPL_DLL RegisterOGRFlatGeobuf();
502 void CPL_DLL RegisterOGRGeoJSON();
503 void CPL_DLL RegisterOGRGeoJSONSeq();
504 void CPL_DLL RegisterOGRESRIJSON();
505 void CPL_DLL RegisterOGRTopoJSON();
506 void CPL_DLL RegisterOGRAVCBin();
507 void CPL_DLL RegisterOGRAVCE00();
508 void CPL_DLL RegisterOGRMEM();
509 void CPL_DLL RegisterOGRVRT();
510 void CPL_DLL RegisterOGRDODS();
511 void CPL_DLL RegisterOGRSQLite();
512 void CPL_DLL RegisterOGRCSV();
513 void CPL_DLL RegisterOGRILI1();
514 void CPL_DLL RegisterOGRILI2();
515 void CPL_DLL RegisterOGRGRASS();
516 void CPL_DLL RegisterOGRPGeo();
517 void CPL_DLL RegisterOGRDXF();
518 void CPL_DLL RegisterOGRCAD();
519 void CPL_DLL RegisterOGRDWG();
520 void CPL_DLL RegisterOGRDGNV8();
521 void CPL_DLL RegisterOGRIDB();
522 void CPL_DLL RegisterOGRGMT();
523 void CPL_DLL RegisterOGRGPX();
524 void CPL_DLL RegisterOGRGeoconcept();
525 void CPL_DLL RegisterOGRNAS();
526 void CPL_DLL RegisterOGRGeoRSS();
527 void CPL_DLL RegisterOGRVFK();
528 void CPL_DLL RegisterOGRPGDump();
529 void CPL_DLL RegisterOGROSM();
530 void CPL_DLL RegisterOGRGPSBabel();
531 void CPL_DLL RegisterOGRPDS();
532 void CPL_DLL RegisterOGRWFS();
533 void CPL_DLL RegisterOGROAPIF();
534 void CPL_DLL RegisterOGRSOSI();
535 void CPL_DLL RegisterOGREDIGEO();
536 void CPL_DLL RegisterOGRSVG();
537 void CPL_DLL RegisterOGRIdrisi();
538 void CPL_DLL RegisterOGRXLS();
539 void CPL_DLL RegisterOGRODS();
540 void CPL_DLL RegisterOGRXLSX();
541 void CPL_DLL RegisterOGRElastic();
542 void CPL_DLL RegisterOGRGeoPackage();
543 void CPL_DLL RegisterOGRCarto();
544 void CPL_DLL RegisterOGRAmigoCloud();
545 void CPL_DLL RegisterOGRSXF();
546 void CPL_DLL RegisterOGROpenFileGDB();
547 void CPL_DLL RegisterOGRSelafin();
548 void CPL_DLL RegisterOGRJML();
549 void CPL_DLL RegisterOGRPLSCENES();
550 void CPL_DLL RegisterOGRCSW();
551 void CPL_DLL RegisterOGRMongoDBv3();
552 void CPL_DLL RegisterOGRVDV();
553 void CPL_DLL RegisterOGRGMLAS();
554 void CPL_DLL RegisterOGRMVT();
555 void CPL_DLL RegisterOGRNGW();
556 void CPL_DLL RegisterOGRMapML();
557 void CPL_DLL RegisterOGRLVBAG();
558 void CPL_DLL RegisterOGRHANA();
559 void CPL_DLL RegisterOGRParquet();
560 void CPL_DLL RegisterOGRArrow();
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:340
Format specific driver.
Definition: gdal_priv.h:1525
Object with metadata.
Definition: gdal_priv.h:136
Class for dataset open functions.
Definition: gdal_priv.h:269
LEGACY class.
Definition: ogrsf_frmts.h:372
Simple container for a bounding region (rectangle)
Definition: ogr_core.h:58
Definition of a feature class or feature layer.
Definition: ogr_feature.h:279
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:380
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition: ogrfeature.cpp:719
Definition of an attribute of an OGRFeatureDefn.
Definition: ogr_feature.h:99
Definition of a geometry field of an OGRFeatureDefn.
Definition: ogr_feature.h:202
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:327
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition: ogrsf_frmts.h:311
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition: ogrsf_frmts.h:318
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:71
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:289
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:262
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition: ogrsf_frmts.h:256
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:294
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
LEGACY class.
Definition: ogrsf_frmts.h:440
LEGACY class.
Definition: ogrsf_frmts.h:405
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:158
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:303
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:301
#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:927
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:866
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:230
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition: ogr_api.h:590
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:369
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:341
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:837
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition: ogrsf_frmts.h:299
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:289
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:294