GDAL
ogrsf_frmts.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Project: OpenGIS Simple Features Reference Implementation
4 * Purpose: Classes related to format registration, and file opening.
5 * Author: Frank Warmerdam, warmerda@home.com
6 *
7 ******************************************************************************
8 * Copyright (c) 1999, Les Technologies SoftMap Inc.
9 * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com>
10 *
11 * SPDX-License-Identifier: MIT
12 ****************************************************************************/
13
14#ifndef OGRSF_FRMTS_H_INCLUDED
15#define OGRSF_FRMTS_H_INCLUDED
16
17#include "cpl_progress.h"
18#include "ogr_feature.h"
19#include "ogr_featurestyle.h"
20#include "gdal_priv.h"
21
22#include <memory>
23#include <deque>
24
32#if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
33#define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
34#else
35#define OGR_DEPRECATED(x)
36#endif
37
38#ifndef CPPCHECK_STATIC
39#define CPPCHECK_STATIC
40#endif
42
43class OGRLayerAttrIndex;
44class OGRSFDriver;
45
46struct ArrowArrayStream;
47
48/************************************************************************/
49/* OGRLayer */
50/************************************************************************/
51
57/* Note: any virtual method added to this class must also be added in the */
58/* OGRLayerDecorator and OGRMutexedLayer classes. */
59
60class CPL_DLL OGRLayer : public GDALMajorObject
61{
62 private:
63 struct Private;
64 std::unique_ptr<Private> m_poPrivate;
65
66 void ConvertGeomsIfNecessary(OGRFeature *poFeature);
67
68 class CPL_DLL FeatureIterator
69 {
70 struct Private;
71 std::unique_ptr<Private> m_poPrivate;
72
73 public:
74 FeatureIterator(OGRLayer *poLayer, bool bStart);
75 FeatureIterator(
76 FeatureIterator &&oOther) noexcept; // declared but not defined.
77 // Needed for gcc 5.4 at least
78 ~FeatureIterator();
79 OGRFeatureUniquePtr &operator*();
80 FeatureIterator &operator++();
81 bool operator!=(const FeatureIterator &it) const;
82 };
83
84 friend inline FeatureIterator begin(OGRLayer *poLayer);
85 friend inline FeatureIterator end(OGRLayer *poLayer);
86
88
89 protected:
91 int m_bFilterIsEnvelope;
92 OGRGeometry *m_poFilterGeom;
93 OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a
94 prepared geometry */
95 OGREnvelope m_sFilterEnvelope;
96 int m_iGeomFieldFilter; // specify the index on which the spatial
97 // filter is active.
98
99 int FilterGeometry(const OGRGeometry *);
100 // int FilterGeometry( OGRGeometry *, OGREnvelope*
101 // psGeometryEnvelope);
102 int InstallFilter(const OGRGeometry *);
103 bool
104 ValidateGeometryFieldIndexForSetSpatialFilter(int iGeomField,
105 const OGRGeometry *poGeomIn,
106 bool bIsSelectLayer = false);
108
109 virtual OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent,
110 bool bForce) CPL_WARN_UNUSED_RESULT;
111
112 virtual OGRErr IGetExtent3D(int iGeomField, OGREnvelope3D *psExtent3D,
113 bool bForce) CPL_WARN_UNUSED_RESULT;
114
115 virtual OGRErr ISetSpatialFilter(int iGeomField, const OGRGeometry *);
116
117 virtual OGRErr ISetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
118 virtual OGRErr ICreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
119 virtual OGRErr IUpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
120 virtual OGRErr
121 IUpdateFeature(OGRFeature *poFeature, int nUpdatedFieldsCount,
122 const int *panUpdatedFieldsIdx, int nUpdatedGeomFieldsCount,
123 const int *panUpdatedGeomFieldsIdx,
124 bool bUpdateStyleString) CPL_WARN_UNUSED_RESULT;
125
127 CPLStringList m_aosArrowArrayStreamOptions{};
128
129 friend struct OGRGenSQLResultsLayerArrowStreamPrivateData;
130
131 struct ArrowArrayStreamPrivateData
132 {
133 bool m_bArrowArrayStreamInProgress = false;
134 bool m_bEOF = false;
135 OGRLayer *m_poLayer = nullptr;
136 std::vector<GIntBig> m_anQueriedFIDs{};
137 size_t m_iQueriedFIDS = 0;
138 std::deque<std::unique_ptr<OGRFeature>> m_oFeatureQueue{};
139 };
140
141 std::shared_ptr<ArrowArrayStreamPrivateData>
142 m_poSharedArrowArrayStreamPrivateData{};
143
144 struct ArrowArrayStreamPrivateDataSharedDataWrapper
145 {
146 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
147 };
149
150 friend class OGRArrowArrayHelper;
151 friend class OGRGenSQLResultsLayer;
152 static void ReleaseArray(struct ArrowArray *array);
153 static void ReleaseSchema(struct ArrowSchema *schema);
154 static void ReleaseStream(struct ArrowArrayStream *stream);
155 virtual int GetArrowSchema(struct ArrowArrayStream *,
156 struct ArrowSchema *out_schema);
157 virtual int GetNextArrowArray(struct ArrowArrayStream *,
158 struct ArrowArray *out_array);
159 static int StaticGetArrowSchema(struct ArrowArrayStream *,
160 struct ArrowSchema *out_schema);
161 static int StaticGetNextArrowArray(struct ArrowArrayStream *,
162 struct ArrowArray *out_array);
163 static const char *GetLastErrorArrowArrayStream(struct ArrowArrayStream *);
164
165 static struct ArrowSchema *
166 CreateSchemaForWKBGeometryColumn(const OGRGeomFieldDefn *poFieldDefn,
167 const char *pszArrowFormat,
168 const char *pszExtensionName);
169
170 virtual bool
171 CanPostFilterArrowArray(const struct ArrowSchema *schema) const;
172 void PostFilterArrowArray(const struct ArrowSchema *schema,
173 struct ArrowArray *array,
174 CSLConstList papszOptions) const;
175
177 bool CreateFieldFromArrowSchemaInternal(const struct ArrowSchema *schema,
178 const std::string &osFieldPrefix,
179 CSLConstList papszOptions);
181
182 public:
183 OGRLayer();
184 ~OGRLayer() override;
185
195 FeatureIterator begin();
196
198 FeatureIterator end();
199
200 virtual OGRGeometry *GetSpatialFilter();
201
202 OGRErr SetSpatialFilter(const OGRGeometry *);
203 OGRErr SetSpatialFilterRect(double dfMinX, double dfMinY, double dfMaxX,
204 double dfMaxY);
205
206 OGRErr SetSpatialFilter(int iGeomField, const OGRGeometry *);
207 OGRErr SetSpatialFilterRect(int iGeomField, double dfMinX, double dfMinY,
208 double dfMaxX, double dfMaxY);
209
210 virtual OGRErr SetAttributeFilter(const char *);
211
212 virtual void ResetReading() = 0;
214 virtual OGRErr SetNextByIndex(GIntBig nIndex);
215 virtual OGRFeature *GetFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
216
217 virtual GDALDataset *GetDataset();
218 virtual bool GetArrowStream(struct ArrowArrayStream *out_stream,
219 CSLConstList papszOptions = nullptr);
220 virtual bool IsArrowSchemaSupported(const struct ArrowSchema *schema,
221 CSLConstList papszOptions,
222 std::string &osErrorMsg) const;
223 virtual bool
224 CreateFieldFromArrowSchema(const struct ArrowSchema *schema,
225 CSLConstList papszOptions = nullptr);
226 virtual bool WriteArrowBatch(const struct ArrowSchema *schema,
227 struct ArrowArray *array,
228 CSLConstList papszOptions = nullptr);
229
230 OGRErr SetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
231 OGRErr CreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
232 OGRErr UpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
233 OGRErr UpdateFeature(OGRFeature *poFeature, int nUpdatedFieldsCount,
234 const int *panUpdatedFieldsIdx,
235 int nUpdatedGeomFieldsCount,
236 const int *panUpdatedGeomFieldsIdx,
237 bool bUpdateStyleString) CPL_WARN_UNUSED_RESULT;
238
239 virtual OGRErr DeleteFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
240
241 virtual const char *GetName() const;
242 virtual OGRwkbGeometryType GetGeomType() const;
243 virtual const OGRFeatureDefn *GetLayerDefn() const = 0;
244
245 OGRFeatureDefn *GetLayerDefn()
246 {
247 return const_cast<OGRFeatureDefn *>(
248 const_cast<const OGRLayer *>(this)->GetLayerDefn());
249 }
250
251 virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch);
252
253 virtual const OGRSpatialReference *GetSpatialRef() const;
254
256 typedef std::vector<
257 std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
259 virtual const GetSupportedSRSListRetType &
260 GetSupportedSRSList(int iGeomField);
261 virtual OGRErr SetActiveSRS(int iGeomField,
262 const OGRSpatialReference *poSRS);
263
264 virtual GIntBig GetFeatureCount(int bForce = TRUE);
265
266 OGRErr GetExtent(OGREnvelope *psExtent,
267 bool bForce = true) CPL_WARN_UNUSED_RESULT;
268 OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
269 bool bForce = true) CPL_WARN_UNUSED_RESULT;
270
271 OGRErr GetExtent3D(int iGeomField, OGREnvelope3D *psExtent,
272 bool bForce = true) CPL_WARN_UNUSED_RESULT;
273
274 virtual int TestCapability(const char *) const = 0;
275
276 virtual OGRErr Rename(const char *pszNewName) CPL_WARN_UNUSED_RESULT;
277
278 virtual OGRErr CreateField(const OGRFieldDefn *poField,
279 int bApproxOK = TRUE) CPL_WARN_UNUSED_RESULT;
280 virtual OGRErr DeleteField(int iField);
281 virtual OGRErr ReorderFields(int *panMap);
282 virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn,
283 int nFlagsIn);
284 virtual OGRErr
285 AlterGeomFieldDefn(int iGeomField,
286 const OGRGeomFieldDefn *poNewGeomFieldDefn,
287 int nFlagsIn);
288
289 virtual OGRErr CreateGeomField(const OGRGeomFieldDefn *poField,
290 int bApproxOK = TRUE);
291
292 virtual OGRErr SyncToDisk();
293
294 virtual OGRStyleTable *GetStyleTable();
295 virtual void SetStyleTableDirectly(OGRStyleTable *poStyleTable);
296
297 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
298
299 virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
300 virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
301 virtual OGRErr RollbackTransaction();
302
304 // Keep field definitions in sync with transactions
305 virtual void PrepareStartTransaction();
306 // Rollback TO SAVEPOINT if osSavepointName is not empty, otherwise ROLLBACK
307 virtual void FinishRollbackTransaction(const std::string &osSavepointName);
309
310 virtual const char *GetFIDColumn() const;
311 virtual const char *GetGeometryColumn() const;
312
313 virtual OGRErr SetIgnoredFields(CSLConstList papszFields);
314
315 virtual OGRGeometryTypeCounter *
316 GetGeometryTypes(int iGeomField, int nFlagsGGT, int &nEntryCountOut,
317 GDALProgressFunc pfnProgress, void *pProgressData);
318
319 OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
320 char **papszOptions = nullptr,
321 GDALProgressFunc pfnProgress = nullptr,
322 void *pProgressArg = nullptr);
323 OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
324 char **papszOptions = nullptr,
325 GDALProgressFunc pfnProgress = nullptr,
326 void *pProgressArg = nullptr);
327 OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
328 char **papszOptions, GDALProgressFunc pfnProgress,
329 void *pProgressArg);
330 OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
331 char **papszOptions = nullptr,
332 GDALProgressFunc pfnProgress = nullptr,
333 void *pProgressArg = nullptr);
334 OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
335 char **papszOptions = nullptr,
336 GDALProgressFunc pfnProgress = nullptr,
337 void *pProgressArg = nullptr);
338 OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
339 char **papszOptions = nullptr,
340 GDALProgressFunc pfnProgress = nullptr,
341 void *pProgressArg = nullptr);
342 OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
343 char **papszOptions = nullptr,
344 GDALProgressFunc pfnProgress = nullptr,
345 void *pProgressArg = nullptr);
346
347 int Reference();
348 int Dereference();
349 int GetRefCount() const;
351 GIntBig GetFeaturesRead();
353
354 /* non virtual : convenience wrapper for ReorderFields() */
355 OGRErr ReorderField(int iOldFieldPos, int iNewFieldPos);
356
358 int AttributeFilterEvaluationNeedsGeometry();
359
360 /* consider these private */
361 OGRErr InitializeIndexSupport(const char *);
362
363 OGRLayerAttrIndex *GetIndex()
364 {
365 return m_poAttrIndex;
366 }
367
368 int GetGeomFieldFilter() const
369 {
370 return m_iGeomFieldFilter;
371 }
372
373 const char *GetAttrQueryString() const
374 {
375 return m_pszAttrQueryString;
376 }
377
379
382 static inline OGRLayerH ToHandle(OGRLayer *poLayer)
383 {
384 return reinterpret_cast<OGRLayerH>(poLayer);
385 }
386
389 static inline OGRLayer *FromHandle(OGRLayerH hLayer)
390 {
391 return reinterpret_cast<OGRLayer *>(hLayer);
392 }
393
395 bool FilterWKBGeometry(const GByte *pabyWKB, size_t nWKBSize,
396 bool bEnvelopeAlreadySet,
397 OGREnvelope &sEnvelope) const;
398
399 static bool FilterWKBGeometry(const GByte *pabyWKB, size_t nWKBSize,
400 bool bEnvelopeAlreadySet,
401 OGREnvelope &sEnvelope,
402 const OGRGeometry *poFilterGeom,
403 bool bFilterIsEnvelope,
404 const OGREnvelope &sFilterEnvelope,
405 OGRPreparedGeometry *&poPreparedFilterGeom);
407
411 static constexpr const char *DEFAULT_ARROW_FID_NAME = "OGC_FID";
412
416 static constexpr const char *DEFAULT_ARROW_GEOMETRY_NAME = "wkb_geometry";
417
418 protected:
420
421 enum class FieldChangeType : char
422 {
423 ADD_FIELD,
424 ALTER_FIELD,
425 DELETE_FIELD
426 };
427
428 // Store changes to the fields that happened inside a transaction
429 template <typename T> struct FieldDefnChange
430 {
431
432 FieldDefnChange(std::unique_ptr<T> &&poFieldDefnIn, int iFieldIn,
433 FieldChangeType eChangeTypeIn,
434 const std::string &osSavepointNameIn = "")
435 : poFieldDefn(std::move(poFieldDefnIn)), iField(iFieldIn),
436 eChangeType(eChangeTypeIn), osSavepointName(osSavepointNameIn)
437 {
438 }
439
440 std::unique_ptr<T> poFieldDefn;
441 int iField;
442 FieldChangeType eChangeType;
443 std::string osSavepointName;
444 };
445
446 std::vector<FieldDefnChange<OGRFieldDefn>> m_apoFieldDefnChanges{};
447 std::vector<FieldDefnChange<OGRGeomFieldDefn>> m_apoGeomFieldDefnChanges{};
448
449 OGRStyleTable *m_poStyleTable;
450 OGRFeatureQuery *m_poAttrQuery;
451 char *m_pszAttrQueryString;
452 OGRLayerAttrIndex *m_poAttrIndex;
453
454 int m_nRefCount;
455
456 GIntBig m_nFeaturesRead;
458};
459
470inline OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
471{
472 return poLayer->begin();
473}
474
478inline OGRLayer::FeatureIterator end(OGRLayer *poLayer)
479{
480 return poLayer->end();
481}
482
486using OGRLayerUniquePtr = std::unique_ptr<OGRLayer>;
487
488/************************************************************************/
489/* OGRGetNextFeatureThroughRaw */
490/************************************************************************/
491
500template <class BaseLayer> class OGRGetNextFeatureThroughRaw
501{
502 protected:
504
505 public:
509 {
510 const auto poThis = static_cast<BaseLayer *>(this);
511 while (true)
512 {
513 OGRFeature *poFeature = poThis->GetNextRawFeature();
514 if (poFeature == nullptr)
515 return nullptr;
516
517 if ((poThis->m_poFilterGeom == nullptr ||
518 poThis->FilterGeometry(poFeature->GetGeometryRef())) &&
519 (poThis->m_poAttrQuery == nullptr ||
520 poThis->m_poAttrQuery->Evaluate(poFeature)))
521 {
522 return poFeature;
523 }
524 else
525 delete poFeature;
526 }
527 }
528};
529
531#define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
532 private: \
533 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
534 \
535 public: \
536 OGRFeature *GetNextFeature() override \
537 { \
538 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
539 }
540
541/************************************************************************/
542/* OGRDataSource */
543/************************************************************************/
544
564class CPL_DLL OGRDataSource : public GDALDataset
565{
566 public:
568 ~OGRDataSource() override;
569
571 virtual const char *GetName()
572 OGR_DEPRECATED("Use GDALDataset class instead") = 0;
573
574 static void DestroyDataSource(OGRDataSource *)
575 OGR_DEPRECATED("Use GDALDataset class instead");
577};
578
579/************************************************************************/
580/* OGRSFDriver */
581/************************************************************************/
582
601class CPL_DLL OGRSFDriver : public GDALDriver
602{
603 public:
605 ~OGRSFDriver() override;
606
607 virtual const char *GetName()
608 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
609
610 virtual OGRDataSource *Open(const char *pszName, int bUpdate = FALSE)
611 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
612
613 virtual int TestCapability(const char *pszCap)
614 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
615
616 virtual OGRDataSource *CreateDataSource(const char *pszName,
617 char ** = nullptr)
618 OGR_DEPRECATED("Use GDALDriver class instead");
619 virtual OGRErr DeleteDataSource(const char *pszName)
620 OGR_DEPRECATED("Use GDALDriver class instead");
622};
623
624/************************************************************************/
625/* OGRSFDriverRegistrar */
626/************************************************************************/
627
642{
643
646
647 static GDALDataset *OpenWithDriverArg(GDALDriver *poDriver,
648 GDALOpenInfo *poOpenInfo);
649 static GDALDataset *CreateVectorOnly(GDALDriver *poDriver,
650 const char *pszName,
651 char **papszOptions);
652 static CPLErr DeleteDataSource(GDALDriver *poDriver, const char *pszName);
653
654 public:
656 static OGRSFDriverRegistrar *GetRegistrar()
657 OGR_DEPRECATED("Use GDALDriverManager class instead");
658
659 CPPCHECK_STATIC void RegisterDriver(OGRSFDriver *poDriver)
660 OGR_DEPRECATED("Use GDALDriverManager class instead");
661
662 CPPCHECK_STATIC int GetDriverCount(void)
663 OGR_DEPRECATED("Use GDALDriverManager class instead");
664
665 CPPCHECK_STATIC GDALDriver *GetDriver(int iDriver)
666 OGR_DEPRECATED("Use GDALDriverManager class instead");
667
668 CPPCHECK_STATIC GDALDriver *GetDriverByName(const char *)
669 OGR_DEPRECATED("Use GDALDriverManager class instead");
670
671 CPPCHECK_STATIC int GetOpenDSCount()
672 OGR_DEPRECATED("Use GDALDriverManager class instead");
673
674 CPPCHECK_STATIC OGRDataSource *GetOpenDS(int)
675 OGR_DEPRECATED("Use GDALDriverManager class instead");
677};
678
679/* -------------------------------------------------------------------- */
680/* Various available registration methods. */
681/* -------------------------------------------------------------------- */
683
685void OGRRegisterAllInternal();
686
687void CPL_DLL RegisterOGRFileGDB();
688void DeclareDeferredOGRFileGDBPlugin();
689void CPL_DLL RegisterOGRShape();
690void CPL_DLL RegisterOGRS57();
691void CPL_DLL RegisterOGRTAB();
692void CPL_DLL RegisterOGRMIF();
693void CPL_DLL RegisterOGRODBC();
694void DeclareDeferredOGRODBCPlugin();
695void CPL_DLL RegisterOGRWAsP();
696void CPL_DLL RegisterOGRPG();
697void DeclareDeferredOGRPGPlugin();
698void CPL_DLL RegisterOGRMSSQLSpatial();
699void DeclareDeferredOGRMSSQLSpatialPlugin();
700void CPL_DLL RegisterOGRMySQL();
701void DeclareDeferredOGRMySQLPlugin();
702void CPL_DLL RegisterOGROCI();
703void DeclareDeferredOGROCIPlugin();
704void CPL_DLL RegisterOGRDGN();
705void CPL_DLL RegisterOGRGML();
706void CPL_DLL RegisterOGRLIBKML();
707void DeclareDeferredOGRLIBKMLPlugin();
708void CPL_DLL RegisterOGRKML();
709void CPL_DLL RegisterOGRFlatGeobuf();
710void CPL_DLL RegisterOGRGeoJSON();
711void CPL_DLL RegisterOGRGeoJSONSeq();
712void CPL_DLL RegisterOGRESRIJSON();
713void CPL_DLL RegisterOGRTopoJSON();
714void CPL_DLL RegisterOGRAVCBin();
715void CPL_DLL RegisterOGRAVCE00();
716void CPL_DLL RegisterOGRVRT();
717void CPL_DLL RegisterOGRSQLite();
718void CPL_DLL RegisterOGRCSV();
719void CPL_DLL RegisterOGRILI1();
720void CPL_DLL RegisterOGRILI2();
721void CPL_DLL RegisterOGRPGeo();
722void CPL_DLL RegisterOGRDXF();
723void CPL_DLL RegisterOGRCAD();
724void DeclareDeferredOGRCADPlugin();
725void CPL_DLL RegisterOGRDWG();
726void CPL_DLL RegisterOGRDGNV8();
727void DeclareDeferredOGRDWGPlugin();
728void DeclareDeferredOGRDGNV8Plugin();
729void CPL_DLL RegisterOGRIDB();
730void DeclareDeferredOGRIDBPlugin();
731void CPL_DLL RegisterOGRGMT();
732void CPL_DLL RegisterOGRGPX();
733void CPL_DLL RegisterOGRNAS();
734void CPL_DLL RegisterOGRGeoRSS();
735void CPL_DLL RegisterOGRVFK();
736void DeclareDeferredOGRVFKPlugin();
737void CPL_DLL RegisterOGRPGDump();
738void CPL_DLL RegisterOGROSM();
739void CPL_DLL RegisterOGRGPSBabel();
740void CPL_DLL RegisterOGRPDS();
741void CPL_DLL RegisterOGRWFS();
742void CPL_DLL RegisterOGROAPIF();
743void CPL_DLL RegisterOGRSOSI();
744void DeclareDeferredOGRSOSIPlugin();
745void CPL_DLL RegisterOGREDIGEO();
746void CPL_DLL RegisterOGRIdrisi();
747void CPL_DLL RegisterOGRXLS();
748void DeclareDeferredOGRXLSPlugin();
749void CPL_DLL RegisterOGRODS();
750void CPL_DLL RegisterOGRXLSX();
751void CPL_DLL RegisterOGRElastic();
752void DeclareDeferredOGRElasticPlugin();
753void CPL_DLL RegisterOGRGeoPackage();
754void CPL_DLL RegisterOGRCarto();
755void DeclareDeferredOGRCartoPlugin();
756void CPL_DLL RegisterOGRAmigoCloud();
757void CPL_DLL RegisterOGRSXF();
758void CPL_DLL RegisterOGROpenFileGDB();
759void DeclareDeferredOGROpenFileGDBPlugin();
760void CPL_DLL RegisterOGRSelafin();
761void CPL_DLL RegisterOGRJML();
762void CPL_DLL RegisterOGRPLSCENES();
763void DeclareDeferredOGRPLSCENESPlugin();
764void CPL_DLL RegisterOGRCSW();
765void CPL_DLL RegisterOGRMongoDBv3();
766void DeclareDeferredOGRMongoDBv3Plugin();
767void CPL_DLL RegisterOGRVDV();
768void CPL_DLL RegisterOGRGMLAS();
769void DeclareDeferredOGRGMLASPlugin();
770void CPL_DLL RegisterOGRMVT();
771void CPL_DLL RegisterOGRNGW();
772void CPL_DLL RegisterOGRMapML();
773void CPL_DLL RegisterOGRLVBAG();
774void CPL_DLL RegisterOGRHANA();
775void DeclareDeferredOGRHANAPlugin();
776void CPL_DLL RegisterOGRParquet();
777void DeclareDeferredOGRParquetPlugin();
778void CPL_DLL RegisterOGRArrow();
779void DeclareDeferredOGRArrowPlugin();
780void CPL_DLL RegisterOGRGTFS();
781void CPL_DLL RegisterOGRPMTiles();
782void CPL_DLL RegisterOGRJSONFG();
783void CPL_DLL RegisterOGRMiraMon();
784void CPL_DLL RegisterOGRXODR();
785void DeclareDeferredOGRXODRPlugin();
786void CPL_DLL RegisterOGRADBC();
787void DeclareDeferredOGRADBCPlugin();
788void CPL_DLL RegisterOGRAIVector();
789// @endcond
790
792
793#endif /* ndef OGRSF_FRMTS_H_INCLUDED */
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:454
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:76
Format specific driver.
Definition gdal_driver.h:63
Object with metadata.
Definition gdal_majorobject.h:43
Class for dataset open functions.
Definition gdal_openinfo.h:28
LEGACY class.
Definition ogrsf_frmts.h:565
Simple container for a bounding region in 3D.
Definition ogr_core.h:199
Simple container for a bounding region (rectangle)
Definition ogr_core.h:44
Definition of a feature class or feature layer.
Definition ogr_feature.h:504
A simple feature, including geometry and attributes.
Definition ogr_feature.h:934
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition ogrfeature.cpp:737
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:69
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:332
Abstract base class for all geometry classes.
Definition ogr_geometry.h:357
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature().
Definition ogrsf_frmts.h:501
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition ogrsf_frmts.h:508
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:61
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:470
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition ogrsf_frmts.h:382
std::vector< std::unique_ptr< OGRSpatialReference, OGRSpatialReferenceReleaser > > GetSupportedSRSListRetType
Return type of OGRLayer::GetSupportedSRSList()
Definition ogrsf_frmts.h:258
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:478
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
virtual OGRFeature * GetNextFeature()=0
Fetch the next available feature from this layer.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Convert a OGRLayerH to a OGRLayer*.
Definition ogrsf_frmts.h:389
LEGACY class.
Definition ogrsf_frmts.h:642
LEGACY class.
Definition ogrsf_frmts.h:602
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:152
This class represents a style table.
Definition ogr_featurestyle.h:69
CPLErr
Error category.
Definition cpl_error.h:37
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:289
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:285
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:936
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1087
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:870
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:175
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:205
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition gdal_fwd.h:157
This file is legacy since GDAL 3.12, but will be kept at least in the whole GDAL 3....
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:405
int OGRErr
Type for a OGR error.
Definition ogr_core.h:370
Simple feature classes.
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1604
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition ogrsf_frmts.h:486
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:470
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:478
Result item of OGR_L_GetGeometryTypes.
Definition ogr_api.h:622