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
00264 class CPL_DLL OGRSFDriverRegistrar
00265 {
00266 int nDrivers;
00267 OGRSFDriver **papoDrivers;
00268
00269 OGRSFDriverRegistrar();
00270
00271 int nOpenDSCount;
00272 char **papszOpenDSRawName;
00273 OGRDataSource **papoOpenDS;
00274 OGRSFDriver **papoOpenDSDriver;
00275 GIntBig *panOpenDSPID;
00276
00277 public:
00278
00279 ~OGRSFDriverRegistrar();
00280
00281 static OGRSFDriverRegistrar *GetRegistrar();
00282 static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
00283 OGRSFDriver ** ppoDriver = NULL );
00284
00285 OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
00286 OGRSFDriver ** ppoDriver = NULL );
00287 OGRErr ReleaseDataSource( OGRDataSource * );
00288
00289 void RegisterDriver( OGRSFDriver * poDriver );
00290
00291 int GetDriverCount( void );
00292 OGRSFDriver *GetDriver( int iDriver );
00293 OGRSFDriver *GetDriverByName( const char * );
00294
00295 int GetOpenDSCount() { return nOpenDSCount; }
00296 OGRDataSource *GetOpenDS( int );
00297
00298 void AutoLoadDrivers();
00299 };
00300
00301
00302
00303
00304 CPL_C_START
00305 void CPL_DLL OGRRegisterAll();
00306
00307 void CPL_DLL RegisterOGRShape();
00308 void CPL_DLL RegisterOGRNTF();
00309 void CPL_DLL RegisterOGRFME();
00310 void CPL_DLL RegisterOGRSDTS();
00311 void CPL_DLL RegisterOGRTiger();
00312 void CPL_DLL RegisterOGRS57();
00313 void CPL_DLL RegisterOGRTAB();
00314 void CPL_DLL RegisterOGRMIF();
00315 void CPL_DLL RegisterOGROGDI();
00316 void CPL_DLL RegisterOGRODBC();
00317 void CPL_DLL RegisterOGRPG();
00318 void CPL_DLL RegisterOGRMySQL();
00319 void CPL_DLL RegisterOGROCI();
00320 void CPL_DLL RegisterOGRDGN();
00321 void CPL_DLL RegisterOGRGML();
00322 void CPL_DLL RegisterOGRKML();
00323 void CPL_DLL RegisterOGRGeoJSON();
00324 void CPL_DLL RegisterOGRAVCBin();
00325 void CPL_DLL RegisterOGRAVCE00();
00326 void CPL_DLL RegisterOGRREC();
00327 void CPL_DLL RegisterOGRMEM();
00328 void CPL_DLL RegisterOGRVRT();
00329 void CPL_DLL RegisterOGRDODS();
00330 void CPL_DLL RegisterOGRSQLite();
00331 void CPL_DLL RegisterOGRCSV();
00332 void CPL_DLL RegisterOGRILI1();
00333 void CPL_DLL RegisterOGRILI2();
00334 void CPL_DLL RegisterOGRGRASS();
00335 void CPL_DLL RegisterOGRPGeo();
00336 void CPL_DLL RegisterOGRDXFDWG();
00337 void CPL_DLL RegisterOGRSDE();
00338 void CPL_DLL RegisterOGRIDB();
00339 void CPL_DLL RegisterOGRGMT();
00340 void CPL_DLL RegisterOGRBNA();
00341 void CPL_DLL RegisterOGRGPX();
00342 void CPL_DLL RegisterOGRGeoconcept();
00343 void CPL_DLL RegisterOGRIngres();
00344 void CPL_DLL RegisterOGRXPlane();
00345 void CPL_DLL RegisterOGRNAS();
00346
00347 CPL_C_END
00348
00349
00350 #endif