OGR
ogrsf_frmts.h
Go to the documentation of this file.
1 /******************************************************************************
2  * $Id: ogrsf_frmts.h 23554 2011-12-12 18:10:25Z 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  *
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 "ogr_feature.h"
34 #include "ogr_featurestyle.h"
35 
42 class OGRLayerAttrIndex;
43 class OGRSFDriver;
44 
45 /************************************************************************/
46 /* OGRLayer */
47 /************************************************************************/
48 
54 class CPL_DLL OGRLayer
55 {
56  protected:
57  int m_bFilterIsEnvelope;
58  OGRGeometry *m_poFilterGeom;
59  OGREnvelope m_sFilterEnvelope;
60 
61  int FilterGeometry( OGRGeometry * );
62  int InstallFilter( OGRGeometry * );
63 
64  public:
65  OGRLayer();
66  virtual ~OGRLayer();
67 
68  virtual OGRGeometry *GetSpatialFilter();
69  virtual void SetSpatialFilter( OGRGeometry * );
70  virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
71  double dfMaxX, double dfMaxY );
72 
73  virtual OGRErr SetAttributeFilter( const char * );
74 
75  virtual void ResetReading() = 0;
76  virtual OGRFeature *GetNextFeature() = 0;
77  virtual OGRErr SetNextByIndex( long nIndex );
78  virtual OGRFeature *GetFeature( long nFID );
79  virtual OGRErr SetFeature( OGRFeature *poFeature );
80  virtual OGRErr CreateFeature( OGRFeature *poFeature );
81  virtual OGRErr DeleteFeature( long nFID );
82 
83  virtual const char *GetName();
84  virtual OGRwkbGeometryType GetGeomType();
85  virtual OGRFeatureDefn *GetLayerDefn() = 0;
86 
87  virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
88 
89  virtual int GetFeatureCount( int bForce = TRUE );
90  virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
91 
92  virtual int TestCapability( const char * ) = 0;
93 
94  virtual const char *GetInfo( const char * );
95 
96  virtual OGRErr CreateField( OGRFieldDefn *poField,
97  int bApproxOK = TRUE );
98  virtual OGRErr DeleteField( int iField );
99  virtual OGRErr ReorderFields( int* panMap );
100  virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlags );
101 
102  virtual OGRErr SyncToDisk();
103 
104  virtual OGRStyleTable *GetStyleTable();
105  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
106 
107  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
108 
109  virtual OGRErr StartTransaction();
110  virtual OGRErr CommitTransaction();
111  virtual OGRErr RollbackTransaction();
112 
113  virtual const char *GetFIDColumn();
114  virtual const char *GetGeometryColumn();
115 
116  virtual OGRErr SetIgnoredFields( const char **papszFields );
117 
118  int Reference();
119  int Dereference();
120  int GetRefCount() const;
121 
122  GIntBig GetFeaturesRead();
123 
124  /* non virtual : conveniency wrapper for ReorderFields() */
125  OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
126 
127  int AttributeFilterEvaluationNeedsGeometry();
128 
129  /* consider these private */
130  OGRErr InitializeIndexSupport( const char * );
131  OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
132 
133  protected:
134  OGRStyleTable *m_poStyleTable;
135  OGRFeatureQuery *m_poAttrQuery;
136  OGRLayerAttrIndex *m_poAttrIndex;
137 
138  int m_nRefCount;
139 
140  GIntBig m_nFeaturesRead;
141 };
142 
143 
144 /************************************************************************/
145 /* OGRDataSource */
146 /************************************************************************/
147 
158 class CPL_DLL OGRDataSource
159 {
160  friend class OGRSFDriverRegistrar;
161 
162  void *m_hMutex;
163 
164  public:
165 
166  OGRDataSource();
167  virtual ~OGRDataSource();
168  static void DestroyDataSource( OGRDataSource * );
169 
170  virtual const char *GetName() = 0;
171 
172  virtual int GetLayerCount() = 0;
173  virtual OGRLayer *GetLayer(int) = 0;
174  virtual OGRLayer *GetLayerByName(const char *);
175  virtual OGRErr DeleteLayer(int);
176 
177  virtual int TestCapability( const char * ) = 0;
178 
179  virtual OGRLayer *CreateLayer( const char *pszName,
180  OGRSpatialReference *poSpatialRef = NULL,
182  char ** papszOptions = NULL );
183  virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
184  const char *pszNewName,
185  char **papszOptions = NULL );
186 
187  virtual OGRStyleTable *GetStyleTable();
188  virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
189 
190  virtual void SetStyleTable(OGRStyleTable *poStyleTable);
191 
192  virtual OGRLayer * ExecuteSQL( const char *pszStatement,
193  OGRGeometry *poSpatialFilter,
194  const char *pszDialect );
195  virtual void ReleaseResultSet( OGRLayer * poResultsSet );
196 
197  virtual OGRErr SyncToDisk();
198 
199  int Reference();
200  int Dereference();
201  int GetRefCount() const;
202  int GetSummaryRefCount() const;
203  OGRErr Release();
204 
205  OGRSFDriver *GetDriver() const;
206  void SetDriver( OGRSFDriver *poDriver );
207 
208  protected:
209 
210  OGRErr ProcessSQLCreateIndex( const char * );
211  OGRErr ProcessSQLDropIndex( const char * );
212  OGRErr ProcessSQLDropTable( const char * );
213  OGRErr ProcessSQLAlterTableAddColumn( const char * );
214  OGRErr ProcessSQLAlterTableDropColumn( const char * );
215  OGRErr ProcessSQLAlterTableAlterColumn( const char * );
216  OGRErr ProcessSQLAlterTableRenameColumn( const char * );
217 
218  OGRStyleTable *m_poStyleTable;
219  int m_nRefCount;
220  OGRSFDriver *m_poDriver;
221 };
222 
223 /************************************************************************/
224 /* OGRSFDriver */
225 /************************************************************************/
226 
236 class CPL_DLL OGRSFDriver
237 {
238  public:
239  virtual ~OGRSFDriver();
240 
241  virtual const char *GetName() = 0;
242 
243  virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
244 
245  virtual int TestCapability( const char * ) = 0;
246 
247  virtual OGRDataSource *CreateDataSource( const char *pszName,
248  char ** = NULL );
249  virtual OGRErr DeleteDataSource( const char *pszName );
250 
251  virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
252  const char *pszNewName,
253  char **papszOptions = NULL );
254 };
255 
256 
257 /************************************************************************/
258 /* OGRSFDriverRegistrar */
259 /************************************************************************/
260 
269 class CPL_DLL OGRSFDriverRegistrar
270 {
271  int nDrivers;
272  OGRSFDriver **papoDrivers;
273 
275 
276  int nOpenDSCount;
277  char **papszOpenDSRawName;
278  OGRDataSource **papoOpenDS;
279  OGRSFDriver **papoOpenDSDriver;
280  GIntBig *panOpenDSPID;
281 
282  public:
283 
285 
286  static OGRSFDriverRegistrar *GetRegistrar();
287  static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
288  OGRSFDriver ** ppoDriver = NULL );
289 
290  OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
291  OGRSFDriver ** ppoDriver = NULL );
292  OGRErr ReleaseDataSource( OGRDataSource * );
293 
294  void RegisterDriver( OGRSFDriver * poDriver );
295  void DeregisterDriver( OGRSFDriver * poDriver );
296 
297  int GetDriverCount( void );
298  OGRSFDriver *GetDriver( int iDriver );
299  OGRSFDriver *GetDriverByName( const char * );
300 
301  int GetOpenDSCount() { return nOpenDSCount; }
302  OGRDataSource *GetOpenDS( int );
303 
304  void AutoLoadDrivers();
305 };
306 
307 /* -------------------------------------------------------------------- */
308 /* Various available registration methods. */
309 /* -------------------------------------------------------------------- */
310 CPL_C_START
311 void CPL_DLL OGRRegisterAll();
312 
313 void CPL_DLL RegisterOGRFileGDB();
314 void CPL_DLL RegisterOGRShape();
315 void CPL_DLL RegisterOGRNTF();
316 void CPL_DLL RegisterOGRFME();
317 void CPL_DLL RegisterOGRSDTS();
318 void CPL_DLL RegisterOGRTiger();
319 void CPL_DLL RegisterOGRS57();
320 void CPL_DLL RegisterOGRTAB();
321 void CPL_DLL RegisterOGRMIF();
322 void CPL_DLL RegisterOGROGDI();
323 void CPL_DLL RegisterOGRODBC();
324 void CPL_DLL RegisterOGRPG();
325 void CPL_DLL RegisterOGRMSSQLSpatial();
326 void CPL_DLL RegisterOGRMySQL();
327 void CPL_DLL RegisterOGROCI();
328 void CPL_DLL RegisterOGRDGN();
329 void CPL_DLL RegisterOGRGML();
330 void CPL_DLL RegisterOGRLIBKML();
331 void CPL_DLL RegisterOGRKML();
332 void CPL_DLL RegisterOGRGeoJSON();
333 void CPL_DLL RegisterOGRAVCBin();
334 void CPL_DLL RegisterOGRAVCE00();
335 void CPL_DLL RegisterOGRREC();
336 void CPL_DLL RegisterOGRMEM();
337 void CPL_DLL RegisterOGRVRT();
338 void CPL_DLL RegisterOGRDODS();
339 void CPL_DLL RegisterOGRSQLite();
340 void CPL_DLL RegisterOGRCSV();
341 void CPL_DLL RegisterOGRILI1();
342 void CPL_DLL RegisterOGRILI2();
343 void CPL_DLL RegisterOGRGRASS();
344 void CPL_DLL RegisterOGRPGeo();
345 void CPL_DLL RegisterOGRDXFDWG();
346 void CPL_DLL RegisterOGRDXF();
347 void CPL_DLL RegisterOGRDWG();
348 void CPL_DLL RegisterOGRSDE();
349 void CPL_DLL RegisterOGRIDB();
350 void CPL_DLL RegisterOGRGMT();
351 void CPL_DLL RegisterOGRBNA();
352 void CPL_DLL RegisterOGRGPX();
353 void CPL_DLL RegisterOGRGeoconcept();
354 void CPL_DLL RegisterOGRIngres();
355 void CPL_DLL RegisterOGRPCIDSK();
356 void CPL_DLL RegisterOGRXPlane();
357 void CPL_DLL RegisterOGRNAS();
358 void CPL_DLL RegisterOGRGeoRSS();
359 void CPL_DLL RegisterOGRGTM();
360 void CPL_DLL RegisterOGRVFK();
361 void CPL_DLL RegisterOGRPGDump();
362 void CPL_DLL RegisterOGRGPSBabel();
363 void CPL_DLL RegisterOGRSUA();
364 void CPL_DLL RegisterOGROpenAir();
365 void CPL_DLL RegisterOGRPDS();
366 void CPL_DLL RegisterOGRWFS();
367 void CPL_DLL RegisterOGRSOSI();
368 void CPL_DLL RegisterOGRHTF();
369 void CPL_DLL RegisterOGRAeronavFAA();
370 void CPL_DLL RegisterOGRGeomedia();
371 void CPL_DLL RegisterOGRMDB();
372 void CPL_DLL RegisterOGREDIGEO();
373 void CPL_DLL RegisterOGRGFT();
374 void CPL_DLL RegisterOGRSVG();
375 void CPL_DLL RegisterOGRCouchDB();
376 void CPL_DLL RegisterOGRIdrisi();
377 void CPL_DLL RegisterOGRARCGEN();
378 void CPL_DLL RegisterOGRSEGUKOOA();
379 void CPL_DLL RegisterOGRSEGY();
380 void CPL_DLL RegisterOGRXLS();
381 CPL_C_END
382 
383 
384 #endif /* ndef _OGRSF_FRMTS_H_INCLUDED */

Generated for GDAL by doxygen 1.8.3.1.