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;
86 FeatureIterator(
OGRLayer *poLayer,
bool bStart);
88 FeatureIterator &&oOther) noexcept;
92 FeatureIterator &operator++();
93 bool operator!=(
const FeatureIterator &it)
const;
97 friend inline FeatureIterator
end(
OGRLayer *poLayer);
103 int m_bFilterIsEnvelope;
105 OGRPreparedGeometry *m_pPreparedFilterGeom;
108 int m_iGeomFieldFilter;
123 IUpdateFeature(
OGRFeature *poFeature,
int nUpdatedFieldsCount,
124 const int *panUpdatedFieldsIdx,
int nUpdatedGeomFieldsCount,
125 const int *panUpdatedGeomFieldsIdx,
130 struct ArrowArrayStreamPrivateData
132 bool m_bArrowArrayStreamInProgress =
false;
135 std::shared_ptr<ArrowArrayStreamPrivateData>
136 m_poSharedArrowArrayStreamPrivateData{};
137 struct ArrowArrayStreamPrivateDataSharedDataWrapper
139 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
143 friend class OGRArrowArrayHelper;
144 static void ReleaseArray(
struct ArrowArray *array);
145 static void ReleaseSchema(
struct ArrowSchema *schema);
146 static void ReleaseStream(
struct ArrowArrayStream *stream);
147 virtual int GetArrowSchema(
struct ArrowArrayStream *,
148 struct ArrowSchema *out_schema);
149 virtual int GetNextArrowArray(
struct ArrowArrayStream *,
150 struct ArrowArray *out_array);
151 static int StaticGetArrowSchema(
struct ArrowArrayStream *,
152 struct ArrowSchema *out_schema);
153 static int StaticGetNextArrowArray(
struct ArrowArrayStream *,
154 struct ArrowArray *out_array);
155 static const char *GetLastErrorArrowArrayStream(
struct ArrowArrayStream *);
171 FeatureIterator
begin();
174 FeatureIterator
end();
178 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
179 double dfMaxX,
double dfMaxY);
181 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry *);
182 virtual void SetSpatialFilterRect(
int iGeomField,
double dfMinX,
183 double dfMinY,
double dfMaxX,
186 virtual OGRErr SetAttributeFilter(
const char *);
188 virtual void ResetReading() = 0;
194 virtual bool GetArrowStream(
struct ArrowArrayStream *out_stream,
201 const int *panUpdatedFieldsIdx,
202 int nUpdatedGeomFieldsCount,
203 const int *panUpdatedGeomFieldsIdx,
208 virtual const char *GetName();
211 virtual int FindFieldIndex(
const char *pszFieldName,
int bExactMatch);
217 std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
220 GetSupportedSRSList(
int iGeomField);
221 virtual OGRErr SetActiveSRS(
int iGeomField,
224 virtual GIntBig GetFeatureCount(
int bForce = TRUE);
230 virtual int TestCapability(
const char *) = 0;
235 virtual OGRErr DeleteField(
int iField);
236 virtual OGRErr ReorderFields(
int *panMap);
240 AlterGeomFieldDefn(
int iGeomField,
245 int bApproxOK = TRUE);
247 virtual OGRErr SyncToDisk();
250 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
256 virtual
OGRErr RollbackTransaction();
258 virtual const
char *GetFIDColumn();
259 virtual const
char *GetGeometryColumn();
261 virtual
OGRErr SetIgnoredFields(const
char **papszFields);
264 GetGeometryTypes(
int iGeomField,
int nFlagsGGT,
int &nEntryCountOut,
265 GDALProgressFunc pfnProgress,
void *pProgressData);
268 char **papszOptions =
nullptr,
269 GDALProgressFunc pfnProgress =
nullptr,
270 void *pProgressArg =
nullptr);
272 char **papszOptions =
nullptr,
273 GDALProgressFunc pfnProgress =
nullptr,
274 void *pProgressArg =
nullptr);
276 char **papszOptions, GDALProgressFunc pfnProgress,
279 char **papszOptions =
nullptr,
280 GDALProgressFunc pfnProgress =
nullptr,
281 void *pProgressArg =
nullptr);
283 char **papszOptions =
nullptr,
284 GDALProgressFunc pfnProgress =
nullptr,
285 void *pProgressArg =
nullptr);
287 char **papszOptions =
nullptr,
288 GDALProgressFunc pfnProgress =
nullptr,
289 void *pProgressArg =
nullptr);
291 char **papszOptions =
nullptr,
292 GDALProgressFunc pfnProgress =
nullptr,
293 void *pProgressArg =
nullptr);
297 int GetRefCount() const;
303 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos);
306 int AttributeFilterEvaluationNeedsGeometry();
309 OGRErr InitializeIndexSupport(const
char *);
310 OGRLayerAttrIndex *GetIndex()
312 return m_poAttrIndex;
314 int GetGeomFieldFilter()
const
316 return m_iGeomFieldFilter;
318 const char *GetAttrQueryString()
const
320 return m_pszAttrQueryString;
329 return reinterpret_cast<OGRLayerH>(poLayer);
337 return reinterpret_cast<OGRLayer *
>(hLayer);
343 OGRFeatureQuery *m_poAttrQuery;
344 char *m_pszAttrQueryString;
345 OGRLayerAttrIndex *m_poAttrIndex;
366 return poLayer->
begin();
374 return poLayer->
end();
401 const auto poThis =
static_cast<BaseLayer *
>(
this);
404 OGRFeature *poFeature = poThis->GetNextRawFeature();
405 if (poFeature ==
nullptr)
408 if ((poThis->m_poFilterGeom ==
nullptr ||
410 (poThis->m_poAttrQuery ==
nullptr ||
411 poThis->m_poAttrQuery->Evaluate(poFeature)))
422 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
424 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
427 OGRFeature *GetNextFeature() override \
429 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
460 virtual const char *GetName()
461 OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
464 OGR_DEPRECATED(
"Use GDALDataset class instead");
496 virtual const char *GetName()
497 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
499 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate = FALSE)
500 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
502 virtual int TestCapability(
const char *pszCap)
503 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
507 OGR_DEPRECATED(
"Use GDALDriver class instead");
508 virtual OGRErr DeleteDataSource(
const char *pszName)
509 OGR_DEPRECATED(
"Use GDALDriver class instead");
540 char **papszOptions);
546 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
550 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
553 int GetDriverCount(
void)
554 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
557 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
560 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
563 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
566 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
576 void OGRRegisterAllInternal();
578 void CPL_DLL RegisterOGRFileGDB();
579 void CPL_DLL RegisterOGRShape();
580 void CPL_DLL RegisterOGRNTF();
581 void CPL_DLL RegisterOGRSDTS();
582 void CPL_DLL RegisterOGRTiger();
583 void CPL_DLL RegisterOGRS57();
584 void CPL_DLL RegisterOGRTAB();
585 void CPL_DLL RegisterOGRMIF();
586 void CPL_DLL RegisterOGROGDI();
587 void CPL_DLL RegisterOGRODBC();
588 void CPL_DLL RegisterOGRWAsP();
589 void CPL_DLL RegisterOGRPG();
590 void CPL_DLL RegisterOGRMSSQLSpatial();
591 void CPL_DLL RegisterOGRMySQL();
592 void CPL_DLL RegisterOGROCI();
593 void CPL_DLL RegisterOGRDGN();
594 void CPL_DLL RegisterOGRGML();
595 void CPL_DLL RegisterOGRLIBKML();
596 void CPL_DLL RegisterOGRKML();
597 void CPL_DLL RegisterOGRFlatGeobuf();
598 void CPL_DLL RegisterOGRGeoJSON();
599 void CPL_DLL RegisterOGRGeoJSONSeq();
600 void CPL_DLL RegisterOGRESRIJSON();
601 void CPL_DLL RegisterOGRTopoJSON();
602 void CPL_DLL RegisterOGRAVCBin();
603 void CPL_DLL RegisterOGRAVCE00();
604 void CPL_DLL RegisterOGRMEM();
605 void CPL_DLL RegisterOGRVRT();
606 void CPL_DLL RegisterOGRSQLite();
607 void CPL_DLL RegisterOGRCSV();
608 void CPL_DLL RegisterOGRILI1();
609 void CPL_DLL RegisterOGRILI2();
610 void CPL_DLL RegisterOGRPGeo();
611 void CPL_DLL RegisterOGRDXF();
612 void CPL_DLL RegisterOGRCAD();
613 void CPL_DLL RegisterOGRDWG();
614 void CPL_DLL RegisterOGRDGNV8();
615 void CPL_DLL RegisterOGRIDB();
616 void CPL_DLL RegisterOGRGMT();
617 void CPL_DLL RegisterOGRGPX();
618 void CPL_DLL RegisterOGRGeoconcept();
619 void CPL_DLL RegisterOGRNAS();
620 void CPL_DLL RegisterOGRGeoRSS();
621 void CPL_DLL RegisterOGRVFK();
622 void CPL_DLL RegisterOGRPGDump();
623 void CPL_DLL RegisterOGROSM();
624 void CPL_DLL RegisterOGRGPSBabel();
625 void CPL_DLL RegisterOGRPDS();
626 void CPL_DLL RegisterOGRWFS();
627 void CPL_DLL RegisterOGROAPIF();
628 void CPL_DLL RegisterOGRSOSI();
629 void CPL_DLL RegisterOGREDIGEO();
630 void CPL_DLL RegisterOGRSVG();
631 void CPL_DLL RegisterOGRIdrisi();
632 void CPL_DLL RegisterOGRXLS();
633 void CPL_DLL RegisterOGRODS();
634 void CPL_DLL RegisterOGRXLSX();
635 void CPL_DLL RegisterOGRElastic();
636 void CPL_DLL RegisterOGRGeoPackage();
637 void CPL_DLL RegisterOGRCarto();
638 void CPL_DLL RegisterOGRAmigoCloud();
639 void CPL_DLL RegisterOGRSXF();
640 void CPL_DLL RegisterOGROpenFileGDB();
641 void CPL_DLL RegisterOGRSelafin();
642 void CPL_DLL RegisterOGRJML();
643 void CPL_DLL RegisterOGRPLSCENES();
644 void CPL_DLL RegisterOGRCSW();
645 void CPL_DLL RegisterOGRMongoDBv3();
646 void CPL_DLL RegisterOGRVDV();
647 void CPL_DLL RegisterOGRGMLAS();
648 void CPL_DLL RegisterOGRMVT();
649 void CPL_DLL RegisterOGRNGW();
650 void CPL_DLL RegisterOGRMapML();
651 void CPL_DLL RegisterOGRLVBAG();
652 void CPL_DLL RegisterOGRHANA();
653 void CPL_DLL RegisterOGRParquet();
654 void CPL_DLL RegisterOGRArrow();
655 void CPL_DLL RegisterOGRGTFS();