GDAL
ogrsf_frmts.h
Go to the documentation of this file.
1 /******************************************************************************
2  * $Id$
3  *
4  * Project: OpenGIS Simple Features Reference Implementation
5  * Purpose: Classes related to format registration, and file opening.
6  * Author: Frank Warmerdam, warmerda@home.com
7  *
8  ******************************************************************************
9  * Copyright (c) 1999, Les Technologies SoftMap Inc.
10  * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com>
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a
13  * copy of this software and associated documentation files (the "Software"),
14  * to deal in the Software without restriction, including without limitation
15  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16  * and/or sell copies of the Software, and to permit persons to whom the
17  * Software is furnished to do so, subject to the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
25  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28  * DEALINGS IN THE SOFTWARE.
29  ****************************************************************************/
30 
31 #ifndef OGRSF_FRMTS_H_INCLUDED
32 #define OGRSF_FRMTS_H_INCLUDED
33 
34 #include "cpl_progress.h"
35 #include "ogr_feature.h"
36 #include "ogr_featurestyle.h"
37 #include "gdal_priv.h"
38 
39 #include <memory>
40 #include <deque>
41 
49 #if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
50 #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
51 #else
52 #define OGR_DEPRECATED(x)
53 #endif
55 
56 class OGRLayerAttrIndex;
57 class OGRSFDriver;
58 
59 struct ArrowArrayStream;
60 
61 /************************************************************************/
62 /* OGRLayer */
63 /************************************************************************/
64 
70 /* Note: any virtual method added to this class must also be added in the */
71 /* OGRLayerDecorator and OGRMutexedLayer classes. */
72 
73 class CPL_DLL OGRLayer : public GDALMajorObject
74 {
75  private:
76  struct Private;
77  std::unique_ptr<Private> m_poPrivate;
78 
79  void ConvertGeomsIfNecessary(OGRFeature *poFeature);
80 
81  class CPL_DLL FeatureIterator
82  {
83  struct Private;
84  std::unique_ptr<Private> m_poPrivate;
85 
86  public:
87  FeatureIterator(OGRLayer *poLayer, bool bStart);
88  FeatureIterator(
89  FeatureIterator &&oOther) noexcept; // declared but not defined.
90  // Needed for gcc 5.4 at least
91  ~FeatureIterator();
92  OGRFeatureUniquePtr &operator*();
93  FeatureIterator &operator++();
94  bool operator!=(const FeatureIterator &it) const;
95  };
96 
97  friend inline FeatureIterator begin(OGRLayer *poLayer);
98  friend inline FeatureIterator end(OGRLayer *poLayer);
99 
101 
102  protected:
104  int m_bFilterIsEnvelope;
105  OGRGeometry *m_poFilterGeom;
106  OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a
107  prepared geometry */
108  OGREnvelope m_sFilterEnvelope;
109  int m_iGeomFieldFilter; // specify the index on which the spatial
110  // filter is active.
111 
112  int FilterGeometry(const OGRGeometry *);
113  // int FilterGeometry( OGRGeometry *, OGREnvelope*
114  // psGeometryEnvelope);
115  int InstallFilter(OGRGeometry *);
116  bool
117  ValidateGeometryFieldIndexForSetSpatialFilter(int iGeomField,
118  const OGRGeometry *poGeomIn,
119  bool bIsSelectLayer = false);
120 
121  OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce);
123 
124  virtual OGRErr ISetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
125  virtual OGRErr ICreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
126  virtual OGRErr IUpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
127  virtual OGRErr
128  IUpdateFeature(OGRFeature *poFeature, int nUpdatedFieldsCount,
129  const int *panUpdatedFieldsIdx, int nUpdatedGeomFieldsCount,
130  const int *panUpdatedGeomFieldsIdx,
131  bool bUpdateStyleString) CPL_WARN_UNUSED_RESULT;
132 
134  CPLStringList m_aosArrowArrayStreamOptions{};
135 
136  struct ArrowArrayStreamPrivateData
137  {
138  bool m_bArrowArrayStreamInProgress = false;
139  bool m_bEOF = false;
140  OGRLayer *m_poLayer = nullptr;
141  std::vector<GIntBig> m_anQueriedFIDs{};
142  size_t m_iQueriedFIDS = 0;
143  std::deque<std::unique_ptr<OGRFeature>> m_oFeatureQueue{};
144  };
145 
146  std::shared_ptr<ArrowArrayStreamPrivateData>
147  m_poSharedArrowArrayStreamPrivateData{};
148 
149  struct ArrowArrayStreamPrivateDataSharedDataWrapper
150  {
151  std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
152  };
154 
155  friend class OGRArrowArrayHelper;
156  static void ReleaseArray(struct ArrowArray *array);
157  static void ReleaseSchema(struct ArrowSchema *schema);
158  static void ReleaseStream(struct ArrowArrayStream *stream);
159  virtual int GetArrowSchema(struct ArrowArrayStream *,
160  struct ArrowSchema *out_schema);
161  virtual int GetNextArrowArray(struct ArrowArrayStream *,
162  struct ArrowArray *out_array);
163  static int StaticGetArrowSchema(struct ArrowArrayStream *,
164  struct ArrowSchema *out_schema);
165  static int StaticGetNextArrowArray(struct ArrowArrayStream *,
166  struct ArrowArray *out_array);
167  static const char *GetLastErrorArrowArrayStream(struct ArrowArrayStream *);
168 
169  static struct ArrowSchema *
170  CreateSchemaForWKBGeometryColumn(const OGRGeomFieldDefn *poFieldDefn,
171  const char *pszArrowFormat,
172  const char *pszExtensionName);
173 
174  virtual bool
175  CanPostFilterArrowArray(const struct ArrowSchema *schema) const;
176  void PostFilterArrowArray(const struct ArrowSchema *schema,
177  struct ArrowArray *array,
178  CSLConstList papszOptions) const;
179 
181  bool CreateFieldFromArrowSchemaInternal(const struct ArrowSchema *schema,
182  const std::string &osFieldPrefix,
183  CSLConstList papszOptions);
185 
186  public:
187  OGRLayer();
188  virtual ~OGRLayer();
189 
200  FeatureIterator begin();
201 
203  FeatureIterator end();
204 
205  virtual OGRGeometry *GetSpatialFilter();
206  virtual void SetSpatialFilter(OGRGeometry *);
207  virtual void SetSpatialFilterRect(double dfMinX, double dfMinY,
208  double dfMaxX, double dfMaxY);
209 
210  virtual void SetSpatialFilter(int iGeomField, OGRGeometry *);
211  virtual void SetSpatialFilterRect(int iGeomField, double dfMinX,
212  double dfMinY, double dfMaxX,
213  double dfMaxY);
214 
215  virtual OGRErr SetAttributeFilter(const char *);
216 
217  virtual void ResetReading() = 0;
219  virtual OGRErr SetNextByIndex(GIntBig nIndex);
220  virtual OGRFeature *GetFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
221 
222  virtual GDALDataset *GetDataset();
223  virtual bool GetArrowStream(struct ArrowArrayStream *out_stream,
224  CSLConstList papszOptions = nullptr);
225  virtual bool IsArrowSchemaSupported(const struct ArrowSchema *schema,
226  CSLConstList papszOptions,
227  std::string &osErrorMsg) const;
228  virtual bool
229  CreateFieldFromArrowSchema(const struct ArrowSchema *schema,
230  CSLConstList papszOptions = nullptr);
231  virtual bool WriteArrowBatch(const struct ArrowSchema *schema,
232  struct ArrowArray *array,
233  CSLConstList papszOptions = nullptr);
234 
235  OGRErr SetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
236  OGRErr CreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
237  OGRErr UpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
238  OGRErr UpdateFeature(OGRFeature *poFeature, int nUpdatedFieldsCount,
239  const int *panUpdatedFieldsIdx,
240  int nUpdatedGeomFieldsCount,
241  const int *panUpdatedGeomFieldsIdx,
242  bool bUpdateStyleString) CPL_WARN_UNUSED_RESULT;
243 
244  virtual OGRErr DeleteFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
245 
246  virtual const char *GetName();
247  virtual OGRwkbGeometryType GetGeomType();
248  virtual OGRFeatureDefn *GetLayerDefn() = 0;
249  virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch);
250 
251  virtual OGRSpatialReference *GetSpatialRef();
252 
254  typedef std::vector<
255  std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
257  virtual const GetSupportedSRSListRetType &
258  GetSupportedSRSList(int iGeomField);
259  virtual OGRErr SetActiveSRS(int iGeomField,
260  const OGRSpatialReference *poSRS);
261 
262  virtual GIntBig GetFeatureCount(int bForce = TRUE);
263  virtual OGRErr GetExtent(OGREnvelope *psExtent,
264  int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
265  virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
266  int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
267 
268  virtual OGRErr GetExtent3D(int iGeomField, OGREnvelope3D *psExtent3D,
269  int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
270 
271  virtual int TestCapability(const char *) = 0;
272 
273  virtual OGRErr Rename(const char *pszNewName) CPL_WARN_UNUSED_RESULT;
274 
275  virtual OGRErr CreateField(const OGRFieldDefn *poField,
276  int bApproxOK = TRUE);
277  virtual OGRErr DeleteField(int iField);
278  virtual OGRErr ReorderFields(int *panMap);
279  virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn,
280  int nFlagsIn);
281  virtual OGRErr
282  AlterGeomFieldDefn(int iGeomField,
283  const OGRGeomFieldDefn *poNewGeomFieldDefn,
284  int nFlagsIn);
285 
286  virtual OGRErr CreateGeomField(const OGRGeomFieldDefn *poField,
287  int bApproxOK = TRUE);
288 
289  virtual OGRErr SyncToDisk();
290 
291  virtual OGRStyleTable *GetStyleTable();
292  virtual void SetStyleTableDirectly(OGRStyleTable *poStyleTable);
293 
294  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
295 
296  virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
297  virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
298  virtual OGRErr RollbackTransaction();
299 
300  virtual const char *GetFIDColumn();
301  virtual const char *GetGeometryColumn();
302 
303  virtual OGRErr SetIgnoredFields(CSLConstList papszFields);
304 
305  virtual OGRGeometryTypeCounter *
306  GetGeometryTypes(int iGeomField, int nFlagsGGT, int &nEntryCountOut,
307  GDALProgressFunc pfnProgress, void *pProgressData);
308 
309  OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
310  char **papszOptions = nullptr,
311  GDALProgressFunc pfnProgress = nullptr,
312  void *pProgressArg = nullptr);
313  OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
314  char **papszOptions = nullptr,
315  GDALProgressFunc pfnProgress = nullptr,
316  void *pProgressArg = nullptr);
317  OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
318  char **papszOptions, GDALProgressFunc pfnProgress,
319  void *pProgressArg);
320  OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
321  char **papszOptions = nullptr,
322  GDALProgressFunc pfnProgress = nullptr,
323  void *pProgressArg = nullptr);
324  OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
325  char **papszOptions = nullptr,
326  GDALProgressFunc pfnProgress = nullptr,
327  void *pProgressArg = nullptr);
328  OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
329  char **papszOptions = nullptr,
330  GDALProgressFunc pfnProgress = nullptr,
331  void *pProgressArg = nullptr);
332  OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
333  char **papszOptions = nullptr,
334  GDALProgressFunc pfnProgress = nullptr,
335  void *pProgressArg = nullptr);
336 
337  int Reference();
338  int Dereference();
339  int GetRefCount() const;
341  GIntBig GetFeaturesRead();
343 
344  /* non virtual : convenience wrapper for ReorderFields() */
345  OGRErr ReorderField(int iOldFieldPos, int iNewFieldPos);
346 
348  int AttributeFilterEvaluationNeedsGeometry();
349 
350  /* consider these private */
351  OGRErr InitializeIndexSupport(const char *);
352 
353  OGRLayerAttrIndex *GetIndex()
354  {
355  return m_poAttrIndex;
356  }
357 
358  int GetGeomFieldFilter() const
359  {
360  return m_iGeomFieldFilter;
361  }
362 
363  const char *GetAttrQueryString() const
364  {
365  return m_pszAttrQueryString;
366  }
367 
369 
373  static inline OGRLayerH ToHandle(OGRLayer *poLayer)
374  {
375  return reinterpret_cast<OGRLayerH>(poLayer);
376  }
377 
381  static inline OGRLayer *FromHandle(OGRLayerH hLayer)
382  {
383  return reinterpret_cast<OGRLayer *>(hLayer);
384  }
385 
387  bool FilterWKBGeometry(const GByte *pabyWKB, size_t nWKBSize,
388  bool bEnvelopeAlreadySet,
389  OGREnvelope &sEnvelope) const;
390 
391  static bool FilterWKBGeometry(const GByte *pabyWKB, size_t nWKBSize,
392  bool bEnvelopeAlreadySet,
393  OGREnvelope &sEnvelope,
394  const OGRGeometry *poFilterGeom,
395  bool bFilterIsEnvelope,
396  const OGREnvelope &sFilterEnvelope,
397  OGRPreparedGeometry *&poPreparedFilterGeom);
399 
403  static constexpr const char *DEFAULT_ARROW_FID_NAME = "OGC_FID";
404 
408  static constexpr const char *DEFAULT_ARROW_GEOMETRY_NAME = "wkb_geometry";
409 
410  protected:
412  OGRStyleTable *m_poStyleTable;
413  OGRFeatureQuery *m_poAttrQuery;
414  char *m_pszAttrQueryString;
415  OGRLayerAttrIndex *m_poAttrIndex;
416 
417  int m_nRefCount;
418 
419  GIntBig m_nFeaturesRead;
421 };
422 
434 inline OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
435 {
436  return poLayer->begin();
437 }
438 
442 inline OGRLayer::FeatureIterator end(OGRLayer *poLayer)
443 {
444  return poLayer->end();
445 }
446 
450 using OGRLayerUniquePtr = std::unique_ptr<OGRLayer>;
451 
452 /************************************************************************/
453 /* OGRGetNextFeatureThroughRaw */
454 /************************************************************************/
455 
461 template <class BaseLayer> class OGRGetNextFeatureThroughRaw
462 {
463  protected:
464  ~OGRGetNextFeatureThroughRaw() = default;
465 
466  public:
470  {
471  const auto poThis = static_cast<BaseLayer *>(this);
472  while (true)
473  {
474  OGRFeature *poFeature = poThis->GetNextRawFeature();
475  if (poFeature == nullptr)
476  return nullptr;
477 
478  if ((poThis->m_poFilterGeom == nullptr ||
479  poThis->FilterGeometry(poFeature->GetGeometryRef())) &&
480  (poThis->m_poAttrQuery == nullptr ||
481  poThis->m_poAttrQuery->Evaluate(poFeature)))
482  {
483  return poFeature;
484  }
485  else
486  delete poFeature;
487  }
488  }
489 };
490 
492 #define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
493  private: \
494  friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
495  \
496  public: \
497  OGRFeature *GetNextFeature() override \
498  { \
499  return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
500  }
501 
502 /************************************************************************/
503 /* OGRDataSource */
504 /************************************************************************/
505 
525 class CPL_DLL OGRDataSource : public GDALDataset
526 {
527  public:
528  OGRDataSource();
530  virtual const char *GetName()
531  OGR_DEPRECATED("Use GDALDataset class instead") = 0;
532 
533  static void DestroyDataSource(OGRDataSource *)
534  OGR_DEPRECATED("Use GDALDataset class instead");
536 };
537 
538 /************************************************************************/
539 /* OGRSFDriver */
540 /************************************************************************/
541 
560 class CPL_DLL OGRSFDriver : public GDALDriver
561 {
562  public:
564  virtual ~OGRSFDriver();
565 
566  virtual const char *GetName()
567  OGR_DEPRECATED("Use GDALDriver class instead") = 0;
568 
569  virtual OGRDataSource *Open(const char *pszName, int bUpdate = FALSE)
570  OGR_DEPRECATED("Use GDALDriver class instead") = 0;
571 
572  virtual int TestCapability(const char *pszCap)
573  OGR_DEPRECATED("Use GDALDriver class instead") = 0;
574 
575  virtual OGRDataSource *CreateDataSource(const char *pszName,
576  char ** = nullptr)
577  OGR_DEPRECATED("Use GDALDriver class instead");
578  virtual OGRErr DeleteDataSource(const char *pszName)
579  OGR_DEPRECATED("Use GDALDriver class instead");
581 };
582 
583 /************************************************************************/
584 /* OGRSFDriverRegistrar */
585 /************************************************************************/
586 
600 class CPL_DLL OGRSFDriverRegistrar
601 {
602 
605 
606  static GDALDataset *OpenWithDriverArg(GDALDriver *poDriver,
607  GDALOpenInfo *poOpenInfo);
608  static GDALDataset *CreateVectorOnly(GDALDriver *poDriver,
609  const char *pszName,
610  char **papszOptions);
611  static CPLErr DeleteDataSource(GDALDriver *poDriver, const char *pszName);
612 
613  public:
615  static OGRSFDriverRegistrar *GetRegistrar()
616  OGR_DEPRECATED("Use GDALDriverManager class instead");
617 
618  // cppcheck-suppress functionStatic
619  void RegisterDriver(OGRSFDriver *poDriver)
620  OGR_DEPRECATED("Use GDALDriverManager class instead");
621 
622  // cppcheck-suppress functionStatic
623  int GetDriverCount(void)
624  OGR_DEPRECATED("Use GDALDriverManager class instead");
625  // cppcheck-suppress functionStatic
626  GDALDriver *GetDriver(int iDriver)
627  OGR_DEPRECATED("Use GDALDriverManager class instead");
628  // cppcheck-suppress functionStatic
629  GDALDriver *GetDriverByName(const char *)
630  OGR_DEPRECATED("Use GDALDriverManager class instead");
631 
632  // cppcheck-suppress functionStatic
633  int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead");
634  // cppcheck-suppress functionStatic
635  OGRDataSource *GetOpenDS(int)
636  OGR_DEPRECATED("Use GDALDriverManager class instead");
638 };
639 
640 /* -------------------------------------------------------------------- */
641 /* Various available registration methods. */
642 /* -------------------------------------------------------------------- */
644 
646 void OGRRegisterAllInternal();
647 
648 void CPL_DLL RegisterOGRFileGDB();
649 void DeclareDeferredOGRFileGDBPlugin();
650 void CPL_DLL RegisterOGRShape();
651 void CPL_DLL RegisterOGRNTF();
652 void CPL_DLL RegisterOGRSDTS();
653 void CPL_DLL RegisterOGRTiger();
654 void CPL_DLL RegisterOGRS57();
655 void CPL_DLL RegisterOGRTAB();
656 void CPL_DLL RegisterOGRMIF();
657 void CPL_DLL RegisterOGROGDI();
658 void DeclareDeferredOGROGDIPlugin();
659 void CPL_DLL RegisterOGRODBC();
660 void DeclareDeferredOGRODBCPlugin();
661 void CPL_DLL RegisterOGRWAsP();
662 void CPL_DLL RegisterOGRPG();
663 void DeclareDeferredOGRPGPlugin();
664 void CPL_DLL RegisterOGRMSSQLSpatial();
665 void DeclareDeferredOGRMSSQLSpatialPlugin();
666 void CPL_DLL RegisterOGRMySQL();
667 void DeclareDeferredOGRMySQLPlugin();
668 void CPL_DLL RegisterOGROCI();
669 void DeclareDeferredOGROCIPlugin();
670 void CPL_DLL RegisterOGRDGN();
671 void CPL_DLL RegisterOGRGML();
672 void CPL_DLL RegisterOGRLIBKML();
673 void DeclareDeferredOGRLIBKMLPlugin();
674 void CPL_DLL RegisterOGRKML();
675 void CPL_DLL RegisterOGRFlatGeobuf();
676 void CPL_DLL RegisterOGRGeoJSON();
677 void CPL_DLL RegisterOGRGeoJSONSeq();
678 void CPL_DLL RegisterOGRESRIJSON();
679 void CPL_DLL RegisterOGRTopoJSON();
680 void CPL_DLL RegisterOGRAVCBin();
681 void CPL_DLL RegisterOGRAVCE00();
682 void CPL_DLL RegisterOGRMEM();
683 void CPL_DLL RegisterOGRVRT();
684 void CPL_DLL RegisterOGRSQLite();
685 void CPL_DLL RegisterOGRCSV();
686 void CPL_DLL RegisterOGRILI1();
687 void CPL_DLL RegisterOGRILI2();
688 void CPL_DLL RegisterOGRPGeo();
689 void CPL_DLL RegisterOGRDXF();
690 void CPL_DLL RegisterOGRCAD();
691 void DeclareDeferredOGRCADPlugin();
692 void CPL_DLL RegisterOGRDWG();
693 void CPL_DLL RegisterOGRDGNV8();
694 void DeclareDeferredOGRDWGPlugin();
695 void DeclareDeferredOGRDGNV8Plugin();
696 void CPL_DLL RegisterOGRIDB();
697 void DeclareDeferredOGRIDBPlugin();
698 void CPL_DLL RegisterOGRGMT();
699 void CPL_DLL RegisterOGRGPX();
700 void CPL_DLL RegisterOGRGeoconcept();
701 void CPL_DLL RegisterOGRNAS();
702 void CPL_DLL RegisterOGRGeoRSS();
703 void CPL_DLL RegisterOGRVFK();
704 void DeclareDeferredOGRVFKPlugin();
705 void CPL_DLL RegisterOGRPGDump();
706 void CPL_DLL RegisterOGROSM();
707 void CPL_DLL RegisterOGRGPSBabel();
708 void CPL_DLL RegisterOGRPDS();
709 void CPL_DLL RegisterOGRWFS();
710 void CPL_DLL RegisterOGROAPIF();
711 void CPL_DLL RegisterOGRSOSI();
712 void DeclareDeferredOGRSOSIPlugin();
713 void CPL_DLL RegisterOGREDIGEO();
714 void CPL_DLL RegisterOGRSVG();
715 void CPL_DLL RegisterOGRIdrisi();
716 void CPL_DLL RegisterOGRXLS();
717 void DeclareDeferredOGRXLSPlugin();
718 void CPL_DLL RegisterOGRODS();
719 void CPL_DLL RegisterOGRXLSX();
720 void CPL_DLL RegisterOGRElastic();
721 void DeclareDeferredOGRElasticPlugin();
722 void CPL_DLL RegisterOGRGeoPackage();
723 void CPL_DLL RegisterOGRCarto();
724 void DeclareDeferredOGRCartoPlugin();
725 void CPL_DLL RegisterOGRAmigoCloud();
726 void CPL_DLL RegisterOGRSXF();
727 void CPL_DLL RegisterOGROpenFileGDB();
728 void DeclareDeferredOGROpenFileGDBPlugin();
729 void CPL_DLL RegisterOGRSelafin();
730 void CPL_DLL RegisterOGRJML();
731 void CPL_DLL RegisterOGRPLSCENES();
732 void DeclareDeferredOGRPLSCENESPlugin();
733 void CPL_DLL RegisterOGRCSW();
734 void CPL_DLL RegisterOGRMongoDBv3();
735 void DeclareDeferredOGRMongoDBv3Plugin();
736 void CPL_DLL RegisterOGRVDV();
737 void CPL_DLL RegisterOGRGMLAS();
738 void DeclareDeferredOGRGMLASPlugin();
739 void CPL_DLL RegisterOGRMVT();
740 void CPL_DLL RegisterOGRNGW();
741 void CPL_DLL RegisterOGRMapML();
742 void CPL_DLL RegisterOGRLVBAG();
743 void CPL_DLL RegisterOGRHANA();
744 void DeclareDeferredOGRHANAPlugin();
745 void CPL_DLL RegisterOGRParquet();
746 void DeclareDeferredOGRParquetPlugin();
747 void CPL_DLL RegisterOGRArrow();
748 void DeclareDeferredOGRArrowPlugin();
749 void CPL_DLL RegisterOGRGTFS();
750 void CPL_DLL RegisterOGRPMTiles();
751 void CPL_DLL RegisterOGRJSONFG();
752 void CPL_DLL RegisterOGRMiraMon();
753 void CPL_DLL RegisterOGRXODR();
754 void DeclareDeferredOGRXODRPlugin();
755 // @endcond
756 
757 CPL_C_END
758 
759 #endif /* ndef OGRSF_FRMTS_H_INCLUDED */
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:449
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:503
Format specific driver.
Definition: gdal_priv.h:2001
Object with metadata.
Definition: gdal_priv.h:156
Class for dataset open functions.
Definition: gdal_priv.h:301
LEGACY class.
Definition: ogrsf_frmts.h:526
Simple container for a bounding region in 3D.
Definition: ogr_core.h:216
Simple container for a bounding region (rectangle)
Definition: ogr_core.h:61
Definition of a feature class or feature layer.
Definition: ogr_feature.h:517
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:893
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition: ogrfeature.cpp:719
Definition of an attribute of an OGRFeatureDefn.
Definition: ogr_feature.h:111
Definition of a geometry field of an OGRFeatureDefn.
Definition: ogr_feature.h:346
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:377
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition: ogrsf_frmts.h:462
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition: ogrsf_frmts.h:469
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:74
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:434
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:381
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition: ogrsf_frmts.h:373
std::vector< std::unique_ptr< OGRSpatialReference, OGRSpatialReferenceReleaser > > GetSupportedSRSListRetType
Return type of OGRLayer::GetSupportedSRSList()
Definition: ogrsf_frmts.h:256
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:442
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
LEGACY class.
Definition: ogrsf_frmts.h:601
LEGACY class.
Definition: ogrsf_frmts.h:561
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:169
This class represents a style table.
Definition: ogr_featurestyle.h:86
CPLErr
Error category.
Definition: cpl_error.h:53
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:299
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:295
#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:1042
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1183
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:976
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:185
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:215
C++ GDAL entry points.
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition: ogr_api.h:691
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:416
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:387
Simple feature classes.
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:1570
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition: ogrsf_frmts.h:450
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:434
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:442
Result item of OGR_L_GetGeometryTypes.
Definition: ogr_api.h:708