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 #ifndef _OGRSF_FRMTS_H_INCLUDED
00095 #define _OGRSF_FRMTS_H_INCLUDED
00096
00097 #include "ogr_feature.h"
00098 #include "ogr_featurestyle.h"
00099
00106 class OGRLayerAttrIndex;
00107 class OGRSFDriver;
00108
00109
00110
00111
00112
00118 class CPL_DLL OGRLayer
00119 {
00120 protected:
00121 int m_bFilterIsEnvelope;
00122 OGRGeometry *m_poFilterGeom;
00123 OGREnvelope m_sFilterEnvelope;
00124
00125 int FilterGeometry( OGRGeometry * );
00126 int InstallFilter( OGRGeometry * );
00127
00128 public:
00129 OGRLayer();
00130 virtual ~OGRLayer();
00131
00132 virtual OGRGeometry *GetSpatialFilter();
00133 virtual void SetSpatialFilter( OGRGeometry * );
00134 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
00135 double dfMaxX, double dfMaxY );
00136
00137 virtual OGRErr SetAttributeFilter( const char * );
00138
00139 virtual void ResetReading() = 0;
00140 virtual OGRFeature *GetNextFeature() = 0;
00141 virtual OGRErr SetNextByIndex( long nIndex );
00142 virtual OGRFeature *GetFeature( long nFID );
00143 virtual OGRErr SetFeature( OGRFeature *poFeature );
00144 virtual OGRErr CreateFeature( OGRFeature *poFeature );
00145 virtual OGRErr DeleteFeature( long nFID );
00146
00147 virtual OGRFeatureDefn *GetLayerDefn() = 0;
00148
00149 virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
00150
00151 virtual int GetFeatureCount( int bForce = TRUE );
00152 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
00153
00154 virtual int TestCapability( const char * ) = 0;
00155
00156 virtual const char *GetInfo( const char * );
00157
00158 virtual OGRErr CreateField( OGRFieldDefn *poField,
00159 int bApproxOK = TRUE );
00160
00161 virtual OGRErr SyncToDisk();
00162
00163 OGRStyleTable *GetStyleTable(){ return m_poStyleTable; }
00164 void SetStyleTableDirectly( OGRStyleTable *poStyleTable )
00165 { if ( m_poStyleTable ) delete m_poStyleTable;
00166 m_poStyleTable = poStyleTable; }
00167 void SetStyleTable(OGRStyleTable *poStyleTable)
00168 {
00169 if ( m_poStyleTable ) delete m_poStyleTable;
00170 if ( poStyleTable )
00171 m_poStyleTable = poStyleTable->Clone();
00172 }
00173
00174 virtual OGRErr StartTransaction();
00175 virtual OGRErr CommitTransaction();
00176 virtual OGRErr RollbackTransaction();
00177
00178 virtual const char *GetFIDColumn();
00179 virtual const char *GetGeometryColumn();
00180
00181 int Reference();
00182 int Dereference();
00183 int GetRefCount() const;
00184
00185 GIntBig GetFeaturesRead();
00186
00187
00188 OGRErr InitializeIndexSupport( const char * );
00189 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
00190
00191 protected:
00192 OGRStyleTable *m_poStyleTable;
00193 OGRFeatureQuery *m_poAttrQuery;
00194 OGRLayerAttrIndex *m_poAttrIndex;
00195
00196 int m_nRefCount;
00197
00198 GIntBig m_nFeaturesRead;
00199 };
00200
00201
00202
00203
00204
00205
00216 class CPL_DLL OGRDataSource
00217 {
00218 friend class OGRSFDriverRegistrar;
00219
00220 public:
00221
00222 OGRDataSource();
00223 virtual ~OGRDataSource();
00224 static void DestroyDataSource( OGRDataSource * );
00225
00226 virtual const char *GetName() = 0;
00227
00228 virtual int GetLayerCount() = 0;
00229 virtual OGRLayer *GetLayer(int) = 0;
00230 virtual OGRLayer *GetLayerByName(const char *);
00231 virtual OGRErr DeleteLayer(int);
00232
00233 virtual int TestCapability( const char * ) = 0;
00234
00235 virtual OGRLayer *CreateLayer( const char *pszName,
00236 OGRSpatialReference *poSpatialRef = NULL,
00237 OGRwkbGeometryType eGType = wkbUnknown,
00238 char ** papszOptions = NULL );
00239 virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
00240 const char *pszNewName,
00241 char **papszOptions = NULL );
00242
00243 OGRStyleTable *GetStyleTable(){ return m_poStyleTable; }
00244 void SetStyleTableDirectly( OGRStyleTable *poStyleTable )
00245 { if ( m_poStyleTable ) delete m_poStyleTable;
00246 m_poStyleTable = poStyleTable; }
00247 void SetStyleTable(OGRStyleTable *poStyleTable)
00248 {
00249 if ( m_poStyleTable ) delete m_poStyleTable;
00250 if ( poStyleTable )
00251 m_poStyleTable = poStyleTable->Clone();
00252 }
00253
00254 virtual OGRLayer * ExecuteSQL( const char *pszStatement,
00255 OGRGeometry *poSpatialFilter,
00256 const char *pszDialect );
00257 virtual void ReleaseResultSet( OGRLayer * poResultsSet );
00258
00259 virtual OGRErr SyncToDisk();
00260
00261 int Reference();
00262 int Dereference();
00263 int GetRefCount() const;
00264 int GetSummaryRefCount() const;
00265 OGRErr Release();
00266
00267 OGRSFDriver *GetDriver() const;
00268
00269 protected:
00270
00271 OGRErr ProcessSQLCreateIndex( const char * );
00272 OGRErr ProcessSQLDropIndex( const char * );
00273
00274 OGRStyleTable *m_poStyleTable;
00275 int m_nRefCount;
00276 OGRSFDriver *m_poDriver;
00277 };
00278
00279
00280
00281
00282
00292 class CPL_DLL OGRSFDriver
00293 {
00294 public:
00295 virtual ~OGRSFDriver();
00296
00297 virtual const char *GetName() = 0;
00298
00299 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
00300
00301 virtual int TestCapability( const char * ) = 0;
00302
00303 virtual OGRDataSource *CreateDataSource( const char *pszName,
00304 char ** = NULL );
00305 virtual OGRErr DeleteDataSource( const char *pszName );
00306
00307 virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
00308 const char *pszNewName,
00309 char **papszOptions = NULL );
00310 };
00311
00312
00313
00314
00315
00316
00322 class CPL_DLL OGRSFDriverRegistrar
00323 {
00324 int nDrivers;
00325 OGRSFDriver **papoDrivers;
00326
00327 OGRSFDriverRegistrar();
00328
00329 int nOpenDSCount;
00330 char **papszOpenDSRawName;
00331 OGRDataSource **papoOpenDS;
00332 OGRSFDriver **papoOpenDSDriver;
00333
00334 public:
00335
00336 ~OGRSFDriverRegistrar();
00337
00338 static OGRSFDriverRegistrar *GetRegistrar();
00339 static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
00340 OGRSFDriver ** ppoDriver = NULL );
00341
00342 OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
00343 OGRSFDriver ** ppoDriver = NULL );
00344 OGRErr ReleaseDataSource( OGRDataSource * );
00345
00346 void RegisterDriver( OGRSFDriver * poDriver );
00347
00348 int GetDriverCount( void );
00349 OGRSFDriver *GetDriver( int iDriver );
00350 OGRSFDriver *GetDriverByName( const char * );
00351
00352 int GetOpenDSCount() { return nOpenDSCount; }
00353 OGRDataSource *GetOpenDS( int );
00354
00355 void AutoLoadDrivers();
00356 };
00357
00358
00359
00360
00361 CPL_C_START
00362 void CPL_DLL OGRRegisterAll();
00363
00364 void CPL_DLL RegisterOGRShape();
00365 void CPL_DLL RegisterOGRNTF();
00366 void CPL_DLL RegisterOGRFME();
00367 void CPL_DLL RegisterOGRSDTS();
00368 void CPL_DLL RegisterOGRTiger();
00369 void CPL_DLL RegisterOGRS57();
00370 void CPL_DLL RegisterOGRTAB();
00371 void CPL_DLL RegisterOGRMIF();
00372 void CPL_DLL RegisterOGROGDI();
00373 void CPL_DLL RegisterOGRODBC();
00374 void CPL_DLL RegisterOGRPG();
00375 void CPL_DLL RegisterOGRMySQL();
00376 void CPL_DLL RegisterOGROCI();
00377 void CPL_DLL RegisterOGRDGN();
00378 void CPL_DLL RegisterOGRGML();
00379 void CPL_DLL RegisterOGRKML();
00380 void CPL_DLL RegisterOGRAVCBin();
00381 void CPL_DLL RegisterOGRAVCE00();
00382 void CPL_DLL RegisterOGRREC();
00383 void CPL_DLL RegisterOGRMEM();
00384 void CPL_DLL RegisterOGRVRT();
00385 void CPL_DLL RegisterOGRDODS();
00386 void CPL_DLL RegisterOGRSQLite();
00387 void CPL_DLL RegisterOGRCSV();
00388 void CPL_DLL RegisterOGRILI1();
00389 void CPL_DLL RegisterOGRILI2();
00390 void CPL_DLL RegisterOGRGRASS();
00391 void CPL_DLL RegisterOGRPGeo();
00392 void CPL_DLL RegisterOGRDXFDWG();
00393 void CPL_DLL RegisterOGRSDE();
00394 void CPL_DLL RegisterOGRIDB();
00395
00396 CPL_C_END
00397
00398
00399 #endif