|
GDAL
|
00001 /****************************************************************************** 00002 * $Id: ogrsf_frmts.h 37968 2017-04-12 07:16:55Z 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 * Copyright (c) 2007-2014, Even Rouault <even dot rouault at mines-paris dot org> 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00023 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ****************************************************************************/ 00030 00031 #ifndef OGRSF_FRMTS_H_INCLUDED 00032 #define OGRSF_FRMTS_H_INCLUDED 00033 00034 #include "cpl_progress.h" 00035 #include "ogr_feature.h" 00036 #include "ogr_featurestyle.h" 00037 #include "gdal_priv.h" 00038 00045 00046 #if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS) 00047 #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x) 00048 #else 00049 #define OGR_DEPRECATED(x) 00050 #endif 00051 00052 00053 class OGRLayerAttrIndex; 00054 class OGRSFDriver; 00055 00056 /************************************************************************/ 00057 /* OGRLayer */ 00058 /************************************************************************/ 00059 00065 /* Note: any virtual method added to this class must also be added in the */ 00066 /* OGRLayerDecorator and OGRMutexedLayer classes. */ 00067 00068 class CPL_DLL OGRLayer : public GDALMajorObject 00069 { 00070 private: 00071 void ConvertGeomsIfNecessary( OGRFeature *poFeature ); 00072 00073 protected: 00075 int m_bFilterIsEnvelope; 00076 OGRGeometry *m_poFilterGeom; 00077 OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */ 00078 OGREnvelope m_sFilterEnvelope; 00079 int m_iGeomFieldFilter; // specify the index on which the spatial 00080 // filter is active. 00081 00082 int FilterGeometry( OGRGeometry * ); 00083 //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope); 00084 int InstallFilter( OGRGeometry * ); 00085 00086 OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce ); 00088 00089 virtual OGRErr ISetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT; 00090 virtual OGRErr ICreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT; 00091 00092 public: 00093 OGRLayer(); 00094 virtual ~OGRLayer(); 00095 00096 virtual OGRGeometry *GetSpatialFilter(); 00097 virtual void SetSpatialFilter( OGRGeometry * ); 00098 virtual void SetSpatialFilterRect( double dfMinX, double dfMinY, 00099 double dfMaxX, double dfMaxY ); 00100 00101 virtual void SetSpatialFilter( int iGeomField, OGRGeometry * ); 00102 virtual void SetSpatialFilterRect( int iGeomField, 00103 double dfMinX, double dfMinY, 00104 double dfMaxX, double dfMaxY ); 00105 00106 virtual OGRErr SetAttributeFilter( const char * ); 00107 00108 virtual void ResetReading() = 0; 00109 virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0; 00110 virtual OGRErr SetNextByIndex( GIntBig nIndex ); 00111 virtual OGRFeature *GetFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT; 00112 00113 OGRErr SetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT; 00114 OGRErr CreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT; 00115 00116 virtual OGRErr DeleteFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT; 00117 00118 virtual const char *GetName(); 00119 virtual OGRwkbGeometryType GetGeomType(); 00120 virtual OGRFeatureDefn *GetLayerDefn() = 0; 00121 virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch ); 00122 00123 virtual OGRSpatialReference *GetSpatialRef(); 00124 00125 virtual GIntBig GetFeatureCount( int bForce = TRUE ); 00126 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) CPL_WARN_UNUSED_RESULT; 00127 virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent, 00128 int bForce = TRUE) CPL_WARN_UNUSED_RESULT; 00129 00130 virtual int TestCapability( const char * ) = 0; 00131 00132 virtual OGRErr CreateField( OGRFieldDefn *poField, 00133 int bApproxOK = TRUE ); 00134 virtual OGRErr DeleteField( int iField ); 00135 virtual OGRErr ReorderFields( int* panMap ); 00136 virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlagsIn ); 00137 00138 virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField, 00139 int bApproxOK = TRUE ); 00140 00141 virtual OGRErr SyncToDisk(); 00142 00143 virtual OGRStyleTable *GetStyleTable(); 00144 virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable ); 00145 00146 virtual void SetStyleTable(OGRStyleTable *poStyleTable); 00147 00148 virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT; 00149 virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT; 00150 virtual OGRErr RollbackTransaction(); 00151 00152 virtual const char *GetFIDColumn(); 00153 virtual const char *GetGeometryColumn(); 00154 00155 virtual OGRErr SetIgnoredFields( const char **papszFields ); 00156 00157 OGRErr Intersection( OGRLayer *pLayerMethod, 00158 OGRLayer *pLayerResult, 00159 char** papszOptions = NULL, 00160 GDALProgressFunc pfnProgress = NULL, 00161 void * pProgressArg = NULL ); 00162 OGRErr Union( OGRLayer *pLayerMethod, 00163 OGRLayer *pLayerResult, 00164 char** papszOptions = NULL, 00165 GDALProgressFunc pfnProgress = NULL, 00166 void * pProgressArg = NULL ); 00167 OGRErr SymDifference( OGRLayer *pLayerMethod, 00168 OGRLayer *pLayerResult, 00169 char** papszOptions, 00170 GDALProgressFunc pfnProgress, 00171 void * pProgressArg ); 00172 OGRErr Identity( OGRLayer *pLayerMethod, 00173 OGRLayer *pLayerResult, 00174 char** papszOptions = NULL, 00175 GDALProgressFunc pfnProgress = NULL, 00176 void * pProgressArg = NULL ); 00177 OGRErr Update( OGRLayer *pLayerMethod, 00178 OGRLayer *pLayerResult, 00179 char** papszOptions = NULL, 00180 GDALProgressFunc pfnProgress = NULL, 00181 void * pProgressArg = NULL ); 00182 OGRErr Clip( OGRLayer *pLayerMethod, 00183 OGRLayer *pLayerResult, 00184 char** papszOptions = NULL, 00185 GDALProgressFunc pfnProgress = NULL, 00186 void * pProgressArg = NULL ); 00187 OGRErr Erase( OGRLayer *pLayerMethod, 00188 OGRLayer *pLayerResult, 00189 char** papszOptions = NULL, 00190 GDALProgressFunc pfnProgress = NULL, 00191 void * pProgressArg = NULL ); 00192 00193 int Reference(); 00194 int Dereference(); 00195 int GetRefCount() const; 00197 GIntBig GetFeaturesRead(); 00199 00200 /* non virtual : convenience wrapper for ReorderFields() */ 00201 OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos ); 00202 00204 int AttributeFilterEvaluationNeedsGeometry(); 00205 00206 /* consider these private */ 00207 OGRErr InitializeIndexSupport( const char * ); 00208 OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; } 00210 00211 protected: 00213 OGRStyleTable *m_poStyleTable; 00214 OGRFeatureQuery *m_poAttrQuery; 00215 char *m_pszAttrQueryString; 00216 OGRLayerAttrIndex *m_poAttrIndex; 00217 00218 int m_nRefCount; 00219 00220 GIntBig m_nFeaturesRead; 00222 }; 00223 00224 /************************************************************************/ 00225 /* OGRDataSource */ 00226 /************************************************************************/ 00227 00247 class CPL_DLL OGRDataSource : public GDALDataset 00248 { 00249 public: 00250 OGRDataSource(); 00252 virtual const char *GetName() OGR_DEPRECATED("Use GDALDataset class instead") = 0; 00253 00254 static void DestroyDataSource( OGRDataSource * ) OGR_DEPRECATED("Use GDALDataset class instead"); 00256 }; 00257 00258 /************************************************************************/ 00259 /* OGRSFDriver */ 00260 /************************************************************************/ 00261 00280 class CPL_DLL OGRSFDriver : public GDALDriver 00281 { 00282 public: 00284 virtual ~OGRSFDriver(); 00285 00286 virtual const char *GetName() OGR_DEPRECATED("Use GDALDriver class instead") = 0; 00287 00288 virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) OGR_DEPRECATED("Use GDALDriver class instead") = 0; 00289 00290 virtual int TestCapability( const char *pszCap ) OGR_DEPRECATED("Use GDALDriver class instead") = 0; 00291 00292 virtual OGRDataSource *CreateDataSource( const char *pszName, 00293 char ** = NULL ) OGR_DEPRECATED("Use GDALDriver class instead"); 00294 virtual OGRErr DeleteDataSource( const char *pszName ) OGR_DEPRECATED("Use GDALDriver class instead"); 00296 }; 00297 00298 /************************************************************************/ 00299 /* OGRSFDriverRegistrar */ 00300 /************************************************************************/ 00301 00315 class CPL_DLL OGRSFDriverRegistrar 00316 { 00317 00318 OGRSFDriverRegistrar(); 00319 ~OGRSFDriverRegistrar(); 00320 00321 static GDALDataset* OpenWithDriverArg(GDALDriver* poDriver, 00322 GDALOpenInfo* poOpenInfo); 00323 static GDALDataset* CreateVectorOnly( GDALDriver* poDriver, 00324 const char * pszName, 00325 char ** papszOptions ); 00326 static CPLErr DeleteDataSource( GDALDriver* poDriver, 00327 const char * pszName ); 00328 00329 public: 00331 static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED("Use GDALDriverManager class instead"); 00332 00333 // cppcheck-suppress functionStatic 00334 void RegisterDriver( OGRSFDriver * poDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead"); 00335 00336 // cppcheck-suppress functionStatic 00337 int GetDriverCount( void ) OGR_DEPRECATED("Use GDALDriverManager class instead"); 00338 // cppcheck-suppress functionStatic 00339 GDALDriver *GetDriver( int iDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead"); 00340 // cppcheck-suppress functionStatic 00341 GDALDriver *GetDriverByName( const char * ) OGR_DEPRECATED("Use GDALDriverManager class instead"); 00342 00343 // cppcheck-suppress functionStatic 00344 int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead"); 00345 // cppcheck-suppress functionStatic 00346 OGRDataSource *GetOpenDS( int ) OGR_DEPRECATED("Use GDALDriverManager class instead"); 00348 }; 00349 00350 /* -------------------------------------------------------------------- */ 00351 /* Various available registration methods. */ 00352 /* -------------------------------------------------------------------- */ 00353 CPL_C_START 00354 void CPL_DLL OGRRegisterAll(); 00355 00357 void OGRRegisterAllInternal(); 00358 00359 void CPL_DLL RegisterOGRFileGDB(); 00360 void CPL_DLL RegisterOGRShape(); 00361 void CPL_DLL RegisterOGRDB2(); 00362 void CPL_DLL RegisterOGRNTF(); 00363 void CPL_DLL RegisterOGRFME(); 00364 void CPL_DLL RegisterOGRSDTS(); 00365 void CPL_DLL RegisterOGRTiger(); 00366 void CPL_DLL RegisterOGRS57(); 00367 void CPL_DLL RegisterOGRTAB(); 00368 void CPL_DLL RegisterOGRMIF(); 00369 void CPL_DLL RegisterOGROGDI(); 00370 void CPL_DLL RegisterOGRODBC(); 00371 void CPL_DLL RegisterOGRWAsP(); 00372 void CPL_DLL RegisterOGRPG(); 00373 void CPL_DLL RegisterOGRMSSQLSpatial(); 00374 void CPL_DLL RegisterOGRMySQL(); 00375 void CPL_DLL RegisterOGROCI(); 00376 void CPL_DLL RegisterOGRDGN(); 00377 void CPL_DLL RegisterOGRGML(); 00378 void CPL_DLL RegisterOGRLIBKML(); 00379 void CPL_DLL RegisterOGRKML(); 00380 void CPL_DLL RegisterOGRGeoJSON(); 00381 void CPL_DLL RegisterOGRAVCBin(); 00382 void CPL_DLL RegisterOGRAVCE00(); 00383 void CPL_DLL RegisterOGRREC(); 00384 void CPL_DLL RegisterOGRMEM(); 00385 void CPL_DLL RegisterOGRVRT(); 00386 void CPL_DLL RegisterOGRDODS(); 00387 void CPL_DLL RegisterOGRSQLite(); 00388 void CPL_DLL RegisterOGRCSV(); 00389 void CPL_DLL RegisterOGRILI1(); 00390 void CPL_DLL RegisterOGRILI2(); 00391 void CPL_DLL RegisterOGRGRASS(); 00392 void CPL_DLL RegisterOGRPGeo(); 00393 void CPL_DLL RegisterOGRDXF(); 00394 void CPL_DLL RegisterOGRCAD(); 00395 void CPL_DLL RegisterOGRDWG(); 00396 void CPL_DLL RegisterOGRDGNV8(); 00397 void CPL_DLL RegisterOGRSDE(); 00398 void CPL_DLL RegisterOGRIDB(); 00399 void CPL_DLL RegisterOGRGMT(); 00400 void CPL_DLL RegisterOGRBNA(); 00401 void CPL_DLL RegisterOGRGPX(); 00402 void CPL_DLL RegisterOGRGeoconcept(); 00403 void CPL_DLL RegisterOGRIngres(); 00404 void CPL_DLL RegisterOGRXPlane(); 00405 void CPL_DLL RegisterOGRNAS(); 00406 void CPL_DLL RegisterOGRGeoRSS(); 00407 void CPL_DLL RegisterOGRGTM(); 00408 void CPL_DLL RegisterOGRVFK(); 00409 void CPL_DLL RegisterOGRPGDump(); 00410 void CPL_DLL RegisterOGROSM(); 00411 void CPL_DLL RegisterOGRGPSBabel(); 00412 void CPL_DLL RegisterOGRSUA(); 00413 void CPL_DLL RegisterOGROpenAir(); 00414 void CPL_DLL RegisterOGRPDS(); 00415 void CPL_DLL RegisterOGRWFS(); 00416 void CPL_DLL RegisterOGRSOSI(); 00417 void CPL_DLL RegisterOGRHTF(); 00418 void CPL_DLL RegisterOGRAeronavFAA(); 00419 void CPL_DLL RegisterOGRGeomedia(); 00420 void CPL_DLL RegisterOGRMDB(); 00421 void CPL_DLL RegisterOGREDIGEO(); 00422 void CPL_DLL RegisterOGRGFT(); 00423 void CPL_DLL RegisterOGRSVG(); 00424 void CPL_DLL RegisterOGRCouchDB(); 00425 void CPL_DLL RegisterOGRCloudant(); 00426 void CPL_DLL RegisterOGRIdrisi(); 00427 void CPL_DLL RegisterOGRARCGEN(); 00428 void CPL_DLL RegisterOGRSEGUKOOA(); 00429 void CPL_DLL RegisterOGRSEGY(); 00430 void CPL_DLL RegisterOGRXLS(); 00431 void CPL_DLL RegisterOGRODS(); 00432 void CPL_DLL RegisterOGRXLSX(); 00433 void CPL_DLL RegisterOGRElastic(); 00434 void CPL_DLL RegisterOGRGeoPackage(); 00435 void CPL_DLL RegisterOGRWalk(); 00436 void CPL_DLL RegisterOGRCarto(); 00437 void CPL_DLL RegisterOGRAmigoCloud(); 00438 void CPL_DLL RegisterOGRSXF(); 00439 void CPL_DLL RegisterOGROpenFileGDB(); 00440 void CPL_DLL RegisterOGRSelafin(); 00441 void CPL_DLL RegisterOGRJML(); 00442 void CPL_DLL RegisterOGRPLSCENES(); 00443 void CPL_DLL RegisterOGRCSW(); 00444 void CPL_DLL RegisterOGRMongoDB(); 00445 void CPL_DLL RegisterOGRVDV(); 00446 void CPL_DLL RegisterOGRGMLAS(); 00447 // @endcond 00448 00449 CPL_C_END 00450 00451 #endif /* ndef OGRSF_FRMTS_H_INCLUDED */
1.7.6.1.