31#ifndef OGRSF_FRMTS_H_INCLUDED
32#define OGRSF_FRMTS_H_INCLUDED
34#include "cpl_progress.h"
35#include "ogr_feature.h"
36#include "ogr_featurestyle.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;
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);
86 OGRFeatureUniquePtr& operator*();
87 FeatureIterator& operator++();
88 bool operator!=(
const FeatureIterator& it)
const;
92 friend inline FeatureIterator
end(
OGRLayer* poLayer);
96 int m_bFilterIsEnvelope;
97 OGRGeometry *m_poFilterGeom;
98 OGRPreparedGeometry *m_pPreparedFilterGeom;
99 OGREnvelope m_sFilterEnvelope;
100 int m_iGeomFieldFilter;
103 int FilterGeometry( OGRGeometry * );
105 int InstallFilter( OGRGeometry * );
107 OGRErr GetExtentInternal(
int iGeomField, OGREnvelope *psExtent,
int bForce );
110 virtual OGRErr
ISetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
135 double dfMaxX,
double dfMaxY );
139 double dfMinX,
double dfMinY,
140 double dfMaxX,
double dfMaxY );
146 virtual OGRErr SetNextByIndex( GIntBig nIndex );
147 virtual OGRFeature *GetFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
149 OGRErr SetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
150 OGRErr CreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
152 virtual OGRErr DeleteFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
154 virtual const
char *GetName();
155 virtual OGRwkbGeometryType GetGeomType();
156 virtual OGRFeatureDefn *GetLayerDefn() = 0;
157 virtual
int FindFieldIndex( const
char *pszFieldName,
int bExactMatch );
159 virtual OGRSpatialReference *GetSpatialRef();
161 virtual GIntBig GetFeatureCount(
int bForce = TRUE );
162 virtual OGRErr GetExtent(OGREnvelope *psExtent,
int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
163 virtual OGRErr GetExtent(
int iGeomField, OGREnvelope *psExtent,
164 int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
166 virtual
int TestCapability( const
char * ) = 0;
168 virtual OGRErr CreateField( OGRFieldDefn *poField,
169 int bApproxOK = TRUE );
170 virtual OGRErr DeleteField(
int iField );
171 virtual OGRErr ReorderFields(
int* panMap );
172 virtual OGRErr AlterFieldDefn(
int iField, OGRFieldDefn* poNewFieldDefn,
int nFlagsIn );
174 virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
175 int bApproxOK = TRUE );
177 virtual OGRErr SyncToDisk();
179 virtual OGRStyleTable *GetStyleTable();
180 virtual
void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
182 virtual
void SetStyleTable(OGRStyleTable *poStyleTable);
184 virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
185 virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
186 virtual OGRErr RollbackTransaction();
188 virtual const
char *GetFIDColumn();
189 virtual const
char *GetGeometryColumn();
191 virtual OGRErr SetIgnoredFields( const
char **papszFields );
193 OGRErr Intersection(
OGRLayer *pLayerMethod,
195 char** papszOptions =
nullptr,
196 GDALProgressFunc pfnProgress =
nullptr,
197 void * pProgressArg =
nullptr );
198 OGRErr Union(
OGRLayer *pLayerMethod,
200 char** papszOptions =
nullptr,
201 GDALProgressFunc pfnProgress =
nullptr,
202 void * pProgressArg =
nullptr );
203 OGRErr SymDifference(
OGRLayer *pLayerMethod,
206 GDALProgressFunc pfnProgress,
207 void * pProgressArg );
208 OGRErr Identity(
OGRLayer *pLayerMethod,
210 char** papszOptions =
nullptr,
211 GDALProgressFunc pfnProgress =
nullptr,
212 void * pProgressArg =
nullptr );
213 OGRErr Update(
OGRLayer *pLayerMethod,
215 char** papszOptions =
nullptr,
216 GDALProgressFunc pfnProgress =
nullptr,
217 void * pProgressArg =
nullptr );
218 OGRErr Clip(
OGRLayer *pLayerMethod,
220 char** papszOptions =
nullptr,
221 GDALProgressFunc pfnProgress =
nullptr,
222 void * pProgressArg =
nullptr );
223 OGRErr Erase(
OGRLayer *pLayerMethod,
225 char** papszOptions =
nullptr,
226 GDALProgressFunc pfnProgress =
nullptr,
227 void * pProgressArg =
nullptr );
231 int GetRefCount() const;
233 GIntBig GetFeaturesRead();
237 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos );
240 int AttributeFilterEvaluationNeedsGeometry();
243 OGRErr InitializeIndexSupport( const
char * );
244 OGRLayerAttrIndex *GetIndex() {
return m_poAttrIndex; }
245 int GetGeomFieldFilter()
const {
return m_iGeomFieldFilter; }
246 const char *GetAttrQueryString()
const {
return m_pszAttrQueryString; }
253 {
return reinterpret_cast<OGRLayerH
>(poLayer); }
259 {
return reinterpret_cast<OGRLayer*
>(hLayer); }
263 OGRStyleTable *m_poStyleTable;
264 OGRFeatureQuery *m_poAttrQuery;
265 char *m_pszAttrQueryString;
266 OGRLayerAttrIndex *m_poAttrIndex;
270 GIntBig m_nFeaturesRead;
290inline OGRLayer::FeatureIterator
end(
OGRLayer* poLayer) {
return poLayer->
end(); }
320 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
322 static void DestroyDataSource(
OGRDataSource * ) OGR_DEPRECATED(
"Use GDALDataset class instead");
354 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
356 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate=FALSE ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
358 virtual int TestCapability(
const char *pszCap ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
360 virtual OGRDataSource *CreateDataSource(
const char *pszName,
361 char ** =
nullptr ) OGR_DEPRECATED(
"Use GDALDriver class instead");
362 virtual OGRErr DeleteDataSource(
const char *pszName ) OGR_DEPRECATED(
"Use GDALDriver class instead");
389 static GDALDataset* OpenWithDriverArg(GDALDriver* poDriver,
390 GDALOpenInfo* poOpenInfo);
391 static GDALDataset* CreateVectorOnly( GDALDriver* poDriver,
392 const char * pszName,
393 char ** papszOptions );
394 static CPLErr DeleteDataSource( GDALDriver* poDriver,
395 const char * pszName );
399 static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
402 void RegisterDriver(
OGRSFDriver * poDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
405 int GetDriverCount(
void ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
407 GDALDriver *GetDriver(
int iDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
409 GDALDriver *GetDriverByName(
const char * ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
412 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
414 OGRDataSource *GetOpenDS(
int ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
424void OGRRegisterAllInternal();
426void CPL_DLL RegisterOGRFileGDB();
427void CPL_DLL RegisterOGRShape();
428void CPL_DLL RegisterOGRDB2();
429void CPL_DLL RegisterOGRNTF();
430void CPL_DLL RegisterOGRFME();
431void CPL_DLL RegisterOGRSDTS();
432void CPL_DLL RegisterOGRTiger();
433void CPL_DLL RegisterOGRS57();
434void CPL_DLL RegisterOGRTAB();
435void CPL_DLL RegisterOGRMIF();
436void CPL_DLL RegisterOGROGDI();
437void CPL_DLL RegisterOGRODBC();
438void CPL_DLL RegisterOGRWAsP();
439void CPL_DLL RegisterOGRPG();
440void CPL_DLL RegisterOGRMSSQLSpatial();
441void CPL_DLL RegisterOGRMySQL();
442void CPL_DLL RegisterOGROCI();
443void CPL_DLL RegisterOGRDGN();
444void CPL_DLL RegisterOGRGML();
445void CPL_DLL RegisterOGRLIBKML();
446void CPL_DLL RegisterOGRKML();
447void CPL_DLL RegisterOGRGeoJSON();
448void CPL_DLL RegisterOGRESRIJSON();
449void CPL_DLL RegisterOGRTopoJSON();
450void CPL_DLL RegisterOGRAVCBin();
451void CPL_DLL RegisterOGRAVCE00();
452void CPL_DLL RegisterOGRREC();
453void CPL_DLL RegisterOGRMEM();
454void CPL_DLL RegisterOGRVRT();
455void CPL_DLL RegisterOGRDODS();
456void CPL_DLL RegisterOGRSQLite();
457void CPL_DLL RegisterOGRCSV();
458void CPL_DLL RegisterOGRILI1();
459void CPL_DLL RegisterOGRILI2();
460void CPL_DLL RegisterOGRGRASS();
461void CPL_DLL RegisterOGRPGeo();
462void CPL_DLL RegisterOGRDXF();
463void CPL_DLL RegisterOGRCAD();
464void CPL_DLL RegisterOGRDWG();
465void CPL_DLL RegisterOGRDGNV8();
466void CPL_DLL RegisterOGRSDE();
467void CPL_DLL RegisterOGRIDB();
468void CPL_DLL RegisterOGRGMT();
469void CPL_DLL RegisterOGRBNA();
470void CPL_DLL RegisterOGRGPX();
471void CPL_DLL RegisterOGRGeoconcept();
472void CPL_DLL RegisterOGRIngres();
473void CPL_DLL RegisterOGRXPlane();
474void CPL_DLL RegisterOGRNAS();
475void CPL_DLL RegisterOGRGeoRSS();
476void CPL_DLL RegisterOGRGTM();
477void CPL_DLL RegisterOGRVFK();
478void CPL_DLL RegisterOGRPGDump();
479void CPL_DLL RegisterOGROSM();
480void CPL_DLL RegisterOGRGPSBabel();
481void CPL_DLL RegisterOGRSUA();
482void CPL_DLL RegisterOGROpenAir();
483void CPL_DLL RegisterOGRPDS();
484void CPL_DLL RegisterOGRWFS();
485void CPL_DLL RegisterOGRWFS3();
486void CPL_DLL RegisterOGRSOSI();
487void CPL_DLL RegisterOGRHTF();
488void CPL_DLL RegisterOGRAeronavFAA();
489void CPL_DLL RegisterOGRGeomedia();
490void CPL_DLL RegisterOGRMDB();
491void CPL_DLL RegisterOGREDIGEO();
492void CPL_DLL RegisterOGRGFT();
493void CPL_DLL RegisterOGRSVG();
494void CPL_DLL RegisterOGRCouchDB();
495void CPL_DLL RegisterOGRCloudant();
496void CPL_DLL RegisterOGRIdrisi();
497void CPL_DLL RegisterOGRARCGEN();
498void CPL_DLL RegisterOGRSEGUKOOA();
499void CPL_DLL RegisterOGRSEGY();
500void CPL_DLL RegisterOGRXLS();
501void CPL_DLL RegisterOGRODS();
502void CPL_DLL RegisterOGRXLSX();
503void CPL_DLL RegisterOGRElastic();
504void CPL_DLL RegisterOGRGeoPackage();
505void CPL_DLL RegisterOGRWalk();
506void CPL_DLL RegisterOGRCarto();
507void CPL_DLL RegisterOGRAmigoCloud();
508void CPL_DLL RegisterOGRSXF();
509void CPL_DLL RegisterOGROpenFileGDB();
510void CPL_DLL RegisterOGRSelafin();
511void CPL_DLL RegisterOGRJML();
512void CPL_DLL RegisterOGRPLSCENES();
513void CPL_DLL RegisterOGRCSW();
514void CPL_DLL RegisterOGRMongoDB();
515void CPL_DLL RegisterOGRVDV();
516void CPL_DLL RegisterOGRGMLAS();
517void CPL_DLL RegisterOGRMVT();
Definition: ogrsf_frmts.h:316
Definition: ogrsf_frmts.h:71
virtual void SetSpatialFilter(OGRGeometry *)
Set a new spatial filter.
friend FeatureIterator begin(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:285
virtual OGRErr ICreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT
Create and write a new feature within a layer.
virtual OGRFeature * GetNextFeature() CPL_WARN_UNUSED_RESULT=0
Fetch the next available feature from this layer.
virtual void SetSpatialFilterRect(int iGeomField, double dfMinX, double dfMinY, double dfMaxX, double dfMaxY)
Set a new rectangular spatial filter.
static OGRLayerH ToHandle(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:252
friend FeatureIterator end(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:290
virtual OGRErr SetAttributeFilter(const char *)
Set a new attribute query.
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
virtual void SetSpatialFilterRect(double dfMinX, double dfMinY, double dfMaxX, double dfMaxY)
Set a new rectangular spatial filter.
virtual OGRErr ISetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT
Rewrite an existing feature.
virtual OGRGeometry * GetSpatialFilter()
This method returns the current spatial filter for this layer.
virtual void SetSpatialFilter(int iGeomField, OGRGeometry *)
Set a new spatial filter.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Definition: ogrsf_frmts.h:258
Definition: ogrsf_frmts.h:384
Definition: ogrsf_frmts.h:349
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:285
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:290