ogrsf_frmts.h
Go to the documentation of this file.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 #ifndef _OGRSF_FRMTS_H_INCLUDED
00031 #define _OGRSF_FRMTS_H_INCLUDED
00032
00033 #include "ogr_feature.h"
00034 #include "ogr_featurestyle.h"
00035
00042 class OGRLayerAttrIndex;
00043 class OGRSFDriver;
00044
00045
00046
00047
00048
00054 class CPL_DLL OGRLayer
00055 {
00056 protected:
00057 int m_bFilterIsEnvelope;
00058 OGRGeometry *m_poFilterGeom;
00059 OGREnvelope m_sFilterEnvelope;
00060
00061 int FilterGeometry( OGRGeometry * );
00062 int InstallFilter( OGRGeometry * );
00063
00064 public:
00065 OGRLayer();
00066 virtual ~OGRLayer();
00067
00068 virtual OGRGeometry *GetSpatialFilter();
00069 virtual void SetSpatialFilter( OGRGeometry * );
00070 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
00071 double dfMaxX, double dfMaxY );
00072
00073 virtual OGRErr SetAttributeFilter( const char * );
00074
00075 virtual void ResetReading() = 0;
00076 virtual OGRFeature *GetNextFeature() = 0;
00077 virtual OGRErr SetNextByIndex( long nIndex );
00078 virtual OGRFeature *GetFeature( long nFID );
00079 virtual OGRErr SetFeature( OGRFeature *poFeature );
00080 virtual OGRErr CreateFeature( OGRFeature *poFeature );
00081 virtual OGRErr DeleteFeature( long nFID );
00082
00083 virtual OGRFeatureDefn *GetLayerDefn() = 0;
00084
00085 virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
00086
00087 virtual int GetFeatureCount( int bForce = TRUE );
00088 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
00089
00090 virtual int TestCapability( const char * ) = 0;
00091
00092 virtual const char *GetInfo( const char * );
00093
00094 virtual OGRErr CreateField( OGRFieldDefn *poField,
00095 int bApproxOK = TRUE );
00096
00097 virtual OGRErr SyncToDisk();
00098
00099 OGRStyleTable *GetStyleTable(){ return m_poStyleTable; }
00100 void SetStyleTableDirectly( OGRStyleTable *poStyleTable )
00101 { if ( m_poStyleTable ) delete m_poStyleTable;
00102 m_poStyleTable = poStyleTable; }
00103 void SetStyleTable(OGRStyleTable *poStyleTable)
00104 {
00105 if ( m_poStyleTable ) delete m_poStyleTable;
00106 if ( poStyleTable )
00107 m_poStyleTable = poStyleTable->Clone();
00108 }
00109
00110 virtual OGRErr StartTransaction();
00111 virtual OGRErr CommitTransaction();
00112 virtual OGRErr RollbackTransaction();
00113
00114 virtual const char *GetFIDColumn();
00115 virtual const char *GetGeometryColumn();
00116
00117 int Reference();
00118 int Dereference();
00119 int GetRefCount() const;
00120
00121 GIntBig GetFeaturesRead();
00122
00123
00124 OGRErr InitializeIndexSupport( const char * );
00125 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
00126
00127 protected:
00128 OGRStyleTable *m_poStyleTable;
00129 OGRFeatureQuery *m_poAttrQuery;
00130 OGRLayerAttrIndex *m_poAttrIndex;
00131
00132 int m_nRefCount;
00133
00134 GIntBig m_nFeaturesRead;
00135 };
00136
00137
00138
00139
00140
00141
00152 class CPL_DLL OGRDataSource
00153 {
00154 friend class OGRSFDriverRegistrar;
00155
00156 void *m_hMutex;
00157
00158 public:
00159
00160 OGRDataSource();
00161 virtual ~OGRDataSource();
00162 static void DestroyDataSource( OGRDataSource * );
00163
00164 virtual const char *GetName() = 0;
00165
00166 virtual int GetLayerCount() = 0;
00167 virtual OGRLayer *GetLayer(int) = 0;
00168 virtual OGRLayer *GetLayerByName(const char *);
00169 virtual OGRErr DeleteLayer(int);
00170
00171 virtual int TestCapability( const char * ) = 0;
00172
00173 virtual OGRLayer *CreateLayer( const char *pszName,
00174 OGRSpatialReference *poSpatialRef = NULL,
00175 OGRwkbGeometryType eGType = wkbUnknown,
00176 char ** papszOptions = NULL );
00177 virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
00178 const char *pszNewName,
00179 char **papszOptions = NULL );
00180
00181 OGRStyleTable *GetStyleTable(){ return m_poStyleTable; }
00182 void SetStyleTableDirectly( OGRStyleTable *poStyleTable )
00183 { if ( m_poStyleTable ) delete m_poStyleTable;
00184 m_poStyleTable = poStyleTable; }
00185 void SetStyleTable(OGRStyleTable *poStyleTable)
00186 {
00187 if ( m_poStyleTable ) delete m_poStyleTable;
00188 if ( poStyleTable )
00189 m_poStyleTable = poStyleTable->Clone();
00190 }
00191
00192 virtual OGRLayer * ExecuteSQL( const char *pszStatement,
00193 OGRGeometry *poSpatialFilter,
00194 const char *pszDialect );
00195 virtual void ReleaseResultSet( OGRLayer * poResultsSet );
00196
00197 virtual OGRErr SyncToDisk();
00198
00199 int Reference();
00200 int Dereference();
00201 int GetRefCount() const;
00202 int GetSummaryRefCount() const;
00203 OGRErr Release();
00204
00205 OGRSFDriver *GetDriver() const;
00206 void SetDriver( OGRSFDriver *poDriver );
00207
00208 protected:
00209
00210 OGRErr ProcessSQLCreateIndex( const char * );
00211 OGRErr ProcessSQLDropIndex( const char * );
00212
00213 OGRStyleTable *m_poStyleTable;
00214 int m_nRefCount;
00215 OGRSFDriver *m_poDriver;
00216 };
00217
00218
00219
00220
00221
00231 class CPL_DLL OGRSFDriver
00232 {
00233 public:
00234 virtual ~OGRSFDriver();
00235
00236 virtual const char *GetName() = 0;
00237
00238 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
00239
00240 virtual int TestCapability( const char * ) = 0;
00241
00242 virtual OGRDataSource *CreateDataSource( const char *pszName,
00243 char ** = NULL );
00244 virtual OGRErr DeleteDataSource( const char *pszName );
00245
00246 virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
00247 const char *pszNewName,
00248 char **papszOptions = NULL );
00249 };
00250
00251
00252
00253
00254
00255
00261 class CPL_DLL OGRSFDriverRegistrar
00262 {
00263 int nDrivers;
00264 OGRSFDriver **papoDrivers;
00265
00266 OGRSFDriverRegistrar();
00267
00268 int nOpenDSCount;
00269 char **papszOpenDSRawName;
00270 OGRDataSource **papoOpenDS;
00271 OGRSFDriver **papoOpenDSDriver;
00272
00273 public:
00274
00275 ~OGRSFDriverRegistrar();
00276
00277 static OGRSFDriverRegistrar *GetRegistrar();
00278 static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
00279 OGRSFDriver ** ppoDriver = NULL );
00280
00281 OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
00282 OGRSFDriver ** ppoDriver = NULL );
00283 OGRErr ReleaseDataSource( OGRDataSource * );
00284
00285 void RegisterDriver( OGRSFDriver * poDriver );
00286
00287 int GetDriverCount( void );
00288 OGRSFDriver *GetDriver( int iDriver );
00289 OGRSFDriver *GetDriverByName( const char * );
00290
00291 int GetOpenDSCount() { return nOpenDSCount; }
00292 OGRDataSource *GetOpenDS( int );
00293
00294 void AutoLoadDrivers();
00295 };
00296
00297
00298
00299
00300 CPL_C_START
00301 void CPL_DLL OGRRegisterAll();
00302
00303 void CPL_DLL RegisterOGRShape();
00304 void CPL_DLL RegisterOGRNTF();
00305 void CPL_DLL RegisterOGRFME();
00306 void CPL_DLL RegisterOGRSDTS();
00307 void CPL_DLL RegisterOGRTiger();
00308 void CPL_DLL RegisterOGRS57();
00309 void CPL_DLL RegisterOGRTAB();
00310 void CPL_DLL RegisterOGRMIF();
00311 void CPL_DLL RegisterOGROGDI();
00312 void CPL_DLL RegisterOGRODBC();
00313 void CPL_DLL RegisterOGRPG();
00314 void CPL_DLL RegisterOGRMySQL();
00315 void CPL_DLL RegisterOGROCI();
00316 void CPL_DLL RegisterOGRDGN();
00317 void CPL_DLL RegisterOGRGML();
00318 void CPL_DLL RegisterOGRKML();
00319 void CPL_DLL RegisterOGRGeoJSON();
00320 void CPL_DLL RegisterOGRAVCBin();
00321 void CPL_DLL RegisterOGRAVCE00();
00322 void CPL_DLL RegisterOGRREC();
00323 void CPL_DLL RegisterOGRMEM();
00324 void CPL_DLL RegisterOGRVRT();
00325 void CPL_DLL RegisterOGRDODS();
00326 void CPL_DLL RegisterOGRSQLite();
00327 void CPL_DLL RegisterOGRCSV();
00328 void CPL_DLL RegisterOGRILI1();
00329 void CPL_DLL RegisterOGRILI2();
00330 void CPL_DLL RegisterOGRGRASS();
00331 void CPL_DLL RegisterOGRPGeo();
00332 void CPL_DLL RegisterOGRDXFDWG();
00333 void CPL_DLL RegisterOGRSDE();
00334 void CPL_DLL RegisterOGRIDB();
00335 void CPL_DLL RegisterOGRGMT();
00336 void CPL_DLL RegisterOGRBNA();
00337 void CPL_DLL RegisterOGRGPX();
00338
00339 CPL_C_END
00340
00341
00342 #endif