ogrsf_frmts.h

Go to the documentation of this file.
00001 /******************************************************************************
00002  * $Id: ogrsf_frmts.h 24143 2012-03-19 21:40:42Z rouault $
00003  *
00004  * Project:  OpenGIS Simple Features Reference Implementation
00005  * Purpose:  Classes related to format registration, and file opening.
00006  * Author:   Frank Warmerdam, warmerda@home.com
00007  *
00008  ******************************************************************************
00009  * Copyright (c) 1999,  Les Technologies SoftMap Inc.
00010  *
00011  * Permission is hereby granted, free of charge, to any person obtaining a
00012  * copy of this software and associated documentation files (the "Software"),
00013  * to deal in the Software without restriction, including without limitation
00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00015  * and/or sell copies of the Software, and to permit persons to whom the
00016  * Software is furnished to do so, subject to the following conditions:
00017  *
00018  * The above copyright notice and this permission notice shall be included
00019  * in all copies or substantial portions of the Software.
00020  *
00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00027  * DEALINGS IN THE SOFTWARE.
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 /*                               OGRLayer                               */
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          FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
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     /* non virtual : conveniency wrapper for ReorderFields() */
00126     OGRErr              ReorderField( int iOldFieldPos, int iNewFieldPos );
00127 
00128     int                 AttributeFilterEvaluationNeedsGeometry();
00129 
00130     /* consider these private */
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 /*                            OGRDataSource                             */
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 /*                             OGRSFDriver                              */
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 /*                         OGRSFDriverRegistrar                         */
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 /*      Various available registration methods.                         */
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 /* ndef _OGRSF_FRMTS_H_INCLUDED */

Generated for GDAL by doxygen 1.7.1.