1 : /******************************************************************************
2 : * $Id: ogrsf_frmts.h 24143 2012-03-19 21:40:42Z 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 :
36 : /**
37 : * \file ogrsf_frmts.h
38 : *
39 : * Classes related to registration of format support, and opening datasets.
40 : */
41 :
42 : class OGRLayerAttrIndex;
43 : class OGRSFDriver;
44 :
45 : /************************************************************************/
46 : /* OGRLayer */
47 : /************************************************************************/
48 :
49 : /**
50 : * This class represents a layer of simple features, with access methods.
51 : *
52 : */
53 :
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 FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
63 : int InstallFilter( OGRGeometry * );
64 :
65 : public:
66 : OGRLayer();
67 : virtual ~OGRLayer();
68 :
69 : virtual OGRGeometry *GetSpatialFilter();
70 : virtual void SetSpatialFilter( OGRGeometry * );
71 : virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
72 : double dfMaxX, double dfMaxY );
73 :
74 : virtual OGRErr SetAttributeFilter( const char * );
75 :
76 : virtual void ResetReading() = 0;
77 : virtual OGRFeature *GetNextFeature() = 0;
78 : virtual OGRErr SetNextByIndex( long nIndex );
79 : virtual OGRFeature *GetFeature( long nFID );
80 : virtual OGRErr SetFeature( OGRFeature *poFeature );
81 : virtual OGRErr CreateFeature( OGRFeature *poFeature );
82 : virtual OGRErr DeleteFeature( long nFID );
83 :
84 : virtual const char *GetName();
85 : virtual OGRwkbGeometryType GetGeomType();
86 : virtual OGRFeatureDefn *GetLayerDefn() = 0;
87 :
88 0 : virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
89 :
90 : virtual int GetFeatureCount( int bForce = TRUE );
91 : virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
92 :
93 : virtual int TestCapability( const char * ) = 0;
94 :
95 : virtual const char *GetInfo( const char * );
96 :
97 : virtual OGRErr CreateField( OGRFieldDefn *poField,
98 : int bApproxOK = TRUE );
99 : virtual OGRErr DeleteField( int iField );
100 : virtual OGRErr ReorderFields( int* panMap );
101 : virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlags );
102 :
103 : virtual OGRErr SyncToDisk();
104 :
105 : virtual OGRStyleTable *GetStyleTable();
106 : virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
107 :
108 : virtual void SetStyleTable(OGRStyleTable *poStyleTable);
109 :
110 : virtual OGRErr StartTransaction();
111 : virtual OGRErr CommitTransaction();
112 : virtual OGRErr RollbackTransaction();
113 :
114 : virtual const char *GetFIDColumn();
115 : virtual const char *GetGeometryColumn();
116 :
117 : virtual OGRErr SetIgnoredFields( const char **papszFields );
118 :
119 : int Reference();
120 : int Dereference();
121 : int GetRefCount() const;
122 :
123 : GIntBig GetFeaturesRead();
124 :
125 : /* non virtual : conveniency wrapper for ReorderFields() */
126 : OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
127 :
128 : int AttributeFilterEvaluationNeedsGeometry();
129 :
130 : /* consider these private */
131 : OGRErr InitializeIndexSupport( const char * );
132 1268 : OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
133 :
134 : protected:
135 : OGRStyleTable *m_poStyleTable;
136 : OGRFeatureQuery *m_poAttrQuery;
137 : OGRLayerAttrIndex *m_poAttrIndex;
138 :
139 : int m_nRefCount;
140 :
141 : GIntBig m_nFeaturesRead;
142 : };
143 :
144 :
145 : /************************************************************************/
146 : /* OGRDataSource */
147 : /************************************************************************/
148 :
149 : /**
150 : * This class represents a data source. A data source potentially
151 : * consists of many layers (OGRLayer). A data source normally consists
152 : * of one, or a related set of files, though the name doesn't have to be
153 : * a real item in the file system.
154 : *
155 : * When an OGRDataSource is destroyed, all it's associated OGRLayers objects
156 : * are also destroyed.
157 : */
158 :
159 : class CPL_DLL OGRDataSource
160 : {
161 : friend class OGRSFDriverRegistrar;
162 :
163 : void *m_hMutex;
164 :
165 : public:
166 :
167 : OGRDataSource();
168 : virtual ~OGRDataSource();
169 : static void DestroyDataSource( OGRDataSource * );
170 :
171 : virtual const char *GetName() = 0;
172 :
173 : virtual int GetLayerCount() = 0;
174 : virtual OGRLayer *GetLayer(int) = 0;
175 : virtual OGRLayer *GetLayerByName(const char *);
176 : virtual OGRErr DeleteLayer(int);
177 :
178 : virtual int TestCapability( const char * ) = 0;
179 :
180 : virtual OGRLayer *CreateLayer( const char *pszName,
181 : OGRSpatialReference *poSpatialRef = NULL,
182 : OGRwkbGeometryType eGType = wkbUnknown,
183 : char ** papszOptions = NULL );
184 : virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
185 : const char *pszNewName,
186 : char **papszOptions = NULL );
187 :
188 : virtual OGRStyleTable *GetStyleTable();
189 : virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
190 :
191 : virtual void SetStyleTable(OGRStyleTable *poStyleTable);
192 :
193 : virtual OGRLayer * ExecuteSQL( const char *pszStatement,
194 : OGRGeometry *poSpatialFilter,
195 : const char *pszDialect );
196 : virtual void ReleaseResultSet( OGRLayer * poResultsSet );
197 :
198 : virtual OGRErr SyncToDisk();
199 :
200 : int Reference();
201 : int Dereference();
202 : int GetRefCount() const;
203 : int GetSummaryRefCount() const;
204 : OGRErr Release();
205 :
206 : OGRSFDriver *GetDriver() const;
207 : void SetDriver( OGRSFDriver *poDriver );
208 :
209 : protected:
210 :
211 : OGRErr ProcessSQLCreateIndex( const char * );
212 : OGRErr ProcessSQLDropIndex( const char * );
213 : OGRErr ProcessSQLDropTable( const char * );
214 : OGRErr ProcessSQLAlterTableAddColumn( const char * );
215 : OGRErr ProcessSQLAlterTableDropColumn( const char * );
216 : OGRErr ProcessSQLAlterTableAlterColumn( const char * );
217 : OGRErr ProcessSQLAlterTableRenameColumn( const char * );
218 :
219 : OGRStyleTable *m_poStyleTable;
220 : int m_nRefCount;
221 : OGRSFDriver *m_poDriver;
222 : };
223 :
224 : /************************************************************************/
225 : /* OGRSFDriver */
226 : /************************************************************************/
227 :
228 : /**
229 : * Represents an operational format driver.
230 : *
231 : * One OGRSFDriver derived class will normally exist for each file format
232 : * registered for use, regardless of whether a file has or will be opened.
233 : * The list of available drivers is normally managed by the
234 : * OGRSFDriverRegistrar.
235 : */
236 :
237 : class CPL_DLL OGRSFDriver
238 0 : {
239 : public:
240 : virtual ~OGRSFDriver();
241 :
242 : virtual const char *GetName() = 0;
243 :
244 : virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
245 :
246 : virtual int TestCapability( const char * ) = 0;
247 :
248 : virtual OGRDataSource *CreateDataSource( const char *pszName,
249 : char ** = NULL );
250 : virtual OGRErr DeleteDataSource( const char *pszName );
251 :
252 : virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
253 : const char *pszNewName,
254 : char **papszOptions = NULL );
255 : };
256 :
257 :
258 : /************************************************************************/
259 : /* OGRSFDriverRegistrar */
260 : /************************************************************************/
261 :
262 : /**
263 : * Singleton manager for OGRSFDriver instances that will be used to try
264 : * and open datasources. Normally the registrar is populated with
265 : * standard drivers using the OGRRegisterAll() function and does not need
266 : * to be directly accessed. The driver registrar and all registered drivers
267 : * may be cleaned up on shutdown using OGRCleanupAll().
268 : */
269 :
270 : class CPL_DLL OGRSFDriverRegistrar
271 : {
272 : int nDrivers;
273 : OGRSFDriver **papoDrivers;
274 :
275 : OGRSFDriverRegistrar();
276 :
277 : int nOpenDSCount;
278 : char **papszOpenDSRawName;
279 : OGRDataSource **papoOpenDS;
280 : OGRSFDriver **papoOpenDSDriver;
281 : GIntBig *panOpenDSPID;
282 :
283 : public:
284 :
285 : ~OGRSFDriverRegistrar();
286 :
287 : static OGRSFDriverRegistrar *GetRegistrar();
288 : static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
289 : OGRSFDriver ** ppoDriver = NULL );
290 :
291 : OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
292 : OGRSFDriver ** ppoDriver = NULL );
293 : OGRErr ReleaseDataSource( OGRDataSource * );
294 :
295 : void RegisterDriver( OGRSFDriver * poDriver );
296 : void DeregisterDriver( OGRSFDriver * poDriver );
297 :
298 : int GetDriverCount( void );
299 : OGRSFDriver *GetDriver( int iDriver );
300 : OGRSFDriver *GetDriverByName( const char * );
301 :
302 : int GetOpenDSCount() { return nOpenDSCount; }
303 : OGRDataSource *GetOpenDS( int );
304 :
305 : void AutoLoadDrivers();
306 : };
307 :
308 : /* -------------------------------------------------------------------- */
309 : /* Various available registration methods. */
310 : /* -------------------------------------------------------------------- */
311 : CPL_C_START
312 : void CPL_DLL OGRRegisterAll();
313 :
314 : void CPL_DLL RegisterOGRFileGDB();
315 : void CPL_DLL RegisterOGRShape();
316 : void CPL_DLL RegisterOGRNTF();
317 : void CPL_DLL RegisterOGRFME();
318 : void CPL_DLL RegisterOGRSDTS();
319 : void CPL_DLL RegisterOGRTiger();
320 : void CPL_DLL RegisterOGRS57();
321 : void CPL_DLL RegisterOGRTAB();
322 : void CPL_DLL RegisterOGRMIF();
323 : void CPL_DLL RegisterOGROGDI();
324 : void CPL_DLL RegisterOGRODBC();
325 : void CPL_DLL RegisterOGRPG();
326 : void CPL_DLL RegisterOGRMSSQLSpatial();
327 : void CPL_DLL RegisterOGRMySQL();
328 : void CPL_DLL RegisterOGROCI();
329 : void CPL_DLL RegisterOGRDGN();
330 : void CPL_DLL RegisterOGRGML();
331 : void CPL_DLL RegisterOGRLIBKML();
332 : void CPL_DLL RegisterOGRKML();
333 : void CPL_DLL RegisterOGRGeoJSON();
334 : void CPL_DLL RegisterOGRAVCBin();
335 : void CPL_DLL RegisterOGRAVCE00();
336 : void CPL_DLL RegisterOGRREC();
337 : void CPL_DLL RegisterOGRMEM();
338 : void CPL_DLL RegisterOGRVRT();
339 : void CPL_DLL RegisterOGRDODS();
340 : void CPL_DLL RegisterOGRSQLite();
341 : void CPL_DLL RegisterOGRCSV();
342 : void CPL_DLL RegisterOGRILI1();
343 : void CPL_DLL RegisterOGRILI2();
344 : void CPL_DLL RegisterOGRGRASS();
345 : void CPL_DLL RegisterOGRPGeo();
346 : void CPL_DLL RegisterOGRDXFDWG();
347 : void CPL_DLL RegisterOGRDXF();
348 : void CPL_DLL RegisterOGRDWG();
349 : void CPL_DLL RegisterOGRSDE();
350 : void CPL_DLL RegisterOGRIDB();
351 : void CPL_DLL RegisterOGRGMT();
352 : void CPL_DLL RegisterOGRBNA();
353 : void CPL_DLL RegisterOGRGPX();
354 : void CPL_DLL RegisterOGRGeoconcept();
355 : void CPL_DLL RegisterOGRIngres();
356 : void CPL_DLL RegisterOGRPCIDSK();
357 : void CPL_DLL RegisterOGRXPlane();
358 : void CPL_DLL RegisterOGRNAS();
359 : void CPL_DLL RegisterOGRGeoRSS();
360 : void CPL_DLL RegisterOGRGTM();
361 : void CPL_DLL RegisterOGRVFK();
362 : void CPL_DLL RegisterOGRPGDump();
363 : void CPL_DLL RegisterOGRGPSBabel();
364 : void CPL_DLL RegisterOGRSUA();
365 : void CPL_DLL RegisterOGROpenAir();
366 : void CPL_DLL RegisterOGRPDS();
367 : void CPL_DLL RegisterOGRWFS();
368 : void CPL_DLL RegisterOGRSOSI();
369 : void CPL_DLL RegisterOGRHTF();
370 : void CPL_DLL RegisterOGRAeronavFAA();
371 : void CPL_DLL RegisterOGRGeomedia();
372 : void CPL_DLL RegisterOGRMDB();
373 : void CPL_DLL RegisterOGREDIGEO();
374 : void CPL_DLL RegisterOGRGFT();
375 : void CPL_DLL RegisterOGRSVG();
376 : void CPL_DLL RegisterOGRCouchDB();
377 : void CPL_DLL RegisterOGRIdrisi();
378 : void CPL_DLL RegisterOGRARCGEN();
379 : void CPL_DLL RegisterOGRSEGUKOOA();
380 : void CPL_DLL RegisterOGRSEGY();
381 : void CPL_DLL RegisterOGRXLS();
382 : void CPL_DLL RegisterOGRODS();
383 : void CPL_DLL RegisterOGRXLSX();
384 : void CPL_DLL RegisterOGRElastic();
385 : void CPL_DLL RegisterOGRPDF();
386 : CPL_C_END
387 :
388 :
389 : #endif /* ndef _OGRSF_FRMTS_H_INCLUDED */
|