My Project
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 mines-paris dot org>
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
48#if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
49#define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
50#else
51#define OGR_DEPRECATED(x)
52#endif
54
55class OGRLayerAttrIndex;
56class OGRSFDriver;
57
58/************************************************************************/
59/* OGRLayer */
60/************************************************************************/
61
67/* Note: any virtual method added to this class must also be added in the */
68/* OGRLayerDecorator and OGRMutexedLayer classes. */
69
70class CPL_DLL OGRLayer : public GDALMajorObject
71{
72 private:
73 struct Private;
74 std::unique_ptr<Private> m_poPrivate;
75
76 void ConvertGeomsIfNecessary( OGRFeature *poFeature );
77
78 class CPL_DLL FeatureIterator
79 {
80 struct Private;
81 std::unique_ptr<Private> m_poPrivate;
82 public:
83 FeatureIterator(OGRLayer* poLayer, bool bStart);
84 FeatureIterator(FeatureIterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
85 ~FeatureIterator();
86 OGRFeatureUniquePtr& operator*();
87 FeatureIterator& operator++();
88 bool operator!=(const FeatureIterator& it) const;
89 };
90
91 friend inline FeatureIterator begin(OGRLayer* poLayer);
92 friend inline FeatureIterator end(OGRLayer* poLayer);
93
94 protected:
96 int m_bFilterIsEnvelope;
97 OGRGeometry *m_poFilterGeom;
98 OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */
99 OGREnvelope m_sFilterEnvelope;
100 int m_iGeomFieldFilter; // specify the index on which the spatial
101 // filter is active.
102
103 int FilterGeometry( OGRGeometry * );
104 //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
105 int InstallFilter( OGRGeometry * );
106
107 OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce );
109
110 virtual OGRErr ISetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
111 virtual OGRErr ICreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
112
113 public:
114 OGRLayer();
115 virtual ~OGRLayer();
116
127 FeatureIterator begin();
128
130 FeatureIterator end();
131
132 virtual OGRGeometry *GetSpatialFilter();
133 virtual void SetSpatialFilter( OGRGeometry * );
134 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
135 double dfMaxX, double dfMaxY );
136
137 virtual void SetSpatialFilter( int iGeomField, OGRGeometry * );
138 virtual void SetSpatialFilterRect( int iGeomField,
139 double dfMinX, double dfMinY,
140 double dfMaxX, double dfMaxY );
141
142 virtual OGRErr SetAttributeFilter( const char * );
143
144 virtual void ResetReading() = 0;
145 virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0;
146 virtual OGRErr SetNextByIndex( GIntBig nIndex );
147 virtual OGRFeature *GetFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
148
149 OGRErr SetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
150 OGRErr CreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
151
152 virtual OGRErr DeleteFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
153
154 virtual const char *GetName();
155 virtual OGRwkbGeometryType GetGeomType();
156 virtual OGRFeatureDefn *GetLayerDefn() = 0;
157 virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch );
158
159 virtual OGRSpatialReference *GetSpatialRef();
160
161 virtual GIntBig GetFeatureCount( int bForce = TRUE );
162 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
163 virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
164 int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
165
166 virtual int TestCapability( const char * ) = 0;
167
168 virtual OGRErr CreateField( OGRFieldDefn *poField,
169 int bApproxOK = TRUE );
170 virtual OGRErr DeleteField( int iField );
171 virtual OGRErr ReorderFields( int* panMap );
172 virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlagsIn );
173
174 virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
175 int bApproxOK = TRUE );
176
177 virtual OGRErr SyncToDisk();
178
179 virtual OGRStyleTable *GetStyleTable();
180 virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
181
182 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
183
184 virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
185 virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
186 virtual OGRErr RollbackTransaction();
187
188 virtual const char *GetFIDColumn();
189 virtual const char *GetGeometryColumn();
190
191 virtual OGRErr SetIgnoredFields( const char **papszFields );
192
193 OGRErr Intersection( OGRLayer *pLayerMethod,
194 OGRLayer *pLayerResult,
195 char** papszOptions = nullptr,
196 GDALProgressFunc pfnProgress = nullptr,
197 void * pProgressArg = nullptr );
198 OGRErr Union( OGRLayer *pLayerMethod,
199 OGRLayer *pLayerResult,
200 char** papszOptions = nullptr,
201 GDALProgressFunc pfnProgress = nullptr,
202 void * pProgressArg = nullptr );
203 OGRErr SymDifference( OGRLayer *pLayerMethod,
204 OGRLayer *pLayerResult,
205 char** papszOptions,
206 GDALProgressFunc pfnProgress,
207 void * pProgressArg );
208 OGRErr Identity( OGRLayer *pLayerMethod,
209 OGRLayer *pLayerResult,
210 char** papszOptions = nullptr,
211 GDALProgressFunc pfnProgress = nullptr,
212 void * pProgressArg = nullptr );
213 OGRErr Update( OGRLayer *pLayerMethod,
214 OGRLayer *pLayerResult,
215 char** papszOptions = nullptr,
216 GDALProgressFunc pfnProgress = nullptr,
217 void * pProgressArg = nullptr );
218 OGRErr Clip( OGRLayer *pLayerMethod,
219 OGRLayer *pLayerResult,
220 char** papszOptions = nullptr,
221 GDALProgressFunc pfnProgress = nullptr,
222 void * pProgressArg = nullptr );
223 OGRErr Erase( OGRLayer *pLayerMethod,
224 OGRLayer *pLayerResult,
225 char** papszOptions = nullptr,
226 GDALProgressFunc pfnProgress = nullptr,
227 void * pProgressArg = nullptr );
228
229 int Reference();
230 int Dereference();
231 int GetRefCount() const;
233 GIntBig GetFeaturesRead();
235
236 /* non virtual : convenience wrapper for ReorderFields() */
237 OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
238
240 int AttributeFilterEvaluationNeedsGeometry();
241
242 /* consider these private */
243 OGRErr InitializeIndexSupport( const char * );
244 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
245 int GetGeomFieldFilter() const { return m_iGeomFieldFilter; }
246 const char *GetAttrQueryString() const { return m_pszAttrQueryString; }
248
252 static inline OGRLayerH ToHandle(OGRLayer* poLayer)
253 { return reinterpret_cast<OGRLayerH>(poLayer); }
254
258 static inline OGRLayer* FromHandle(OGRLayerH hLayer)
259 { return reinterpret_cast<OGRLayer*>(hLayer); }
260
261 protected:
263 OGRStyleTable *m_poStyleTable;
264 OGRFeatureQuery *m_poAttrQuery;
265 char *m_pszAttrQueryString;
266 OGRLayerAttrIndex *m_poAttrIndex;
267
268 int m_nRefCount;
269
270 GIntBig m_nFeaturesRead;
272};
273
285inline OGRLayer::FeatureIterator begin(OGRLayer* poLayer) { return poLayer->begin(); }
286
290inline OGRLayer::FeatureIterator end(OGRLayer* poLayer) { return poLayer->end(); }
291
292/************************************************************************/
293/* OGRDataSource */
294/************************************************************************/
295
315class CPL_DLL OGRDataSource : public GDALDataset
316{
317public:
320 virtual const char *GetName() OGR_DEPRECATED("Use GDALDataset class instead") = 0;
321
322 static void DestroyDataSource( OGRDataSource * ) OGR_DEPRECATED("Use GDALDataset class instead");
324};
325
326/************************************************************************/
327/* OGRSFDriver */
328/************************************************************************/
329
348class CPL_DLL OGRSFDriver : public GDALDriver
349{
350 public:
352 virtual ~OGRSFDriver();
353
354 virtual const char *GetName() OGR_DEPRECATED("Use GDALDriver class instead") = 0;
355
356 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
357
358 virtual int TestCapability( const char *pszCap ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
359
360 virtual OGRDataSource *CreateDataSource( const char *pszName,
361 char ** = nullptr ) OGR_DEPRECATED("Use GDALDriver class instead");
362 virtual OGRErr DeleteDataSource( const char *pszName ) OGR_DEPRECATED("Use GDALDriver class instead");
364};
365
366/************************************************************************/
367/* OGRSFDriverRegistrar */
368/************************************************************************/
369
384{
385
388
389 static GDALDataset* OpenWithDriverArg(GDALDriver* poDriver,
390 GDALOpenInfo* poOpenInfo);
391 static GDALDataset* CreateVectorOnly( GDALDriver* poDriver,
392 const char * pszName,
393 char ** papszOptions );
394 static CPLErr DeleteDataSource( GDALDriver* poDriver,
395 const char * pszName );
396
397 public:
399 static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED("Use GDALDriverManager class instead");
400
401 // cppcheck-suppress functionStatic
402 void RegisterDriver( OGRSFDriver * poDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
403
404 // cppcheck-suppress functionStatic
405 int GetDriverCount( void ) OGR_DEPRECATED("Use GDALDriverManager class instead");
406 // cppcheck-suppress functionStatic
407 GDALDriver *GetDriver( int iDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
408 // cppcheck-suppress functionStatic
409 GDALDriver *GetDriverByName( const char * ) OGR_DEPRECATED("Use GDALDriverManager class instead");
410
411 // cppcheck-suppress functionStatic
412 int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead");
413 // cppcheck-suppress functionStatic
414 OGRDataSource *GetOpenDS( int ) OGR_DEPRECATED("Use GDALDriverManager class instead");
416};
417
418/* -------------------------------------------------------------------- */
419/* Various available registration methods. */
420/* -------------------------------------------------------------------- */
421CPL_C_START
422
424void OGRRegisterAllInternal();
425
426void CPL_DLL RegisterOGRFileGDB();
427void CPL_DLL RegisterOGRShape();
428void CPL_DLL RegisterOGRDB2();
429void CPL_DLL RegisterOGRNTF();
430void CPL_DLL RegisterOGRFME();
431void CPL_DLL RegisterOGRSDTS();
432void CPL_DLL RegisterOGRTiger();
433void CPL_DLL RegisterOGRS57();
434void CPL_DLL RegisterOGRTAB();
435void CPL_DLL RegisterOGRMIF();
436void CPL_DLL RegisterOGROGDI();
437void CPL_DLL RegisterOGRODBC();
438void CPL_DLL RegisterOGRWAsP();
439void CPL_DLL RegisterOGRPG();
440void CPL_DLL RegisterOGRMSSQLSpatial();
441void CPL_DLL RegisterOGRMySQL();
442void CPL_DLL RegisterOGROCI();
443void CPL_DLL RegisterOGRDGN();
444void CPL_DLL RegisterOGRGML();
445void CPL_DLL RegisterOGRLIBKML();
446void CPL_DLL RegisterOGRKML();
447void CPL_DLL RegisterOGRGeoJSON();
448void CPL_DLL RegisterOGRESRIJSON();
449void CPL_DLL RegisterOGRTopoJSON();
450void CPL_DLL RegisterOGRAVCBin();
451void CPL_DLL RegisterOGRAVCE00();
452void CPL_DLL RegisterOGRREC();
453void CPL_DLL RegisterOGRMEM();
454void CPL_DLL RegisterOGRVRT();
455void CPL_DLL RegisterOGRDODS();
456void CPL_DLL RegisterOGRSQLite();
457void CPL_DLL RegisterOGRCSV();
458void CPL_DLL RegisterOGRILI1();
459void CPL_DLL RegisterOGRILI2();
460void CPL_DLL RegisterOGRGRASS();
461void CPL_DLL RegisterOGRPGeo();
462void CPL_DLL RegisterOGRDXF();
463void CPL_DLL RegisterOGRCAD();
464void CPL_DLL RegisterOGRDWG();
465void CPL_DLL RegisterOGRDGNV8();
466void CPL_DLL RegisterOGRSDE();
467void CPL_DLL RegisterOGRIDB();
468void CPL_DLL RegisterOGRGMT();
469void CPL_DLL RegisterOGRBNA();
470void CPL_DLL RegisterOGRGPX();
471void CPL_DLL RegisterOGRGeoconcept();
472void CPL_DLL RegisterOGRIngres();
473void CPL_DLL RegisterOGRXPlane();
474void CPL_DLL RegisterOGRNAS();
475void CPL_DLL RegisterOGRGeoRSS();
476void CPL_DLL RegisterOGRGTM();
477void CPL_DLL RegisterOGRVFK();
478void CPL_DLL RegisterOGRPGDump();
479void CPL_DLL RegisterOGROSM();
480void CPL_DLL RegisterOGRGPSBabel();
481void CPL_DLL RegisterOGRSUA();
482void CPL_DLL RegisterOGROpenAir();
483void CPL_DLL RegisterOGRPDS();
484void CPL_DLL RegisterOGRWFS();
485void CPL_DLL RegisterOGRWFS3();
486void CPL_DLL RegisterOGRSOSI();
487void CPL_DLL RegisterOGRHTF();
488void CPL_DLL RegisterOGRAeronavFAA();
489void CPL_DLL RegisterOGRGeomedia();
490void CPL_DLL RegisterOGRMDB();
491void CPL_DLL RegisterOGREDIGEO();
492void CPL_DLL RegisterOGRGFT();
493void CPL_DLL RegisterOGRSVG();
494void CPL_DLL RegisterOGRCouchDB();
495void CPL_DLL RegisterOGRCloudant();
496void CPL_DLL RegisterOGRIdrisi();
497void CPL_DLL RegisterOGRARCGEN();
498void CPL_DLL RegisterOGRSEGUKOOA();
499void CPL_DLL RegisterOGRSEGY();
500void CPL_DLL RegisterOGRXLS();
501void CPL_DLL RegisterOGRODS();
502void CPL_DLL RegisterOGRXLSX();
503void CPL_DLL RegisterOGRElastic();
504void CPL_DLL RegisterOGRGeoPackage();
505void CPL_DLL RegisterOGRWalk();
506void CPL_DLL RegisterOGRCarto();
507void CPL_DLL RegisterOGRAmigoCloud();
508void CPL_DLL RegisterOGRSXF();
509void CPL_DLL RegisterOGROpenFileGDB();
510void CPL_DLL RegisterOGRSelafin();
511void CPL_DLL RegisterOGRJML();
512void CPL_DLL RegisterOGRPLSCENES();
513void CPL_DLL RegisterOGRCSW();
514void CPL_DLL RegisterOGRMongoDB();
515void CPL_DLL RegisterOGRVDV();
516void CPL_DLL RegisterOGRGMLAS();
517void CPL_DLL RegisterOGRMVT();
518// @endcond
519
520CPL_C_END
521
522#endif /* ndef OGRSF_FRMTS_H_INCLUDED */
Definition: ogrsf_frmts.h:316
Definition: ogrsf_frmts.h:71
FeatureIterator begin()
virtual void SetSpatialFilter(OGRGeometry *)
Set a new spatial filter.
friend FeatureIterator begin(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:285
virtual OGRErr ICreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT
Create and write a new feature within a layer.
virtual OGRFeature * GetNextFeature() CPL_WARN_UNUSED_RESULT=0
Fetch the next available feature from this layer.
virtual void SetSpatialFilterRect(int iGeomField, double dfMinX, double dfMinY, double dfMaxX, double dfMaxY)
Set a new rectangular spatial filter.
static OGRLayerH ToHandle(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:252
friend FeatureIterator end(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:290
FeatureIterator end()
virtual OGRErr SetAttributeFilter(const char *)
Set a new attribute query.
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
virtual void SetSpatialFilterRect(double dfMinX, double dfMinY, double dfMaxX, double dfMaxY)
Set a new rectangular spatial filter.
virtual OGRErr ISetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT
Rewrite an existing feature.
virtual OGRGeometry * GetSpatialFilter()
This method returns the current spatial filter for this layer.
virtual void SetSpatialFilter(int iGeomField, OGRGeometry *)
Set a new spatial filter.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Definition: ogrsf_frmts.h:258
Definition: ogrsf_frmts.h:384
Definition: ogrsf_frmts.h:349
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:285
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:290