31 #ifndef OGRSF_FRMTS_H_INCLUDED
32 #define OGRSF_FRMTS_H_INCLUDED
34 #include "cpl_progress.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;
58 struct ArrowArrayStream;
76 std::unique_ptr<Private> m_poPrivate;
78 void ConvertGeomsIfNecessary(
OGRFeature *poFeature );
80 class CPL_DLL FeatureIterator
83 std::unique_ptr<Private> m_poPrivate;
85 FeatureIterator(
OGRLayer* poLayer,
bool bStart);
86 FeatureIterator(FeatureIterator&& oOther) noexcept;
89 FeatureIterator& operator++();
90 bool operator!=(
const FeatureIterator& it)
const;
94 friend inline FeatureIterator
end(
OGRLayer* poLayer);
100 int m_bFilterIsEnvelope;
102 OGRPreparedGeometry *m_pPreparedFilterGeom;
104 int m_iGeomFieldFilter;
120 struct ArrowArrayStreamPrivateData
122 bool m_bArrowArrayStreamInProgress =
false;
125 std::shared_ptr<ArrowArrayStreamPrivateData> m_poSharedArrowArrayStreamPrivateData{};
126 struct ArrowArrayStreamPrivateDataSharedDataWrapper
128 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
132 friend class OGRArrowArrayHelper;
133 static void ReleaseArray(
struct ArrowArray* array);
134 static void ReleaseSchema(
struct ArrowSchema* schema);
135 static void ReleaseStream(
struct ArrowArrayStream* stream);
136 virtual int GetArrowSchema(
struct ArrowArrayStream*,
struct ArrowSchema* out_schema);
137 virtual int GetNextArrowArray(
struct ArrowArrayStream*,
struct ArrowArray* out_array);
138 static int StaticGetArrowSchema(
struct ArrowArrayStream*,
struct ArrowSchema* out_schema);
139 static int StaticGetNextArrowArray(
struct ArrowArrayStream*,
struct ArrowArray* out_array);
140 static const char* GetLastErrorArrowArrayStream(
struct ArrowArrayStream*);
156 FeatureIterator
begin();
159 FeatureIterator
end();
163 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
164 double dfMaxX,
double dfMaxY );
166 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry * );
167 virtual void SetSpatialFilterRect(
int iGeomField,
168 double dfMinX,
double dfMinY,
169 double dfMaxX,
double dfMaxY );
171 virtual OGRErr SetAttributeFilter(
const char * );
173 virtual void ResetReading() = 0;
179 virtual bool GetArrowStream(
struct ArrowArrayStream* out_stream,
188 virtual const char *GetName();
191 virtual int FindFieldIndex(
const char *pszFieldName,
int bExactMatch );
195 virtual GIntBig GetFeatureCount(
int bForce = TRUE );
200 virtual int TestCapability(
const char * ) = 0;
205 int bApproxOK = TRUE );
206 virtual OGRErr DeleteField(
int iField );
207 virtual OGRErr ReorderFields(
int* panMap );
208 virtual OGRErr AlterFieldDefn(
int iField,
OGRFieldDefn* poNewFieldDefn,
int nFlagsIn );
209 virtual OGRErr AlterGeomFieldDefn(
int iGeomField,
const OGRGeomFieldDefn* poNewGeomFieldDefn,
int nFlagsIn );
212 int bApproxOK = TRUE );
214 virtual OGRErr SyncToDisk();
217 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable );
223 virtual OGRErr RollbackTransaction();
225 virtual const char *GetFIDColumn();
226 virtual const char *GetGeometryColumn();
228 virtual OGRErr SetIgnoredFields(
const char **papszFields );
231 GDALProgressFunc pfnProgress,
void* pProgressData);
235 char** papszOptions =
nullptr,
236 GDALProgressFunc pfnProgress =
nullptr,
237 void * pProgressArg =
nullptr );
240 char** papszOptions =
nullptr,
241 GDALProgressFunc pfnProgress =
nullptr,
242 void * pProgressArg =
nullptr );
246 GDALProgressFunc pfnProgress,
247 void * pProgressArg );
250 char** papszOptions =
nullptr,
251 GDALProgressFunc pfnProgress =
nullptr,
252 void * pProgressArg =
nullptr );
255 char** papszOptions =
nullptr,
256 GDALProgressFunc pfnProgress =
nullptr,
257 void * pProgressArg =
nullptr );
260 char** papszOptions =
nullptr,
261 GDALProgressFunc pfnProgress =
nullptr,
262 void * pProgressArg =
nullptr );
265 char** papszOptions =
nullptr,
266 GDALProgressFunc pfnProgress =
nullptr,
267 void * pProgressArg =
nullptr );
271 int GetRefCount()
const;
277 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos );
280 int AttributeFilterEvaluationNeedsGeometry();
283 OGRErr InitializeIndexSupport(
const char * );
284 OGRLayerAttrIndex *GetIndex() {
return m_poAttrIndex; }
285 int GetGeomFieldFilter()
const {
return m_iGeomFieldFilter; }
286 const char *GetAttrQueryString()
const {
return m_pszAttrQueryString; }
293 {
return reinterpret_cast<OGRLayerH>(poLayer); }
299 {
return reinterpret_cast<OGRLayer*
>(hLayer); }
304 OGRFeatureQuery *m_poAttrQuery;
305 char *m_pszAttrQueryString;
306 OGRLayerAttrIndex *m_poAttrIndex;
330 inline OGRLayer::FeatureIterator
end(
OGRLayer* poLayer) {
return poLayer->
end(); }
356 const auto poThis =
static_cast<BaseLayer*
>(
this);
359 OGRFeature *poFeature = poThis->GetNextRawFeature();
360 if (poFeature ==
nullptr)
363 if((poThis->m_poFilterGeom ==
nullptr
365 && (poThis->m_poAttrQuery ==
nullptr
366 || poThis->m_poAttrQuery->Evaluate( poFeature )) )
377 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
379 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
381 OGRFeature* GetNextFeature() override { return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); }
412 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
414 static void DestroyDataSource(
OGRDataSource * ) OGR_DEPRECATED(
"Use GDALDataset class instead");
446 virtual const char *GetName() OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
448 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate=FALSE ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
450 virtual int TestCapability(
const char *pszCap ) OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
452 virtual OGRDataSource *CreateDataSource(
const char *pszName,
453 char ** =
nullptr ) OGR_DEPRECATED(
"Use GDALDriver class instead");
454 virtual OGRErr DeleteDataSource(
const char *pszName ) OGR_DEPRECATED(
"Use GDALDriver class instead");
484 const char * pszName,
485 char ** papszOptions );
487 const char * pszName );
491 static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
494 void RegisterDriver(
OGRSFDriver * poDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
497 int GetDriverCount(
void ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
499 GDALDriver *GetDriver(
int iDriver ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
501 GDALDriver *GetDriverByName(
const char * ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
504 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
506 OGRDataSource *GetOpenDS(
int ) OGR_DEPRECATED(
"Use GDALDriverManager class instead");
516 void OGRRegisterAllInternal();
518 void CPL_DLL RegisterOGRFileGDB();
519 void CPL_DLL RegisterOGRShape();
520 void CPL_DLL RegisterOGRNTF();
521 void CPL_DLL RegisterOGRSDTS();
522 void CPL_DLL RegisterOGRTiger();
523 void CPL_DLL RegisterOGRS57();
524 void CPL_DLL RegisterOGRTAB();
525 void CPL_DLL RegisterOGRMIF();
526 void CPL_DLL RegisterOGROGDI();
527 void CPL_DLL RegisterOGRODBC();
528 void CPL_DLL RegisterOGRWAsP();
529 void CPL_DLL RegisterOGRPG();
530 void CPL_DLL RegisterOGRMSSQLSpatial();
531 void CPL_DLL RegisterOGRMySQL();
532 void CPL_DLL RegisterOGROCI();
533 void CPL_DLL RegisterOGRDGN();
534 void CPL_DLL RegisterOGRGML();
535 void CPL_DLL RegisterOGRLIBKML();
536 void CPL_DLL RegisterOGRKML();
537 void CPL_DLL RegisterOGRFlatGeobuf();
538 void CPL_DLL RegisterOGRGeoJSON();
539 void CPL_DLL RegisterOGRGeoJSONSeq();
540 void CPL_DLL RegisterOGRESRIJSON();
541 void CPL_DLL RegisterOGRTopoJSON();
542 void CPL_DLL RegisterOGRAVCBin();
543 void CPL_DLL RegisterOGRAVCE00();
544 void CPL_DLL RegisterOGRMEM();
545 void CPL_DLL RegisterOGRVRT();
546 void CPL_DLL RegisterOGRSQLite();
547 void CPL_DLL RegisterOGRCSV();
548 void CPL_DLL RegisterOGRILI1();
549 void CPL_DLL RegisterOGRILI2();
550 void CPL_DLL RegisterOGRPGeo();
551 void CPL_DLL RegisterOGRDXF();
552 void CPL_DLL RegisterOGRCAD();
553 void CPL_DLL RegisterOGRDWG();
554 void CPL_DLL RegisterOGRDGNV8();
555 void CPL_DLL RegisterOGRIDB();
556 void CPL_DLL RegisterOGRGMT();
557 void CPL_DLL RegisterOGRGPX();
558 void CPL_DLL RegisterOGRGeoconcept();
559 void CPL_DLL RegisterOGRNAS();
560 void CPL_DLL RegisterOGRGeoRSS();
561 void CPL_DLL RegisterOGRVFK();
562 void CPL_DLL RegisterOGRPGDump();
563 void CPL_DLL RegisterOGROSM();
564 void CPL_DLL RegisterOGRGPSBabel();
565 void CPL_DLL RegisterOGRPDS();
566 void CPL_DLL RegisterOGRWFS();
567 void CPL_DLL RegisterOGROAPIF();
568 void CPL_DLL RegisterOGRSOSI();
569 void CPL_DLL RegisterOGREDIGEO();
570 void CPL_DLL RegisterOGRSVG();
571 void CPL_DLL RegisterOGRIdrisi();
572 void CPL_DLL RegisterOGRXLS();
573 void CPL_DLL RegisterOGRODS();
574 void CPL_DLL RegisterOGRXLSX();
575 void CPL_DLL RegisterOGRElastic();
576 void CPL_DLL RegisterOGRGeoPackage();
577 void CPL_DLL RegisterOGRCarto();
578 void CPL_DLL RegisterOGRAmigoCloud();
579 void CPL_DLL RegisterOGRSXF();
580 void CPL_DLL RegisterOGROpenFileGDB();
581 void CPL_DLL RegisterOGRSelafin();
582 void CPL_DLL RegisterOGRJML();
583 void CPL_DLL RegisterOGRPLSCENES();
584 void CPL_DLL RegisterOGRCSW();
585 void CPL_DLL RegisterOGRMongoDBv3();
586 void CPL_DLL RegisterOGRVDV();
587 void CPL_DLL RegisterOGRGMLAS();
588 void CPL_DLL RegisterOGRMVT();
589 void CPL_DLL RegisterOGRNGW();
590 void CPL_DLL RegisterOGRMapML();
591 void CPL_DLL RegisterOGRLVBAG();
592 void CPL_DLL RegisterOGRHANA();
593 void CPL_DLL RegisterOGRParquet();
594 void CPL_DLL RegisterOGRArrow();