OGR
ogrsf_frmts.h
Go to the documentation of this file.
1 /******************************************************************************
2  * $Id: ogrsf_frmts.h 25581 2013-01-29 20:42:37Z warmerdam $
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  *
11  * Permission is hereby granted, free of charge, to any person obtaining a
12  * copy of this software and associated documentation files (the "Software"),
13  * to deal in the Software without restriction, including without limitation
14  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  * and/or sell copies of the Software, and to permit persons to whom the
16  * Software is furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included
19  * in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  * DEALINGS IN THE SOFTWARE.
28  ****************************************************************************/
29 
30 #ifndef _OGRSF_FRMTS_H_INCLUDED
31 #define _OGRSF_FRMTS_H_INCLUDED
32 
33 #include "cpl_progress.h"
34 #include "ogr_feature.h"
35 #include "ogr_featurestyle.h"
36 
43 class OGRLayerAttrIndex;
44 class OGRSFDriver;
45 
46 /************************************************************************/
47 /* OGRLayer */
48 /************************************************************************/
49 
55 /* Note: any virtual method added to this class must also be added in the */
56 /* OGRLayerDecorator class. */
57 
58 class CPL_DLL OGRLayer
59 {
60  protected:
61  int m_bFilterIsEnvelope;
62  OGRGeometry *m_poFilterGeom;
63  OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */
64  OGREnvelope m_sFilterEnvelope;
65 
66  int FilterGeometry( OGRGeometry * );
67  //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
68  int InstallFilter( OGRGeometry * );
69 
70  public:
71  OGRLayer();
72  virtual ~OGRLayer();
73 
74  virtual OGRGeometry *GetSpatialFilter();
75  virtual void SetSpatialFilter( OGRGeometry * );
76  virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
77  double dfMaxX, double dfMaxY );
78 
79  virtual OGRErr SetAttributeFilter( const char * );
80 
81  virtual void ResetReading() = 0;
82  virtual OGRFeature *GetNextFeature() = 0;
83  virtual OGRErr SetNextByIndex( long nIndex );
84  virtual OGRFeature *GetFeature( long nFID );
85  virtual OGRErr SetFeature( OGRFeature *poFeature );
86  virtual OGRErr CreateFeature( OGRFeature *poFeature );
87  virtual OGRErr DeleteFeature( long nFID );
88 
89  virtual const char *GetName();
90  virtual OGRwkbGeometryType GetGeomType();
91  virtual OGRFeatureDefn *GetLayerDefn() = 0;
92 
93  virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
94 
95  virtual int GetFeatureCount( int bForce = TRUE );
96  virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
97 
98  virtual int TestCapability( const char * ) = 0;
99 
100  virtual const char *GetInfo( const char * );
101 
102  virtual OGRErr CreateField( OGRFieldDefn *poField,
103  int bApproxOK = TRUE );
104  virtual OGRErr DeleteField( int iField );
105  virtual OGRErr ReorderFields( int* panMap );
106  virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlags );
107 
108  virtual OGRErr SyncToDisk();
109 
110  virtual OGRStyleTable *GetStyleTable();
111  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
112 
113  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
114 
115  virtual OGRErr StartTransaction();
116  virtual OGRErr CommitTransaction();
117  virtual OGRErr RollbackTransaction();
118 
119  virtual const char *GetFIDColumn();
120  virtual const char *GetGeometryColumn();
121 
122  virtual OGRErr SetIgnoredFields( const char **papszFields );
123 
124  OGRErr Intersection( OGRLayer *pLayerMethod,
125  OGRLayer *pLayerResult,
126  char** papszOptions = NULL,
127  GDALProgressFunc pfnProgress = NULL,
128  void * pProgressArg = NULL );
129  OGRErr Union( OGRLayer *pLayerMethod,
130  OGRLayer *pLayerResult,
131  char** papszOptions = NULL,
132  GDALProgressFunc pfnProgress = NULL,
133  void * pProgressArg = NULL );
134  OGRErr SymDifference( OGRLayer *pLayerMethod,
135  OGRLayer *pLayerResult,
136  char** papszOptions,
137  GDALProgressFunc pfnProgress,
138  void * pProgressArg );
139  OGRErr Identity( OGRLayer *pLayerMethod,
140  OGRLayer *pLayerResult,
141  char** papszOptions = NULL,
142  GDALProgressFunc pfnProgress = NULL,
143  void * pProgressArg = NULL );
144  OGRErr Update( OGRLayer *pLayerMethod,
145  OGRLayer *pLayerResult,
146  char** papszOptions = NULL,
147  GDALProgressFunc pfnProgress = NULL,
148  void * pProgressArg = NULL );
149  OGRErr Clip( OGRLayer *pLayerMethod,
150  OGRLayer *pLayerResult,
151  char** papszOptions = NULL,
152  GDALProgressFunc pfnProgress = NULL,
153  void * pProgressArg = NULL );
154  OGRErr Erase( OGRLayer *pLayerMethod,
155  OGRLayer *pLayerResult,
156  char** papszOptions = NULL,
157  GDALProgressFunc pfnProgress = NULL,
158  void * pProgressArg = NULL );
159 
160  int Reference();
161  int Dereference();
162  int GetRefCount() const;
163 
164  GIntBig GetFeaturesRead();
165 
166  /* non virtual : conveniency wrapper for ReorderFields() */
167  OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
168 
169  int AttributeFilterEvaluationNeedsGeometry();
170 
171  /* consider these private */
172  OGRErr InitializeIndexSupport( const char * );
173  OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
174 
175  protected:
176  OGRStyleTable *m_poStyleTable;
177  OGRFeatureQuery *m_poAttrQuery;
178  OGRLayerAttrIndex *m_poAttrIndex;
179 
180  int m_nRefCount;
181 
182  GIntBig m_nFeaturesRead;
183 };
184 
185 
186 /************************************************************************/
187 /* OGRDataSource */
188 /************************************************************************/
189 
200 class CPL_DLL OGRDataSource
201 {
202  friend class OGRSFDriverRegistrar;
203 
204  void *m_hMutex;
205 
206  OGRLayer* BuildLayerFromSelectInfo(void* psSelectInfo,
207  OGRGeometry *poSpatialFilter,
208  const char *pszDialect);
209 
210  public:
211 
212  OGRDataSource();
213  virtual ~OGRDataSource();
214  static void DestroyDataSource( OGRDataSource * );
215 
216  virtual const char *GetName() = 0;
217 
218  virtual int GetLayerCount() = 0;
219  virtual OGRLayer *GetLayer(int) = 0;
220  virtual OGRLayer *GetLayerByName(const char *);
221  virtual OGRErr DeleteLayer(int);
222 
223  virtual int TestCapability( const char * ) = 0;
224 
225  virtual OGRLayer *CreateLayer( const char *pszName,
226  OGRSpatialReference *poSpatialRef = NULL,
228  char ** papszOptions = NULL );
229  virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
230  const char *pszNewName,
231  char **papszOptions = NULL );
232 
233  virtual OGRStyleTable *GetStyleTable();
234  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
235 
236  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
237 
238  virtual OGRLayer * ExecuteSQL( const char *pszStatement,
239  OGRGeometry *poSpatialFilter,
240  const char *pszDialect );
241  virtual void ReleaseResultSet( OGRLayer * poResultsSet );
242 
243  virtual OGRErr SyncToDisk();
244 
245  int Reference();
246  int Dereference();
247  int GetRefCount() const;
248  int GetSummaryRefCount() const;
249  OGRErr Release();
250 
251  OGRSFDriver *GetDriver() const;
252  void SetDriver( OGRSFDriver *poDriver );
253 
254  protected:
255 
256  OGRErr ProcessSQLCreateIndex( const char * );
257  OGRErr ProcessSQLDropIndex( const char * );
258  OGRErr ProcessSQLDropTable( const char * );
259  OGRErr ProcessSQLAlterTableAddColumn( const char * );
260  OGRErr ProcessSQLAlterTableDropColumn( const char * );
261  OGRErr ProcessSQLAlterTableAlterColumn( const char * );
262  OGRErr ProcessSQLAlterTableRenameColumn( const char * );
263 
264  OGRStyleTable *m_poStyleTable;
265  int m_nRefCount;
266  OGRSFDriver *m_poDriver;
267 };
268 
269 /************************************************************************/
270 /* OGRSFDriver */
271 /************************************************************************/
272 
282 class CPL_DLL OGRSFDriver
283 {
284  public:
285  virtual ~OGRSFDriver();
286 
287  virtual const char *GetName() = 0;
288 
289  virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
290 
291  virtual int TestCapability( const char * ) = 0;
292 
293  virtual OGRDataSource *CreateDataSource( const char *pszName,
294  char ** = NULL );
295  virtual OGRErr DeleteDataSource( const char *pszName );
296 
297  virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
298  const char *pszNewName,
299  char **papszOptions = NULL );
300 };
301 
302 
303 /************************************************************************/
304 /* OGRSFDriverRegistrar */
305 /************************************************************************/
306 
315 class CPL_DLL OGRSFDriverRegistrar
316 {
317  int nDrivers;
318  OGRSFDriver **papoDrivers;
319 
321 
322  int nOpenDSCount;
323  char **papszOpenDSRawName;
324  OGRDataSource **papoOpenDS;
325  OGRSFDriver **papoOpenDSDriver;
326  GIntBig *panOpenDSPID;
327 
328  public:
329 
331 
332  static OGRSFDriverRegistrar *GetRegistrar();
333  static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
334  OGRSFDriver ** ppoDriver = NULL );
335 
336  OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
337  OGRSFDriver ** ppoDriver = NULL );
338  OGRErr ReleaseDataSource( OGRDataSource * );
339 
340  void RegisterDriver( OGRSFDriver * poDriver );
341  void DeregisterDriver( OGRSFDriver * poDriver );
342 
343  int GetDriverCount( void );
344  OGRSFDriver *GetDriver( int iDriver );
345  OGRSFDriver *GetDriverByName( const char * );
346 
347  int GetOpenDSCount() { return nOpenDSCount; }
348  OGRDataSource *GetOpenDS( int );
349 
350  void AutoLoadDrivers();
351 };
352 
353 /* -------------------------------------------------------------------- */
354 /* Various available registration methods. */
355 /* -------------------------------------------------------------------- */
356 CPL_C_START
357 void CPL_DLL OGRRegisterAll();
358 
359 void CPL_DLL RegisterOGRFileGDB();
360 void CPL_DLL RegisterOGRShape();
361 void CPL_DLL RegisterOGRNTF();
362 void CPL_DLL RegisterOGRFME();
363 void CPL_DLL RegisterOGRSDTS();
364 void CPL_DLL RegisterOGRTiger();
365 void CPL_DLL RegisterOGRS57();
366 void CPL_DLL RegisterOGRTAB();
367 void CPL_DLL RegisterOGRMIF();
368 void CPL_DLL RegisterOGROGDI();
369 void CPL_DLL RegisterOGRODBC();
370 void CPL_DLL RegisterOGRPG();
371 void CPL_DLL RegisterOGRMSSQLSpatial();
372 void CPL_DLL RegisterOGRMySQL();
373 void CPL_DLL RegisterOGROCI();
374 void CPL_DLL RegisterOGRDGN();
375 void CPL_DLL RegisterOGRGML();
376 void CPL_DLL RegisterOGRLIBKML();
377 void CPL_DLL RegisterOGRKML();
378 void CPL_DLL RegisterOGRGeoJSON();
379 void CPL_DLL RegisterOGRAVCBin();
380 void CPL_DLL RegisterOGRAVCE00();
381 void CPL_DLL RegisterOGRREC();
382 void CPL_DLL RegisterOGRMEM();
383 void CPL_DLL RegisterOGRVRT();
384 void CPL_DLL RegisterOGRDODS();
385 void CPL_DLL RegisterOGRSQLite();
386 void CPL_DLL RegisterOGRCSV();
387 void CPL_DLL RegisterOGRILI1();
388 void CPL_DLL RegisterOGRILI2();
389 void CPL_DLL RegisterOGRGRASS();
390 void CPL_DLL RegisterOGRPGeo();
391 void CPL_DLL RegisterOGRDXFDWG();
392 void CPL_DLL RegisterOGRDXF();
393 void CPL_DLL RegisterOGRDWG();
394 void CPL_DLL RegisterOGRSDE();
395 void CPL_DLL RegisterOGRIDB();
396 void CPL_DLL RegisterOGRGMT();
397 void CPL_DLL RegisterOGRBNA();
398 void CPL_DLL RegisterOGRGPX();
399 void CPL_DLL RegisterOGRGeoconcept();
400 void CPL_DLL RegisterOGRIngres();
401 void CPL_DLL RegisterOGRPCIDSK();
402 void CPL_DLL RegisterOGRXPlane();
403 void CPL_DLL RegisterOGRNAS();
404 void CPL_DLL RegisterOGRGeoRSS();
405 void CPL_DLL RegisterOGRGTM();
406 void CPL_DLL RegisterOGRVFK();
407 void CPL_DLL RegisterOGRPGDump();
408 void CPL_DLL RegisterOGROSM();
409 void CPL_DLL RegisterOGRGPSBabel();
410 void CPL_DLL RegisterOGRSUA();
411 void CPL_DLL RegisterOGROpenAir();
412 void CPL_DLL RegisterOGRPDS();
413 void CPL_DLL RegisterOGRWFS();
414 void CPL_DLL RegisterOGRSOSI();
415 void CPL_DLL RegisterOGRHTF();
416 void CPL_DLL RegisterOGRAeronavFAA();
417 void CPL_DLL RegisterOGRGeomedia();
418 void CPL_DLL RegisterOGRMDB();
419 void CPL_DLL RegisterOGREDIGEO();
420 void CPL_DLL RegisterOGRGFT();
421 void CPL_DLL RegisterOGRSVG();
422 void CPL_DLL RegisterOGRCouchDB();
423 void CPL_DLL RegisterOGRIdrisi();
424 void CPL_DLL RegisterOGRARCGEN();
425 void CPL_DLL RegisterOGRSEGUKOOA();
426 void CPL_DLL RegisterOGRSEGY();
427 void CPL_DLL RegisterOGRXLS();
428 void CPL_DLL RegisterOGRODS();
429 void CPL_DLL RegisterOGRXLSX();
430 void CPL_DLL RegisterOGRElastic();
431 void CPL_DLL RegisterOGRPDF();
432 CPL_C_END
433 
434 
435 #endif /* ndef _OGRSF_FRMTS_H_INCLUDED */
Definition: ogrsf_frmts.h:200
void OGRRegisterAll()
Register all drivers.
Definition: ogrregisterall.cpp:38
Definition: ogr_feature.h:120
Definition: ogr_core.h:299
Definition: ogr_feature.h:51
OGRwkbGeometryType
Definition: ogr_core.h:297
Definition: ogr_geometry.h:77
Definition: ogr_feature.h:315
Definition: ogr_spatialref.h:128
Definition: ogrsf_frmts.h:315
OGRSFDriver * GetDriver(int iDriver)
Fetch the indicated driver.
Definition: ogrsfdriverregistrar.cpp:692
Definition: ogr_core.h:47
Definition: ogrsf_frmts.h:58
Definition: ogr_feature.h:178
Definition: ogr_featurestyle.h:81
int GetOpenDSCount()
Return the number of opened datasources.
Definition: ogrsf_frmts.h:347
virtual OGRSpatialReference * GetSpatialRef()
Fetch the spatial reference system for this layer.
Definition: ogrsf_frmts.h:93
Definition: ogr_attrind.h:66
Definition: ogrsf_frmts.h:282

Generated for GDAL by doxygen 1.8.9.1.