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)
50 #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
52 #define OGR_DEPRECATED(x)
56 class OGRLayerAttrIndex;
59 struct ArrowArrayStream;
77 std::unique_ptr<Private> m_poPrivate;
79 void ConvertGeomsIfNecessary(
OGRFeature *poFeature);
81 class CPL_DLL FeatureIterator
84 std::unique_ptr<Private> m_poPrivate;
87 FeatureIterator(
OGRLayer *poLayer,
bool bStart);
89 FeatureIterator &&oOther) noexcept;
93 FeatureIterator &operator++();
94 bool operator!=(
const FeatureIterator &it)
const;
98 friend inline FeatureIterator
end(
OGRLayer *poLayer);
104 int m_bFilterIsEnvelope;
106 OGRPreparedGeometry *m_pPreparedFilterGeom;
109 int m_iGeomFieldFilter;
124 IUpdateFeature(
OGRFeature *poFeature,
int nUpdatedFieldsCount,
125 const int *panUpdatedFieldsIdx,
int nUpdatedGeomFieldsCount,
126 const int *panUpdatedGeomFieldsIdx,
131 struct ArrowArrayStreamPrivateData
133 bool m_bArrowArrayStreamInProgress =
false;
136 std::vector<GIntBig> m_anQueriedFIDs{};
137 size_t m_iQueriedFIDS = 0;
138 std::deque<std::unique_ptr<OGRFeature>> m_oFeatureQueue{};
140 std::shared_ptr<ArrowArrayStreamPrivateData>
141 m_poSharedArrowArrayStreamPrivateData{};
142 struct ArrowArrayStreamPrivateDataSharedDataWrapper
144 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
148 friend class OGRArrowArrayHelper;
149 static void ReleaseArray(
struct ArrowArray *array);
150 static void ReleaseSchema(
struct ArrowSchema *schema);
151 static void ReleaseStream(
struct ArrowArrayStream *stream);
152 virtual int GetArrowSchema(
struct ArrowArrayStream *,
153 struct ArrowSchema *out_schema);
154 virtual int GetNextArrowArray(
struct ArrowArrayStream *,
155 struct ArrowArray *out_array);
156 static int StaticGetArrowSchema(
struct ArrowArrayStream *,
157 struct ArrowSchema *out_schema);
158 static int StaticGetNextArrowArray(
struct ArrowArrayStream *,
159 struct ArrowArray *out_array);
160 static const char *GetLastErrorArrowArrayStream(
struct ArrowArrayStream *);
162 static struct ArrowSchema *
164 const char *pszArrowFormat,
165 const char *pszExtensionName);
168 CanPostFilterArrowArray(
const struct ArrowSchema *schema)
const;
169 void PostFilterArrowArray(
const struct ArrowSchema *schema,
170 struct ArrowArray *array,
174 bool CreateFieldFromArrowSchemaInternal(
const struct ArrowSchema *schema,
175 const std::string &osFieldPrefix,
193 FeatureIterator
begin();
196 FeatureIterator
end();
200 virtual void SetSpatialFilterRect(
double dfMinX,
double dfMinY,
201 double dfMaxX,
double dfMaxY);
203 virtual void SetSpatialFilter(
int iGeomField,
OGRGeometry *);
204 virtual void SetSpatialFilterRect(
int iGeomField,
double dfMinX,
205 double dfMinY,
double dfMaxX,
208 virtual OGRErr SetAttributeFilter(
const char *);
210 virtual void ResetReading() = 0;
216 virtual bool GetArrowStream(
struct ArrowArrayStream *out_stream,
218 virtual bool IsArrowSchemaSupported(
const struct ArrowSchema *schema,
220 std::string &osErrorMsg)
const;
222 CreateFieldFromArrowSchema(
const struct ArrowSchema *schema,
224 virtual bool WriteArrowBatch(
const struct ArrowSchema *schema,
225 struct ArrowArray *array,
232 const int *panUpdatedFieldsIdx,
233 int nUpdatedGeomFieldsCount,
234 const int *panUpdatedGeomFieldsIdx,
239 virtual const char *GetName();
242 virtual int FindFieldIndex(
const char *pszFieldName,
int bExactMatch);
248 std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
251 GetSupportedSRSList(
int iGeomField);
252 virtual OGRErr SetActiveSRS(
int iGeomField,
255 virtual GIntBig GetFeatureCount(
int bForce = TRUE);
261 virtual int TestCapability(
const char *) = 0;
266 virtual OGRErr DeleteField(
int iField);
267 virtual OGRErr ReorderFields(
int *panMap);
271 AlterGeomFieldDefn(
int iGeomField,
276 int bApproxOK = TRUE);
278 virtual OGRErr SyncToDisk();
281 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
287 virtual
OGRErr RollbackTransaction();
289 virtual const
char *GetFIDColumn();
290 virtual const
char *GetGeometryColumn();
292 virtual
OGRErr SetIgnoredFields(const
char **papszFields);
295 GetGeometryTypes(
int iGeomField,
int nFlagsGGT,
int &nEntryCountOut,
296 GDALProgressFunc pfnProgress,
void *pProgressData);
299 char **papszOptions =
nullptr,
300 GDALProgressFunc pfnProgress =
nullptr,
301 void *pProgressArg =
nullptr);
303 char **papszOptions =
nullptr,
304 GDALProgressFunc pfnProgress =
nullptr,
305 void *pProgressArg =
nullptr);
307 char **papszOptions, GDALProgressFunc pfnProgress,
310 char **papszOptions =
nullptr,
311 GDALProgressFunc pfnProgress =
nullptr,
312 void *pProgressArg =
nullptr);
314 char **papszOptions =
nullptr,
315 GDALProgressFunc pfnProgress =
nullptr,
316 void *pProgressArg =
nullptr);
318 char **papszOptions =
nullptr,
319 GDALProgressFunc pfnProgress =
nullptr,
320 void *pProgressArg =
nullptr);
322 char **papszOptions =
nullptr,
323 GDALProgressFunc pfnProgress =
nullptr,
324 void *pProgressArg =
nullptr);
328 int GetRefCount() const;
334 OGRErr ReorderField(
int iOldFieldPos,
int iNewFieldPos);
337 int AttributeFilterEvaluationNeedsGeometry();
340 OGRErr InitializeIndexSupport(const
char *);
341 OGRLayerAttrIndex *GetIndex()
343 return m_poAttrIndex;
345 int GetGeomFieldFilter()
const
347 return m_iGeomFieldFilter;
349 const char *GetAttrQueryString()
const
351 return m_pszAttrQueryString;
360 return reinterpret_cast<OGRLayerH>(poLayer);
368 return reinterpret_cast<OGRLayer *
>(hLayer);
372 bool FilterWKBGeometry(
const GByte *pabyWKB,
size_t nWKBSize,
373 bool bEnvelopeAlreadySet,
380 static constexpr
const char *DEFAULT_ARROW_FID_NAME =
"OGC_FID";
385 static constexpr
const char *DEFAULT_ARROW_GEOMETRY_NAME =
"wkb_geometry";
390 OGRFeatureQuery *m_poAttrQuery;
391 char *m_pszAttrQueryString;
392 OGRLayerAttrIndex *m_poAttrIndex;
413 return poLayer->
begin();
421 return poLayer->
end();
448 const auto poThis =
static_cast<BaseLayer *
>(
this);
451 OGRFeature *poFeature = poThis->GetNextRawFeature();
452 if (poFeature ==
nullptr)
455 if ((poThis->m_poFilterGeom ==
nullptr ||
457 (poThis->m_poAttrQuery ==
nullptr ||
458 poThis->m_poAttrQuery->Evaluate(poFeature)))
469 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
471 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
474 OGRFeature *GetNextFeature() override \
476 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
507 virtual const char *GetName()
508 OGR_DEPRECATED(
"Use GDALDataset class instead") = 0;
511 OGR_DEPRECATED(
"Use GDALDataset class instead");
543 virtual const char *GetName()
544 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
546 virtual OGRDataSource *Open(
const char *pszName,
int bUpdate = FALSE)
547 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
549 virtual int TestCapability(
const char *pszCap)
550 OGR_DEPRECATED(
"Use GDALDriver class instead") = 0;
554 OGR_DEPRECATED(
"Use GDALDriver class instead");
555 virtual OGRErr DeleteDataSource(
const char *pszName)
556 OGR_DEPRECATED(
"Use GDALDriver class instead");
587 char **papszOptions);
593 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
597 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
600 int GetDriverCount(
void)
601 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
604 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
607 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
610 int GetOpenDSCount() OGR_DEPRECATED(
"Use GDALDriverManager class instead");
613 OGR_DEPRECATED(
"Use GDALDriverManager class instead");
623 void OGRRegisterAllInternal();
625 void CPL_DLL RegisterOGRFileGDB();
626 void CPL_DLL RegisterOGRShape();
627 void CPL_DLL RegisterOGRNTF();
628 void CPL_DLL RegisterOGRSDTS();
629 void CPL_DLL RegisterOGRTiger();
630 void CPL_DLL RegisterOGRS57();
631 void CPL_DLL RegisterOGRTAB();
632 void CPL_DLL RegisterOGRMIF();
633 void CPL_DLL RegisterOGROGDI();
634 void CPL_DLL RegisterOGRODBC();
635 void CPL_DLL RegisterOGRWAsP();
636 void CPL_DLL RegisterOGRPG();
637 void CPL_DLL RegisterOGRMSSQLSpatial();
638 void CPL_DLL RegisterOGRMySQL();
639 void CPL_DLL RegisterOGROCI();
640 void CPL_DLL RegisterOGRDGN();
641 void CPL_DLL RegisterOGRGML();
642 void CPL_DLL RegisterOGRLIBKML();
643 void CPL_DLL RegisterOGRKML();
644 void CPL_DLL RegisterOGRFlatGeobuf();
645 void CPL_DLL RegisterOGRGeoJSON();
646 void CPL_DLL RegisterOGRGeoJSONSeq();
647 void CPL_DLL RegisterOGRESRIJSON();
648 void CPL_DLL RegisterOGRTopoJSON();
649 void CPL_DLL RegisterOGRAVCBin();
650 void CPL_DLL RegisterOGRAVCE00();
651 void CPL_DLL RegisterOGRMEM();
652 void CPL_DLL RegisterOGRVRT();
653 void CPL_DLL RegisterOGRSQLite();
654 void CPL_DLL RegisterOGRCSV();
655 void CPL_DLL RegisterOGRILI1();
656 void CPL_DLL RegisterOGRILI2();
657 void CPL_DLL RegisterOGRPGeo();
658 void CPL_DLL RegisterOGRDXF();
659 void CPL_DLL RegisterOGRCAD();
660 void CPL_DLL RegisterOGRDWG();
661 void CPL_DLL RegisterOGRDGNV8();
662 void CPL_DLL RegisterOGRIDB();
663 void CPL_DLL RegisterOGRGMT();
664 void CPL_DLL RegisterOGRGPX();
665 void CPL_DLL RegisterOGRGeoconcept();
666 void CPL_DLL RegisterOGRNAS();
667 void CPL_DLL RegisterOGRGeoRSS();
668 void CPL_DLL RegisterOGRVFK();
669 void CPL_DLL RegisterOGRPGDump();
670 void CPL_DLL RegisterOGROSM();
671 void CPL_DLL RegisterOGRGPSBabel();
672 void CPL_DLL RegisterOGRPDS();
673 void CPL_DLL RegisterOGRWFS();
674 void CPL_DLL RegisterOGROAPIF();
675 void CPL_DLL RegisterOGRSOSI();
676 void CPL_DLL RegisterOGREDIGEO();
677 void CPL_DLL RegisterOGRSVG();
678 void CPL_DLL RegisterOGRIdrisi();
679 void CPL_DLL RegisterOGRXLS();
680 void CPL_DLL RegisterOGRODS();
681 void CPL_DLL RegisterOGRXLSX();
682 void CPL_DLL RegisterOGRElastic();
683 void CPL_DLL RegisterOGRGeoPackage();
684 void CPL_DLL RegisterOGRCarto();
685 void CPL_DLL RegisterOGRAmigoCloud();
686 void CPL_DLL RegisterOGRSXF();
687 void CPL_DLL RegisterOGROpenFileGDB();
688 void CPL_DLL RegisterOGRSelafin();
689 void CPL_DLL RegisterOGRJML();
690 void CPL_DLL RegisterOGRPLSCENES();
691 void CPL_DLL RegisterOGRCSW();
692 void CPL_DLL RegisterOGRMongoDBv3();
693 void CPL_DLL RegisterOGRVDV();
694 void CPL_DLL RegisterOGRGMLAS();
695 void CPL_DLL RegisterOGRMVT();
696 void CPL_DLL RegisterOGRNGW();
697 void CPL_DLL RegisterOGRMapML();
698 void CPL_DLL RegisterOGRLVBAG();
699 void CPL_DLL RegisterOGRHANA();
700 void CPL_DLL RegisterOGRParquet();
701 void CPL_DLL RegisterOGRArrow();
702 void CPL_DLL RegisterOGRGTFS();
703 void CPL_DLL RegisterOGRPMTiles();
704 void CPL_DLL RegisterOGRJSONFG();