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