OGR
ogrsf_frmts.h
Go to the documentation of this file.
1 /******************************************************************************
2  * $Id: ogrsf_frmts.h 27044 2014-03-16 23:41:27Z rouault $
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 
44 class OGRLayerAttrIndex;
45 class OGRSFDriver;
46 
47 /************************************************************************/
48 /* OGRLayer */
49 /************************************************************************/
50 
56 /* Note: any virtual method added to this class must also be added in the */
57 /* OGRLayerDecorator and OGRMutexedLayer classes. */
58 
59 class CPL_DLL OGRLayer
60 {
61  protected:
62  int m_bFilterIsEnvelope;
63  OGRGeometry *m_poFilterGeom;
64  OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */
65  OGREnvelope m_sFilterEnvelope;
66  int m_iGeomFieldFilter; // specify the index on which the spatial
67  // filter is active.
68 
69  int FilterGeometry( OGRGeometry * );
70  //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
71  int InstallFilter( OGRGeometry * );
72 
73  OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce );
74 
75  public:
76  OGRLayer();
77  virtual ~OGRLayer();
78 
79  virtual OGRGeometry *GetSpatialFilter();
80  virtual void SetSpatialFilter( OGRGeometry * );
81  virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
82  double dfMaxX, double dfMaxY );
83 
84  virtual void SetSpatialFilter( int iGeomField, OGRGeometry * );
85  virtual void SetSpatialFilterRect( int iGeomField,
86  double dfMinX, double dfMinY,
87  double dfMaxX, double dfMaxY );
88 
89  virtual OGRErr SetAttributeFilter( const char * );
90 
91  virtual void ResetReading() = 0;
92  virtual OGRFeature *GetNextFeature() = 0;
93  virtual OGRErr SetNextByIndex( long nIndex );
94  virtual OGRFeature *GetFeature( long nFID );
95  virtual OGRErr SetFeature( OGRFeature *poFeature );
96  virtual OGRErr CreateFeature( OGRFeature *poFeature );
97  virtual OGRErr DeleteFeature( long nFID );
98 
99  virtual const char *GetName();
100  virtual OGRwkbGeometryType GetGeomType();
101  virtual OGRFeatureDefn *GetLayerDefn() = 0;
102  virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch );
103 
104  virtual OGRSpatialReference *GetSpatialRef();
105 
106  virtual int GetFeatureCount( int bForce = TRUE );
107  virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
108  virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
109  int bForce = TRUE);
110 
111  virtual int TestCapability( const char * ) = 0;
112 
113  virtual const char *GetInfo( const char * );
114 
115  virtual OGRErr CreateField( OGRFieldDefn *poField,
116  int bApproxOK = TRUE );
117  virtual OGRErr DeleteField( int iField );
118  virtual OGRErr ReorderFields( int* panMap );
119  virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlags );
120 
121  virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
122  int bApproxOK = TRUE );
123 
124  virtual OGRErr SyncToDisk();
125 
126  virtual OGRStyleTable *GetStyleTable();
127  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
128 
129  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
130 
131  virtual OGRErr StartTransaction();
132  virtual OGRErr CommitTransaction();
133  virtual OGRErr RollbackTransaction();
134 
135  virtual const char *GetFIDColumn();
136  virtual const char *GetGeometryColumn();
137 
138  virtual OGRErr SetIgnoredFields( const char **papszFields );
139 
140  OGRErr Intersection( OGRLayer *pLayerMethod,
141  OGRLayer *pLayerResult,
142  char** papszOptions = NULL,
143  GDALProgressFunc pfnProgress = NULL,
144  void * pProgressArg = NULL );
145  OGRErr Union( OGRLayer *pLayerMethod,
146  OGRLayer *pLayerResult,
147  char** papszOptions = NULL,
148  GDALProgressFunc pfnProgress = NULL,
149  void * pProgressArg = NULL );
150  OGRErr SymDifference( OGRLayer *pLayerMethod,
151  OGRLayer *pLayerResult,
152  char** papszOptions,
153  GDALProgressFunc pfnProgress,
154  void * pProgressArg );
155  OGRErr Identity( OGRLayer *pLayerMethod,
156  OGRLayer *pLayerResult,
157  char** papszOptions = NULL,
158  GDALProgressFunc pfnProgress = NULL,
159  void * pProgressArg = NULL );
160  OGRErr Update( OGRLayer *pLayerMethod,
161  OGRLayer *pLayerResult,
162  char** papszOptions = NULL,
163  GDALProgressFunc pfnProgress = NULL,
164  void * pProgressArg = NULL );
165  OGRErr Clip( OGRLayer *pLayerMethod,
166  OGRLayer *pLayerResult,
167  char** papszOptions = NULL,
168  GDALProgressFunc pfnProgress = NULL,
169  void * pProgressArg = NULL );
170  OGRErr Erase( OGRLayer *pLayerMethod,
171  OGRLayer *pLayerResult,
172  char** papszOptions = NULL,
173  GDALProgressFunc pfnProgress = NULL,
174  void * pProgressArg = NULL );
175 
176  int Reference();
177  int Dereference();
178  int GetRefCount() const;
179 
180  GIntBig GetFeaturesRead();
181 
182  /* non virtual : conveniency wrapper for ReorderFields() */
183  OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
184 
185  int AttributeFilterEvaluationNeedsGeometry();
186 
187  /* consider these private */
188  OGRErr InitializeIndexSupport( const char * );
189  OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
190 
191  protected:
192  OGRStyleTable *m_poStyleTable;
193  OGRFeatureQuery *m_poAttrQuery;
194  char *m_pszAttrQueryString;
195  OGRLayerAttrIndex *m_poAttrIndex;
196 
197  int m_nRefCount;
198 
199  GIntBig m_nFeaturesRead;
200 };
201 
202 
203 /************************************************************************/
204 /* OGRDataSource */
205 /************************************************************************/
206 
217 class CPL_DLL OGRDataSource
218 {
219  friend class OGRSFDriverRegistrar;
220 
221  void *m_hMutex;
222 
223  OGRLayer* BuildLayerFromSelectInfo(void* psSelectInfo,
224  OGRGeometry *poSpatialFilter,
225  const char *pszDialect);
226 
227  public:
228 
229  OGRDataSource();
230  virtual ~OGRDataSource();
231  static void DestroyDataSource( OGRDataSource * );
232 
233  virtual const char *GetName() = 0;
234 
235  virtual int GetLayerCount() = 0;
236  virtual OGRLayer *GetLayer(int) = 0;
237  virtual OGRLayer *GetLayerByName(const char *);
238  virtual OGRErr DeleteLayer(int);
239 
240  virtual int TestCapability( const char * ) = 0;
241 
242  virtual OGRLayer *CreateLayer( const char *pszName,
243  OGRSpatialReference *poSpatialRef = NULL,
245  char ** papszOptions = NULL );
246  virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
247  const char *pszNewName,
248  char **papszOptions = NULL );
249 
250  virtual OGRStyleTable *GetStyleTable();
251  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
252 
253  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
254 
255  virtual OGRLayer * ExecuteSQL( const char *pszStatement,
256  OGRGeometry *poSpatialFilter,
257  const char *pszDialect );
258  virtual void ReleaseResultSet( OGRLayer * poResultsSet );
259 
260  virtual OGRErr SyncToDisk();
261 
262  int Reference();
263  int Dereference();
264  int GetRefCount() const;
265  int GetSummaryRefCount() const;
266  OGRErr Release();
267 
268  OGRSFDriver *GetDriver() const;
269  void SetDriver( OGRSFDriver *poDriver );
270 
271  static int IsGenericSQLDialect(const char* pszDialect);
272 
273  protected:
274 
275  OGRErr ProcessSQLCreateIndex( const char * );
276  OGRErr ProcessSQLDropIndex( const char * );
277  OGRErr ProcessSQLDropTable( const char * );
278  OGRErr ProcessSQLAlterTableAddColumn( const char * );
279  OGRErr ProcessSQLAlterTableDropColumn( const char * );
280  OGRErr ProcessSQLAlterTableAlterColumn( const char * );
281  OGRErr ProcessSQLAlterTableRenameColumn( const char * );
282 
283  OGRStyleTable *m_poStyleTable;
284  int m_nRefCount;
285  OGRSFDriver *m_poDriver;
286 };
287 
288 /************************************************************************/
289 /* OGRSFDriver */
290 /************************************************************************/
291 
301 class CPL_DLL OGRSFDriver
302 {
303  public:
304  virtual ~OGRSFDriver();
305 
306  virtual const char *GetName() = 0;
307 
308  virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
309 
310  virtual int TestCapability( const char * ) = 0;
311 
312  virtual OGRDataSource *CreateDataSource( const char *pszName,
313  char ** = NULL );
314  virtual OGRErr DeleteDataSource( const char *pszName );
315 
316  virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
317  const char *pszNewName,
318  char **papszOptions = NULL );
319 };
320 
321 
322 /************************************************************************/
323 /* OGRSFDriverRegistrar */
324 /************************************************************************/
325 
334 class CPL_DLL OGRSFDriverRegistrar
335 {
336  int nDrivers;
337  OGRSFDriver **papoDrivers;
338 
340 
341  int nOpenDSCount;
342  char **papszOpenDSRawName;
343  OGRDataSource **papoOpenDS;
344  OGRSFDriver **papoOpenDSDriver;
345  GIntBig *panOpenDSPID;
346 
347  public:
348 
350 
351  static OGRSFDriverRegistrar *GetRegistrar();
352  static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
353  OGRSFDriver ** ppoDriver = NULL );
354 
355  OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
356  OGRSFDriver ** ppoDriver = NULL );
357  OGRErr ReleaseDataSource( OGRDataSource * );
358 
359  void RegisterDriver( OGRSFDriver * poDriver );
360  void DeregisterDriver( OGRSFDriver * poDriver );
361 
362  int GetDriverCount( void );
363  OGRSFDriver *GetDriver( int iDriver );
364  OGRSFDriver *GetDriverByName( const char * );
365 
366  int GetOpenDSCount() { return nOpenDSCount; }
367  OGRDataSource *GetOpenDS( int );
368 
369  void AutoLoadDrivers();
370 };
371 
372 /* -------------------------------------------------------------------- */
373 /* Various available registration methods. */
374 /* -------------------------------------------------------------------- */
375 CPL_C_START
376 void CPL_DLL OGRRegisterAll();
377 
378 void CPL_DLL RegisterOGRFileGDB();
379 void CPL_DLL RegisterOGRShape();
380 void CPL_DLL RegisterOGRNTF();
381 void CPL_DLL RegisterOGRFME();
382 void CPL_DLL RegisterOGRSDTS();
383 void CPL_DLL RegisterOGRTiger();
384 void CPL_DLL RegisterOGRS57();
385 void CPL_DLL RegisterOGRTAB();
386 void CPL_DLL RegisterOGRMIF();
387 void CPL_DLL RegisterOGROGDI();
388 void CPL_DLL RegisterOGRODBC();
389 void CPL_DLL RegisterOGRWAsP();
390 void CPL_DLL RegisterOGRPG();
391 void CPL_DLL RegisterOGRMSSQLSpatial();
392 void CPL_DLL RegisterOGRMySQL();
393 void CPL_DLL RegisterOGROCI();
394 void CPL_DLL RegisterOGRDGN();
395 void CPL_DLL RegisterOGRGML();
396 void CPL_DLL RegisterOGRLIBKML();
397 void CPL_DLL RegisterOGRKML();
398 void CPL_DLL RegisterOGRGeoJSON();
399 void CPL_DLL RegisterOGRAVCBin();
400 void CPL_DLL RegisterOGRAVCE00();
401 void CPL_DLL RegisterOGRREC();
402 void CPL_DLL RegisterOGRMEM();
403 void CPL_DLL RegisterOGRVRT();
404 void CPL_DLL RegisterOGRDODS();
405 void CPL_DLL RegisterOGRSQLite();
406 void CPL_DLL RegisterOGRCSV();
407 void CPL_DLL RegisterOGRILI1();
408 void CPL_DLL RegisterOGRILI2();
409 void CPL_DLL RegisterOGRGRASS();
410 void CPL_DLL RegisterOGRPGeo();
411 void CPL_DLL RegisterOGRDXFDWG();
412 void CPL_DLL RegisterOGRDXF();
413 void CPL_DLL RegisterOGRDWG();
414 void CPL_DLL RegisterOGRSDE();
415 void CPL_DLL RegisterOGRIDB();
416 void CPL_DLL RegisterOGRGMT();
417 void CPL_DLL RegisterOGRBNA();
418 void CPL_DLL RegisterOGRGPX();
419 void CPL_DLL RegisterOGRGeoconcept();
420 void CPL_DLL RegisterOGRIngres();
421 void CPL_DLL RegisterOGRPCIDSK();
422 void CPL_DLL RegisterOGRXPlane();
423 void CPL_DLL RegisterOGRNAS();
424 void CPL_DLL RegisterOGRGeoRSS();
425 void CPL_DLL RegisterOGRGTM();
426 void CPL_DLL RegisterOGRVFK();
427 void CPL_DLL RegisterOGRPGDump();
428 void CPL_DLL RegisterOGROSM();
429 void CPL_DLL RegisterOGRGPSBabel();
430 void CPL_DLL RegisterOGRSUA();
431 void CPL_DLL RegisterOGROpenAir();
432 void CPL_DLL RegisterOGRPDS();
433 void CPL_DLL RegisterOGRWFS();
434 void CPL_DLL RegisterOGRSOSI();
435 void CPL_DLL RegisterOGRHTF();
436 void CPL_DLL RegisterOGRAeronavFAA();
437 void CPL_DLL RegisterOGRGeomedia();
438 void CPL_DLL RegisterOGRMDB();
439 void CPL_DLL RegisterOGREDIGEO();
440 void CPL_DLL RegisterOGRGFT();
441 void CPL_DLL RegisterOGRGME();
442 void CPL_DLL RegisterOGRSVG();
443 void CPL_DLL RegisterOGRCouchDB();
444 void CPL_DLL RegisterOGRIdrisi();
445 void CPL_DLL RegisterOGRARCGEN();
446 void CPL_DLL RegisterOGRSEGUKOOA();
447 void CPL_DLL RegisterOGRSEGY();
448 void CPL_DLL RegisterOGRXLS();
449 void CPL_DLL RegisterOGRODS();
450 void CPL_DLL RegisterOGRXLSX();
451 void CPL_DLL RegisterOGRElastic();
452 void CPL_DLL RegisterOGRGeoPackage();
453 void CPL_DLL RegisterOGRPDF();
454 void CPL_DLL RegisterOGRWalk();
455 void CPL_DLL RegisterOGRCartoDB();
456 void CPL_DLL RegisterOGRSXF();
457 void CPL_DLL RegisterOGROpenFileGDB();
458 CPL_C_END
459 
460 
461 #endif /* ndef _OGRSF_FRMTS_H_INCLUDED */
Definition: ogrsf_frmts.h:217
void OGRRegisterAll()
Register all drivers.
Definition: ogrregisterall.cpp:39
Definition: ogr_feature.h:112
Definition: ogr_feature.h:167
Definition: ogr_core.h:310
Definition: ogr_feature.h:52
OGRwkbGeometryType
Definition: ogr_core.h:308
Definition: ogr_geometry.h:79
Definition: ogr_feature.h:384
Definition: ogr_spatialref.h:129
Definition: ogrsf_frmts.h:334
OGRSFDriver * GetDriver(int iDriver)
Fetch the indicated driver.
Definition: ogrsfdriverregistrar.cpp:692
Definition: ogr_core.h:48
Definition: ogrsf_frmts.h:59
Definition: ogr_feature.h:232
Definition: ogr_featurestyle.h:81
int GetOpenDSCount()
Return the number of opened datasources.
Definition: ogrsf_frmts.h:366
Definition: ogr_attrind.h:66
Definition: ogrsf_frmts.h:301

Generated for GDAL by doxygen 1.8.11.