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
00063 int InstallFilter( OGRGeometry * );
00064
00065 public:
00066 OGRLayer();
00067 virtual ~OGRLayer();
00068
00069 virtual OGRGeometry *GetSpatialFilter();
00070 virtual void SetSpatialFilter( OGRGeometry * );
00071 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
00072 double dfMaxX, double dfMaxY );
00073
00074 virtual OGRErr SetAttributeFilter( const char * );
00075
00076 virtual void ResetReading() = 0;
00077 virtual OGRFeature *GetNextFeature() = 0;
00078 virtual OGRErr SetNextByIndex( long nIndex );
00079 virtual OGRFeature *GetFeature( long nFID );
00080 virtual OGRErr SetFeature( OGRFeature *poFeature );
00081 virtual OGRErr CreateFeature( OGRFeature *poFeature );
00082 virtual OGRErr DeleteFeature( long nFID );
00083
00084 virtual const char *GetName();
00085 virtual OGRwkbGeometryType GetGeomType();
00086 virtual OGRFeatureDefn *GetLayerDefn() = 0;
00087
00088 virtual OGRSpatialReference *GetSpatialRef() { return NULL; }
00089
00090 virtual int GetFeatureCount( int bForce = TRUE );
00091 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
00092
00093 virtual int TestCapability( const char * ) = 0;
00094
00095 virtual const char *GetInfo( const char * );
00096
00097 virtual OGRErr CreateField( OGRFieldDefn *poField,
00098 int bApproxOK = TRUE );
00099 virtual OGRErr DeleteField( int iField );
00100 virtual OGRErr ReorderFields( int* panMap );
00101 virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlags );
00102
00103 virtual OGRErr SyncToDisk();
00104
00105 virtual OGRStyleTable *GetStyleTable();
00106 virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
00107
00108 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
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 virtual OGRErr SetIgnoredFields( const char **papszFields );
00118
00119 int Reference();
00120 int Dereference();
00121 int GetRefCount() const;
00122
00123 GIntBig GetFeaturesRead();
00124
00125
00126 OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
00127
00128 int AttributeFilterEvaluationNeedsGeometry();
00129
00130
00131 OGRErr InitializeIndexSupport( const char * );
00132 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
00133
00134 protected:
00135 OGRStyleTable *m_poStyleTable;
00136 OGRFeatureQuery *m_poAttrQuery;
00137 OGRLayerAttrIndex *m_poAttrIndex;
00138
00139 int m_nRefCount;
00140
00141 GIntBig m_nFeaturesRead;
00142 };
00143
00144
00145
00146
00147
00148
00159 class CPL_DLL OGRDataSource
00160 {
00161 friend class OGRSFDriverRegistrar;
00162
00163 void *m_hMutex;
00164
00165 public:
00166
00167 OGRDataSource();
00168 virtual ~OGRDataSource();
00169 static void DestroyDataSource( OGRDataSource * );
00170
00171 virtual const char *GetName() = 0;
00172
00173 virtual int GetLayerCount() = 0;
00174 virtual OGRLayer *GetLayer(int) = 0;
00175 virtual OGRLayer *GetLayerByName(const char *);
00176 virtual OGRErr DeleteLayer(int);
00177
00178 virtual int TestCapability( const char * ) = 0;
00179
00180 virtual OGRLayer *CreateLayer( const char *pszName,
00181 OGRSpatialReference *poSpatialRef = NULL,
00182 OGRwkbGeometryType eGType = wkbUnknown,
00183 char ** papszOptions = NULL );
00184 virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
00185 const char *pszNewName,
00186 char **papszOptions = NULL );
00187
00188 virtual OGRStyleTable *GetStyleTable();
00189 virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
00190
00191 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
00192
00193 virtual OGRLayer * ExecuteSQL( const char *pszStatement,
00194 OGRGeometry *poSpatialFilter,
00195 const char *pszDialect );
00196 virtual void ReleaseResultSet( OGRLayer * poResultsSet );
00197
00198 virtual OGRErr SyncToDisk();
00199
00200 int Reference();
00201 int Dereference();
00202 int GetRefCount() const;
00203 int GetSummaryRefCount() const;
00204 OGRErr Release();
00205
00206 OGRSFDriver *GetDriver() const;
00207 void SetDriver( OGRSFDriver *poDriver );
00208
00209 protected:
00210
00211 OGRErr ProcessSQLCreateIndex( const char * );
00212 OGRErr ProcessSQLDropIndex( const char * );
00213 OGRErr ProcessSQLDropTable( const char * );
00214 OGRErr ProcessSQLAlterTableAddColumn( const char * );
00215 OGRErr ProcessSQLAlterTableDropColumn( const char * );
00216 OGRErr ProcessSQLAlterTableAlterColumn( const char * );
00217 OGRErr ProcessSQLAlterTableRenameColumn( const char * );
00218
00219 OGRStyleTable *m_poStyleTable;
00220 int m_nRefCount;
00221 OGRSFDriver *m_poDriver;
00222 };
00223
00224
00225
00226
00227
00237 class CPL_DLL OGRSFDriver
00238 {
00239 public:
00240 virtual ~OGRSFDriver();
00241
00242 virtual const char *GetName() = 0;
00243
00244 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) = 0;
00245
00246 virtual int TestCapability( const char * ) = 0;
00247
00248 virtual OGRDataSource *CreateDataSource( const char *pszName,
00249 char ** = NULL );
00250 virtual OGRErr DeleteDataSource( const char *pszName );
00251
00252 virtual OGRDataSource *CopyDataSource( OGRDataSource *poSrcDS,
00253 const char *pszNewName,
00254 char **papszOptions = NULL );
00255 };
00256
00257
00258
00259
00260
00261
00270 class CPL_DLL OGRSFDriverRegistrar
00271 {
00272 int nDrivers;
00273 OGRSFDriver **papoDrivers;
00274
00275 OGRSFDriverRegistrar();
00276
00277 int nOpenDSCount;
00278 char **papszOpenDSRawName;
00279 OGRDataSource **papoOpenDS;
00280 OGRSFDriver **papoOpenDSDriver;
00281 GIntBig *panOpenDSPID;
00282
00283 public:
00284
00285 ~OGRSFDriverRegistrar();
00286
00287 static OGRSFDriverRegistrar *GetRegistrar();
00288 static OGRDataSource *Open( const char *pszName, int bUpdate=FALSE,
00289 OGRSFDriver ** ppoDriver = NULL );
00290
00291 OGRDataSource *OpenShared( const char *pszName, int bUpdate=FALSE,
00292 OGRSFDriver ** ppoDriver = NULL );
00293 OGRErr ReleaseDataSource( OGRDataSource * );
00294
00295 void RegisterDriver( OGRSFDriver * poDriver );
00296 void DeregisterDriver( OGRSFDriver * poDriver );
00297
00298 int GetDriverCount( void );
00299 OGRSFDriver *GetDriver( int iDriver );
00300 OGRSFDriver *GetDriverByName( const char * );
00301
00302 int GetOpenDSCount() { return nOpenDSCount; }
00303 OGRDataSource *GetOpenDS( int );
00304
00305 void AutoLoadDrivers();
00306 };
00307
00308
00309
00310
00311 CPL_C_START
00312 void CPL_DLL OGRRegisterAll();
00313
00314 void CPL_DLL RegisterOGRFileGDB();
00315 void CPL_DLL RegisterOGRShape();
00316 void CPL_DLL RegisterOGRNTF();
00317 void CPL_DLL RegisterOGRFME();
00318 void CPL_DLL RegisterOGRSDTS();
00319 void CPL_DLL RegisterOGRTiger();
00320 void CPL_DLL RegisterOGRS57();
00321 void CPL_DLL RegisterOGRTAB();
00322 void CPL_DLL RegisterOGRMIF();
00323 void CPL_DLL RegisterOGROGDI();
00324 void CPL_DLL RegisterOGRODBC();
00325 void CPL_DLL RegisterOGRPG();
00326 void CPL_DLL RegisterOGRMSSQLSpatial();
00327 void CPL_DLL RegisterOGRMySQL();
00328 void CPL_DLL RegisterOGROCI();
00329 void CPL_DLL RegisterOGRDGN();
00330 void CPL_DLL RegisterOGRGML();
00331 void CPL_DLL RegisterOGRLIBKML();
00332 void CPL_DLL RegisterOGRKML();
00333 void CPL_DLL RegisterOGRGeoJSON();
00334 void CPL_DLL RegisterOGRAVCBin();
00335 void CPL_DLL RegisterOGRAVCE00();
00336 void CPL_DLL RegisterOGRREC();
00337 void CPL_DLL RegisterOGRMEM();
00338 void CPL_DLL RegisterOGRVRT();
00339 void CPL_DLL RegisterOGRDODS();
00340 void CPL_DLL RegisterOGRSQLite();
00341 void CPL_DLL RegisterOGRCSV();
00342 void CPL_DLL RegisterOGRILI1();
00343 void CPL_DLL RegisterOGRILI2();
00344 void CPL_DLL RegisterOGRGRASS();
00345 void CPL_DLL RegisterOGRPGeo();
00346 void CPL_DLL RegisterOGRDXFDWG();
00347 void CPL_DLL RegisterOGRDXF();
00348 void CPL_DLL RegisterOGRDWG();
00349 void CPL_DLL RegisterOGRSDE();
00350 void CPL_DLL RegisterOGRIDB();
00351 void CPL_DLL RegisterOGRGMT();
00352 void CPL_DLL RegisterOGRBNA();
00353 void CPL_DLL RegisterOGRGPX();
00354 void CPL_DLL RegisterOGRGeoconcept();
00355 void CPL_DLL RegisterOGRIngres();
00356 void CPL_DLL RegisterOGRPCIDSK();
00357 void CPL_DLL RegisterOGRXPlane();
00358 void CPL_DLL RegisterOGRNAS();
00359 void CPL_DLL RegisterOGRGeoRSS();
00360 void CPL_DLL RegisterOGRGTM();
00361 void CPL_DLL RegisterOGRVFK();
00362 void CPL_DLL RegisterOGRPGDump();
00363 void CPL_DLL RegisterOGRGPSBabel();
00364 void CPL_DLL RegisterOGRSUA();
00365 void CPL_DLL RegisterOGROpenAir();
00366 void CPL_DLL RegisterOGRPDS();
00367 void CPL_DLL RegisterOGRWFS();
00368 void CPL_DLL RegisterOGRSOSI();
00369 void CPL_DLL RegisterOGRHTF();
00370 void CPL_DLL RegisterOGRAeronavFAA();
00371 void CPL_DLL RegisterOGRGeomedia();
00372 void CPL_DLL RegisterOGRMDB();
00373 void CPL_DLL RegisterOGREDIGEO();
00374 void CPL_DLL RegisterOGRGFT();
00375 void CPL_DLL RegisterOGRSVG();
00376 void CPL_DLL RegisterOGRCouchDB();
00377 void CPL_DLL RegisterOGRIdrisi();
00378 void CPL_DLL RegisterOGRARCGEN();
00379 void CPL_DLL RegisterOGRSEGUKOOA();
00380 void CPL_DLL RegisterOGRSEGY();
00381 void CPL_DLL RegisterOGRXLS();
00382 void CPL_DLL RegisterOGRODS();
00383 void CPL_DLL RegisterOGRXLSX();
00384 void CPL_DLL RegisterOGRElastic();
00385 void CPL_DLL RegisterOGRPDF();
00386 CPL_C_END
00387
00388
00389 #endif