00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 #ifndef _OGRSF_FRMTS_H_INCLUDED
00194 #define _OGRSF_FRMTS_H_INCLUDED
00195
00196 #include "ogr_feature.h"
00197
00204 class OGRLayerAttrIndex;
00205
00206
00207
00208
00209
00215 class CPL_DLL OGRLayer
00216 {
00217 protected:
00218 int m_bFilterIsEnvelope;
00219 OGRGeometry *m_poFilterGeom;
00220 OGREnvelope m_sFilterEnvelope;
00221
00222 int FilterGeometry( OGRGeometry * );
00223 int InstallFilter( OGRGeometry * );
00224
00225 public:
00226 OGRLayer();
00227 virtual ~OGRLayer();
00228
00229 virtual OGRGeometry *GetSpatialFilter();
00230 virtual void SetSpatialFilter( OGRGeometry * );
00231 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
00232 double dfMaxX, double dfMaxY );
00233
00234 virtual OGRErr SetAttributeFilter( const char * );
00235
00236 virtual void ResetReading() = 0;
00237 virtual OGRFeature *GetNextFeature() = 0;
00238 virtual OGRErr SetNextByIndex( long nIndex );
00239 virtual OGRFeature *GetFeature( long nFID );
00240 virtual OGRErr SetFeature( OGRFeature *poFeature );
00241 virtual OGRErr CreateFeature( OGRFeature *poFeature );
00242 virtual OGRErr DeleteFeature( long nFID );
00243
00244 virtual OGRFeatureDefn *GetLayerDefn() = 0;
00245
00246 virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
00247
00248 virtual int GetFeatureCount( int bForce = TRUE );
00249 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
00250
00251 virtual int TestCapability( const char * ) = 0;
00252
00253 virtual const char *GetInfo( const char * );
00254
00255 virtual OGRErr CreateField( OGRFieldDefn *poField,
00256 int bApproxOK = TRUE );
00257
00258 virtual OGRErr SyncToDisk();
00259
00260 OGRStyleTable *GetStyleTable(){return m_poStyleTable;}
00261 void SetStyleTable(OGRStyleTable *poStyleTable){m_poStyleTable = poStyleTable;}
00262
00263 virtual OGRErr StartTransaction();
00264 virtual OGRErr CommitTransaction();
00265 virtual OGRErr RollbackTransaction();
00266
00267 int Reference();
00268 int Dereference();
00269 int GetRefCount() const;
00270
00271 GIntBig GetFeaturesRead();
00272
00273
00274 OGRErr InitializeIndexSupport( const char * );
00275 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
00276
00277 protected:
00278 OGRStyleTable *m_poStyleTable;
00279 OGRFeatureQuery *m_poAttrQuery;
00280 OGRLayerAttrIndex *m_poAttrIndex;
00281
00282 int m_nRefCount;
00283
00284 GIntBig m_nFeaturesRead;
00285 };
00286
00287
00288
00289
00290
00291
00302 class CPL_DLL OGRDataSource
00303 {
00304 public:
00305
00306 OGRDataSource();
00307 virtual ~OGRDataSource();
00308 static void DestroyDataSource( OGRDataSource * );
00309
00310 virtual const char *GetName() = 0;
00311
00312 virtual int GetLayerCount() = 0;
00313 virtual OGRLayer *GetLayer(int) = 0;
00314 virtual OGRLayer *GetLayerByName(const char *);
00315 virtual OGRErr DeleteLayer(int);
00316
00317 virtual int TestCapability( const char * ) = 0;
00318
00319 virtual OGRLayer *CreateLayer( const char *pszName,
00320 OGRSpatialReference *poSpatialRef = NULL,
00321 OGRwkbGeometryType eGType = wkbUnknown,
00322 char ** papszOptions = NULL );
00323 virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
00324 const char *pszNewName,
00325 char **papszOptions = NULL );
00326 OGRStyleTable *GetStyleTable(){return m_poStyleTable;}
00327
00328 virtual OGRLayer * ExecuteSQL( const char *pszStatement,
00329 OGRGeometry *poSpatialFilter,
00330 const char *pszDialect );
00331 virtual void ReleaseResultSet( OGRLayer * poResultsSet );
00332
00333 virtual OGRErr SyncToDisk();
00334
00335 int Reference();
00336 int Dereference();
00337 int GetRefCount() const;
00338 int GetSummaryRefCount() const;
00339 OGRErr Release();
00340
00341 protected:
00342
00343 OGRErr ProcessSQLCreateIndex( const char * );
00344 OGRErr ProcessSQLDropIndex( const char * );
00345
00346 OGRStyleTable *m_poStyleTable;
00347 int m_nRefCount;
00348 };
00349
00350
00351
00352
00353
00363 class CPL_DLL OGRSFDriver
00364 {
00365 public:
00366 virtual ~OGRSFDriver();
00367
00368 virtual const char *GetName() = 0;
00369
00370 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
00371
00372 virtual int TestCapability( const char * ) = 0;
00373
00374 virtual OGRDataSource *CreateDataSource( const char *pszName,
00375 char ** = NULL );
00376 virtual OGRErr DeleteDataSource( const char *pszName );
00377
00378 virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
00379 const char *pszNewName,
00380 char **papszOptions = NULL );
00381 };
00382
00383
00384
00385
00386
00387
00393 class CPL_DLL OGRSFDriverRegistrar
00394 {
00395 int nDrivers;
00396 OGRSFDriver **papoDrivers;
00397
00398 OGRSFDriverRegistrar();
00399
00400 int nOpenDSCount;
00401 char **papszOpenDSRawName;
00402 OGRDataSource **papoOpenDS;
00403 OGRSFDriver **papoOpenDSDriver;
00404
00405 public:
00406
00407 ~OGRSFDriverRegistrar();
00408
00409 static OGRSFDriverRegistrar *GetRegistrar();
00410 static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
00411 OGRSFDriver ** ppoDriver = NULL );
00412
00413 OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
00414 OGRSFDriver ** ppoDriver = NULL );
00415 OGRErr ReleaseDataSource( OGRDataSource * );
00416
00417 void RegisterDriver( OGRSFDriver * poDriver );
00418
00419 int GetDriverCount( void );
00420 OGRSFDriver *GetDriver( int iDriver );
00421 OGRSFDriver *GetDriverByName( const char * );
00422
00423 int GetOpenDSCount() { return nOpenDSCount; }
00424 OGRDataSource *GetOpenDS( int );
00425
00426 void AutoLoadDrivers();
00427 };
00428
00429
00430
00431
00432 CPL_C_START
00433 void CPL_DLL OGRRegisterAll();
00434
00435 void CPL_DLL RegisterOGRShape();
00436 void CPL_DLL RegisterOGRNTF();
00437 void CPL_DLL RegisterOGRFME();
00438 void CPL_DLL RegisterOGRSDTS();
00439 void CPL_DLL RegisterOGRTiger();
00440 void CPL_DLL RegisterOGRS57();
00441 void CPL_DLL RegisterOGRTAB();
00442 void CPL_DLL RegisterOGRMIF();
00443 void CPL_DLL RegisterOGROGDI();
00444 void CPL_DLL RegisterOGRODBC();
00445 void CPL_DLL RegisterOGRPG();
00446 void CPL_DLL RegisterOGRMySQL();
00447 void CPL_DLL RegisterOGROCI();
00448 void CPL_DLL RegisterOGRDGN();
00449 void CPL_DLL RegisterOGRGML();
00450 void CPL_DLL RegisterOGRAVCBin();
00451 void CPL_DLL RegisterOGRAVCE00();
00452 void CPL_DLL RegisterOGRFME();
00453 void CPL_DLL RegisterOGRREC();
00454 void CPL_DLL RegisterOGRMEM();
00455 void CPL_DLL RegisterOGRVRT();
00456 void CPL_DLL RegisterOGRDODS();
00457 void CPL_DLL RegisterOGRSQLite();
00458 void CPL_DLL RegisterOGRCSV();
00459 void CPL_DLL RegisterOGRILI1();
00460 void CPL_DLL RegisterOGRILI2();
00461 void CPL_DLL RegisterOGRGRASS();
00462 void CPL_DLL RegisterOGRPGeo();
00463
00464 CPL_C_END
00465
00466
00467 #endif