Line data Source code
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 :
25 : /**
26 : * \file ogrsf_frmts.h
27 : *
28 : * Classes related to registration of format support, and opening datasets.
29 : */
30 :
31 : //! @cond Doxygen_Suppress
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
41 : //! @endcond
42 :
43 : class OGRLayerAttrIndex;
44 : class OGRSFDriver;
45 :
46 : struct ArrowArrayStream;
47 :
48 : /************************************************************************/
49 : /* OGRLayer */
50 : /************************************************************************/
51 :
52 : /**
53 : * This class represents a layer of simple features, with access methods.
54 : *
55 : */
56 :
57 : /* Note: any virtual method added to this class must also be added in the */
58 : /* OGRLayerDecorator and OGRMutexedLayer classes. */
59 :
60 : class 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 :
87 : CPL_DISALLOW_COPY_ASSIGN(OGRLayer)
88 :
89 : protected:
90 : //! @cond Doxygen_Suppress
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);
107 : //! @endcond
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 :
126 : //! @cond Doxygen_Suppress
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 : };
148 : //! @endcond
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 :
176 : //! @cond Doxygen_Suppress
177 : bool CreateFieldFromArrowSchemaInternal(const struct ArrowSchema *schema,
178 : const std::string &osFieldPrefix,
179 : CSLConstList papszOptions);
180 : //! @endcond
181 :
182 : public:
183 : OGRLayer();
184 : ~OGRLayer() override;
185 :
186 : /** Return begin of feature iterator.
187 : *
188 : * Using this iterator for standard range-based loops is safe, but
189 : * due to implementation limitations, you shouldn't try to access
190 : * (dereference) more than one iterator step at a time, since the
191 : * OGRFeatureUniquePtr reference is reused.
192 : *
193 : * Only one iterator per layer can be active at a time.
194 : */
195 : FeatureIterator begin();
196 :
197 : /** Return end of feature iterator. */
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;
213 : virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 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 1490608 : OGRFeatureDefn *GetLayerDefn()
246 : {
247 : return const_cast<OGRFeatureDefn *>(
248 1490608 : 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 :
255 : /** Return type of OGRLayer::GetSupportedSRSList() */
256 : typedef std::vector<
257 : std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
258 : GetSupportedSRSListRetType;
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 :
303 : //! @cond Doxygen_Suppress
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);
308 : //! @endcond
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;
350 : //! @cond Doxygen_Suppress
351 : GIntBig GetFeaturesRead();
352 : //! @endcond
353 :
354 : /* non virtual : convenience wrapper for ReorderFields() */
355 : OGRErr ReorderField(int iOldFieldPos, int iNewFieldPos);
356 :
357 : //! @cond Doxygen_Suppress
358 : int AttributeFilterEvaluationNeedsGeometry();
359 :
360 : /* consider these private */
361 : OGRErr InitializeIndexSupport(const char *);
362 :
363 5799 : OGRLayerAttrIndex *GetIndex()
364 : {
365 5799 : return m_poAttrIndex;
366 : }
367 :
368 18 : int GetGeomFieldFilter() const
369 : {
370 18 : return m_iGeomFieldFilter;
371 : }
372 :
373 77 : const char *GetAttrQueryString() const
374 : {
375 77 : return m_pszAttrQueryString;
376 : }
377 :
378 : //! @endcond
379 :
380 : /** Convert a OGRLayer* to a OGRLayerH.
381 : */
382 30015 : static inline OGRLayerH ToHandle(OGRLayer *poLayer)
383 : {
384 30015 : return reinterpret_cast<OGRLayerH>(poLayer);
385 : }
386 :
387 : /** Convert a OGRLayerH to a OGRLayer*.
388 : */
389 719637 : static inline OGRLayer *FromHandle(OGRLayerH hLayer)
390 : {
391 719637 : return reinterpret_cast<OGRLayer *>(hLayer);
392 : }
393 :
394 : //! @cond Doxygen_Suppress
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);
406 : //! @endcond
407 :
408 : /** Field name used by GetArrowSchema() for a FID column when
409 : * GetFIDColumn() is not set.
410 : */
411 : static constexpr const char *DEFAULT_ARROW_FID_NAME = "OGC_FID";
412 :
413 : /** Field name used by GetArrowSchema() for the name of the (single)
414 : * geometry column (returned by GetGeometryColumn()) is not set.
415 : */
416 : static constexpr const char *DEFAULT_ARROW_GEOMETRY_NAME = "wkb_geometry";
417 :
418 : protected:
419 : //! @cond Doxygen_Suppress
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 1343 : FieldDefnChange(std::unique_ptr<T> &&poFieldDefnIn, int iFieldIn,
433 : FieldChangeType eChangeTypeIn,
434 : const std::string &osSavepointNameIn = "")
435 1343 : : poFieldDefn(std::move(poFieldDefnIn)), iField(iFieldIn),
436 1343 : eChangeType(eChangeTypeIn), osSavepointName(osSavepointNameIn)
437 : {
438 1343 : }
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;
457 : //! @endcond
458 : };
459 :
460 : /** Return begin of feature iterator.
461 : *
462 : * Using this iterator for standard range-based loops is safe, but
463 : * due to implementation limitations, you shouldn't try to access
464 : * (dereference) more than one iterator step at a time, since the
465 : * std::unique_ptr<OGRFeature> reference is reused.
466 : *
467 : * Only one iterator per layer can be active at a time.
468 : * @see OGRLayer::begin()
469 : */
470 2779 : inline OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
471 : {
472 2779 : return poLayer->begin();
473 : }
474 :
475 : /** Return end of feature iterator.
476 : * @see OGRLayer::end()
477 : */
478 2779 : inline OGRLayer::FeatureIterator end(OGRLayer *poLayer)
479 : {
480 2779 : return poLayer->end();
481 : }
482 :
483 : /** Unique pointer type for OGRLayer.
484 : * @since GDAL 3.2
485 : */
486 : using OGRLayerUniquePtr = std::unique_ptr<OGRLayer>;
487 :
488 : /************************************************************************/
489 : /* OGRGetNextFeatureThroughRaw */
490 : /************************************************************************/
491 :
492 : /** Template class offering a GetNextFeature() implementation relying on
493 : * GetNextRawFeature().
494 : * OGRGetNextFeatureThroughRaw::GetNextFeature() calls GetNextRawFeature()
495 : * and takes care of applying the spatial and attribute filters, making
496 : * their taking into account in GetNextRawFeature() unnecessary.
497 : *
498 : * @since GDAL 3.2
499 : */
500 : template <class BaseLayer> class OGRGetNextFeatureThroughRaw
501 : {
502 : protected:
503 : ~OGRGetNextFeatureThroughRaw() = default;
504 :
505 : public:
506 : /** Implement OGRLayer::GetNextFeature(), relying on
507 : * BaseLayer::GetNextRawFeature() */
508 61213 : OGRFeature *GetNextFeature()
509 : {
510 61213 : const auto poThis = static_cast<BaseLayer *>(this);
511 15987 : while (true)
512 : {
513 77200 : OGRFeature *poFeature = poThis->GetNextRawFeature();
514 77200 : if (poFeature == nullptr)
515 4308 : return nullptr;
516 :
517 13774 : if ((poThis->m_poFilterGeom == nullptr ||
518 145784 : poThis->FilterGeometry(poFeature->GetGeometryRef())) &&
519 78564 : (poThis->m_poAttrQuery == nullptr ||
520 14781 : poThis->m_poAttrQuery->Evaluate(poFeature)))
521 : {
522 56905 : return poFeature;
523 : }
524 : else
525 15987 : delete poFeature;
526 : }
527 : }
528 : };
529 :
530 : /** Utility macro to define GetNextFeature() through GetNextRawFeature() */
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 :
545 : /**
546 : * LEGACY class. Use GDALDataset in your new code ! This class may be
547 : * removed in a later release.
548 : *
549 : * This class represents a data source. A data source potentially
550 : * consists of many layers (OGRLayer). A data source normally consists
551 : * of one, or a related set of files, though the name doesn't have to be
552 : * a real item in the file system.
553 : *
554 : * When an OGRDataSource is destroyed, all its associated OGRLayers objects
555 : * are also destroyed.
556 : *
557 : * NOTE: It is *NOT* safe to cast the handle of
558 : * a C function that returns a OGRDataSourceH to a OGRDataSource*. If a C++
559 : * object is needed, the handle should be cast to GDALDataset*.
560 : *
561 : * @deprecated
562 : */
563 :
564 0 : class CPL_DLL OGRDataSource : public GDALDataset
565 : {
566 : public:
567 : OGRDataSource();
568 : ~OGRDataSource() override;
569 :
570 : //! @cond Doxygen_Suppress
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");
576 : //! @endcond
577 : };
578 :
579 : /************************************************************************/
580 : /* OGRSFDriver */
581 : /************************************************************************/
582 :
583 : /**
584 : * LEGACY class. Use GDALDriver in your new code ! This class may be
585 : * removed in a later release.
586 : *
587 : * Represents an operational format driver.
588 : *
589 : * One OGRSFDriver derived class will normally exist for each file format
590 : * registered for use, regardless of whether a file has or will be opened.
591 : * The list of available drivers is normally managed by the
592 : * OGRSFDriverRegistrar.
593 : *
594 : * NOTE: It is *NOT* safe to cast the handle of
595 : * a C function that returns a OGRSFDriverH to a OGRSFDriver*. If a C++ object
596 : * is needed, the handle should be cast to GDALDriver*.
597 : *
598 : * @deprecated
599 : */
600 :
601 : class CPL_DLL OGRSFDriver : public GDALDriver
602 : {
603 : public:
604 : //! @cond Doxygen_Suppress
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");
621 : //! @endcond
622 : };
623 :
624 : /************************************************************************/
625 : /* OGRSFDriverRegistrar */
626 : /************************************************************************/
627 :
628 : /**
629 : * LEGACY class. Use GDALDriverManager in your new code ! This class may be
630 : * removed in a later release.
631 : *
632 : * Singleton manager for OGRSFDriver instances that will be used to try
633 : * and open datasources. Normally the registrar is populated with
634 : * standard drivers using the OGRRegisterAll() function and does not need
635 : * to be directly accessed. The driver registrar and all registered drivers
636 : * may be cleaned up on shutdown using OGRCleanupAll().
637 : *
638 : * @deprecated
639 : */
640 :
641 : class CPL_DLL OGRSFDriverRegistrar
642 : {
643 :
644 : OGRSFDriverRegistrar();
645 : ~OGRSFDriverRegistrar();
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:
655 : //! @cond Doxygen_Suppress
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");
676 : //! @endcond
677 : };
678 :
679 : /* -------------------------------------------------------------------- */
680 : /* Various available registration methods. */
681 : /* -------------------------------------------------------------------- */
682 : CPL_C_START
683 :
684 : //! @cond Doxygen_Suppress
685 : void OGRRegisterAllInternal();
686 :
687 : void CPL_DLL RegisterOGRFileGDB();
688 : void DeclareDeferredOGRFileGDBPlugin();
689 : void CPL_DLL RegisterOGRShape();
690 : void CPL_DLL RegisterOGRS57();
691 : void CPL_DLL RegisterOGRTAB();
692 : void CPL_DLL RegisterOGRMIF();
693 : void CPL_DLL RegisterOGRODBC();
694 : void DeclareDeferredOGRODBCPlugin();
695 : void CPL_DLL RegisterOGRWAsP();
696 : void CPL_DLL RegisterOGRPG();
697 : void DeclareDeferredOGRPGPlugin();
698 : void CPL_DLL RegisterOGRMSSQLSpatial();
699 : void DeclareDeferredOGRMSSQLSpatialPlugin();
700 : void CPL_DLL RegisterOGRMySQL();
701 : void DeclareDeferredOGRMySQLPlugin();
702 : void CPL_DLL RegisterOGROCI();
703 : void DeclareDeferredOGROCIPlugin();
704 : void CPL_DLL RegisterOGRDGN();
705 : void CPL_DLL RegisterOGRGML();
706 : void CPL_DLL RegisterOGRLIBKML();
707 : void DeclareDeferredOGRLIBKMLPlugin();
708 : void CPL_DLL RegisterOGRKML();
709 : void CPL_DLL RegisterOGRFlatGeobuf();
710 : void CPL_DLL RegisterOGRGeoJSON();
711 : void CPL_DLL RegisterOGRGeoJSONSeq();
712 : void CPL_DLL RegisterOGRESRIJSON();
713 : void CPL_DLL RegisterOGRTopoJSON();
714 : void CPL_DLL RegisterOGRAVCBin();
715 : void CPL_DLL RegisterOGRAVCE00();
716 : void CPL_DLL RegisterOGRVRT();
717 : void CPL_DLL RegisterOGRSQLite();
718 : void CPL_DLL RegisterOGRCSV();
719 : void CPL_DLL RegisterOGRILI1();
720 : void CPL_DLL RegisterOGRILI2();
721 : void CPL_DLL RegisterOGRPGeo();
722 : void CPL_DLL RegisterOGRDXF();
723 : void CPL_DLL RegisterOGRCAD();
724 : void DeclareDeferredOGRCADPlugin();
725 : void CPL_DLL RegisterOGRDWG();
726 : void CPL_DLL RegisterOGRDGNV8();
727 : void DeclareDeferredOGRDWGPlugin();
728 : void DeclareDeferredOGRDGNV8Plugin();
729 : void CPL_DLL RegisterOGRIDB();
730 : void DeclareDeferredOGRIDBPlugin();
731 : void CPL_DLL RegisterOGRGMT();
732 : void CPL_DLL RegisterOGRGPX();
733 : void CPL_DLL RegisterOGRNAS();
734 : void CPL_DLL RegisterOGRGeoRSS();
735 : void CPL_DLL RegisterOGRVFK();
736 : void DeclareDeferredOGRVFKPlugin();
737 : void CPL_DLL RegisterOGRPGDump();
738 : void CPL_DLL RegisterOGROSM();
739 : void CPL_DLL RegisterOGRGPSBabel();
740 : void CPL_DLL RegisterOGRPDS();
741 : void CPL_DLL RegisterOGRWFS();
742 : void CPL_DLL RegisterOGROAPIF();
743 : void CPL_DLL RegisterOGRSOSI();
744 : void DeclareDeferredOGRSOSIPlugin();
745 : void CPL_DLL RegisterOGREDIGEO();
746 : void CPL_DLL RegisterOGRIdrisi();
747 : void CPL_DLL RegisterOGRXLS();
748 : void DeclareDeferredOGRXLSPlugin();
749 : void CPL_DLL RegisterOGRODS();
750 : void CPL_DLL RegisterOGRXLSX();
751 : void CPL_DLL RegisterOGRElastic();
752 : void DeclareDeferredOGRElasticPlugin();
753 : void CPL_DLL RegisterOGRGeoPackage();
754 : void CPL_DLL RegisterOGRCarto();
755 : void DeclareDeferredOGRCartoPlugin();
756 : void CPL_DLL RegisterOGRAmigoCloud();
757 : void CPL_DLL RegisterOGRSXF();
758 : void CPL_DLL RegisterOGROpenFileGDB();
759 : void DeclareDeferredOGROpenFileGDBPlugin();
760 : void CPL_DLL RegisterOGRSelafin();
761 : void CPL_DLL RegisterOGRJML();
762 : void CPL_DLL RegisterOGRPLSCENES();
763 : void DeclareDeferredOGRPLSCENESPlugin();
764 : void CPL_DLL RegisterOGRCSW();
765 : void CPL_DLL RegisterOGRMongoDBv3();
766 : void DeclareDeferredOGRMongoDBv3Plugin();
767 : void CPL_DLL RegisterOGRVDV();
768 : void CPL_DLL RegisterOGRGMLAS();
769 : void DeclareDeferredOGRGMLASPlugin();
770 : void CPL_DLL RegisterOGRMVT();
771 : void CPL_DLL RegisterOGRNGW();
772 : void CPL_DLL RegisterOGRMapML();
773 : void CPL_DLL RegisterOGRLVBAG();
774 : void CPL_DLL RegisterOGRHANA();
775 : void DeclareDeferredOGRHANAPlugin();
776 : void CPL_DLL RegisterOGRParquet();
777 : void DeclareDeferredOGRParquetPlugin();
778 : void CPL_DLL RegisterOGRArrow();
779 : void DeclareDeferredOGRArrowPlugin();
780 : void CPL_DLL RegisterOGRGTFS();
781 : void CPL_DLL RegisterOGRPMTiles();
782 : void CPL_DLL RegisterOGRJSONFG();
783 : void CPL_DLL RegisterOGRMiraMon();
784 : void CPL_DLL RegisterOGRXODR();
785 : void DeclareDeferredOGRXODRPlugin();
786 : void CPL_DLL RegisterOGRADBC();
787 : void DeclareDeferredOGRADBCPlugin();
788 : void CPL_DLL RegisterOGRAIVector();
789 : // @endcond
790 :
791 : CPL_C_END
792 :
793 : #endif /* ndef OGRSF_FRMTS_H_INCLUDED */
|