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"
37 #include "gdal_priv.h"
47 #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;
70 class CPL_DLL
OGRLayer :
public GDALMajorObject
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;
111 virtual OGRErr ICreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
127 FeatureIterator
begin();
130 FeatureIterator
end();
132 virtual OGRGeometry *GetSpatialFilter();
133 virtual void SetSpatialFilter( OGRGeometry * );
134 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
135 double dfMaxX,
double dfMaxY );
137 virtual void SetSpatialFilter(
int iGeomField, OGRGeometry * );
138 virtual void SetSpatialFilterRect(
int iGeomField,
139 double dfMinX,
double dfMinY,
140 double dfMaxX,
double dfMaxY );
142 virtual OGRErr SetAttributeFilter(
const char * );
144 virtual void ResetReading() = 0;
145 virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0;
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;
290 inline 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");
424 void OGRRegisterAllInternal();
426 void CPL_DLL RegisterOGRFileGDB();
427 void CPL_DLL RegisterOGRShape();
428 void CPL_DLL RegisterOGRDB2();
429 void CPL_DLL RegisterOGRNTF();
430 void CPL_DLL RegisterOGRFME();
431 void CPL_DLL RegisterOGRSDTS();
432 void CPL_DLL RegisterOGRTiger();
433 void CPL_DLL RegisterOGRS57();
434 void CPL_DLL RegisterOGRTAB();
435 void CPL_DLL RegisterOGRMIF();
436 void CPL_DLL RegisterOGROGDI();
437 void CPL_DLL RegisterOGRODBC();
438 void CPL_DLL RegisterOGRWAsP();
439 void CPL_DLL RegisterOGRPG();
440 void CPL_DLL RegisterOGRMSSQLSpatial();
441 void CPL_DLL RegisterOGRMySQL();
442 void CPL_DLL RegisterOGROCI();
443 void CPL_DLL RegisterOGRDGN();
444 void CPL_DLL RegisterOGRGML();
445 void CPL_DLL RegisterOGRLIBKML();
446 void CPL_DLL RegisterOGRKML();
447 void CPL_DLL RegisterOGRGeoJSON();
448 void CPL_DLL RegisterOGRESRIJSON();
449 void CPL_DLL RegisterOGRTopoJSON();
450 void CPL_DLL RegisterOGRAVCBin();
451 void CPL_DLL RegisterOGRAVCE00();
452 void CPL_DLL RegisterOGRREC();
453 void CPL_DLL RegisterOGRMEM();
454 void CPL_DLL RegisterOGRVRT();
455 void CPL_DLL RegisterOGRDODS();
456 void CPL_DLL RegisterOGRSQLite();
457 void CPL_DLL RegisterOGRCSV();
458 void CPL_DLL RegisterOGRILI1();
459 void CPL_DLL RegisterOGRILI2();
460 void CPL_DLL RegisterOGRGRASS();
461 void CPL_DLL RegisterOGRPGeo();
462 void CPL_DLL RegisterOGRDXF();
463 void CPL_DLL RegisterOGRCAD();
464 void CPL_DLL RegisterOGRDWG();
465 void CPL_DLL RegisterOGRDGNV8();
466 void CPL_DLL RegisterOGRSDE();
467 void CPL_DLL RegisterOGRIDB();
468 void CPL_DLL RegisterOGRGMT();
469 void CPL_DLL RegisterOGRBNA();
470 void CPL_DLL RegisterOGRGPX();
471 void CPL_DLL RegisterOGRGeoconcept();
472 void CPL_DLL RegisterOGRIngres();
473 void CPL_DLL RegisterOGRXPlane();
474 void CPL_DLL RegisterOGRNAS();
475 void CPL_DLL RegisterOGRGeoRSS();
476 void CPL_DLL RegisterOGRGTM();
477 void CPL_DLL RegisterOGRVFK();
478 void CPL_DLL RegisterOGRPGDump();
479 void CPL_DLL RegisterOGROSM();
480 void CPL_DLL RegisterOGRGPSBabel();
481 void CPL_DLL RegisterOGRSUA();
482 void CPL_DLL RegisterOGROpenAir();
483 void CPL_DLL RegisterOGRPDS();
484 void CPL_DLL RegisterOGRWFS();
485 void CPL_DLL RegisterOGRWFS3();
486 void CPL_DLL RegisterOGRSOSI();
487 void CPL_DLL RegisterOGRHTF();
488 void CPL_DLL RegisterOGRAeronavFAA();
489 void CPL_DLL RegisterOGRGeomedia();
490 void CPL_DLL RegisterOGRMDB();
491 void CPL_DLL RegisterOGREDIGEO();
492 void CPL_DLL RegisterOGRGFT();
493 void CPL_DLL RegisterOGRSVG();
494 void CPL_DLL RegisterOGRCouchDB();
495 void CPL_DLL RegisterOGRCloudant();
496 void CPL_DLL RegisterOGRIdrisi();
497 void CPL_DLL RegisterOGRARCGEN();
498 void CPL_DLL RegisterOGRSEGUKOOA();
499 void CPL_DLL RegisterOGRSEGY();
500 void CPL_DLL RegisterOGRXLS();
501 void CPL_DLL RegisterOGRODS();
502 void CPL_DLL RegisterOGRXLSX();
503 void CPL_DLL RegisterOGRElastic();
504 void CPL_DLL RegisterOGRGeoPackage();
505 void CPL_DLL RegisterOGRWalk();
506 void CPL_DLL RegisterOGRCarto();
507 void CPL_DLL RegisterOGRAmigoCloud();
508 void CPL_DLL RegisterOGRSXF();
509 void CPL_DLL RegisterOGROpenFileGDB();
510 void CPL_DLL RegisterOGRSelafin();
511 void CPL_DLL RegisterOGRJML();
512 void CPL_DLL RegisterOGRPLSCENES();
513 void CPL_DLL RegisterOGRCSW();
514 void CPL_DLL RegisterOGRMongoDB();
515 void CPL_DLL RegisterOGRVDV();
516 void CPL_DLL RegisterOGRGMLAS();
517 void CPL_DLL RegisterOGRMVT();