ogrsf_frmts.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. /******************************************************************************
  2. * $Id: ogrsf_frmts.h 29035 2015-04-27 12:38:54Z rouault $
  3. *
  4. * Project: OpenGIS Simple Features Reference Implementation
  5. * Purpose: Classes related to format registration, and file opening.
  6. * Author: Frank Warmerdam, warmerda@home.com
  7. *
  8. ******************************************************************************
  9. * Copyright (c) 1999, Les Technologies SoftMap Inc.
  10. * Copyright (c) 2007-2014, Even Rouault <even dot rouault at mines-paris dot org>
  11. *
  12. * Permission is hereby granted, free of charge, to any person obtaining a
  13. * copy of this software and associated documentation files (the "Software"),
  14. * to deal in the Software without restriction, including without limitation
  15. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  16. * and/or sell copies of the Software, and to permit persons to whom the
  17. * Software is furnished to do so, subject to the following conditions:
  18. *
  19. * The above copyright notice and this permission notice shall be included
  20. * in all copies or substantial portions of the Software.
  21. *
  22. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  23. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  24. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  25. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  26. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  27. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  28. * DEALINGS IN THE SOFTWARE.
  29. ****************************************************************************/
  30. #ifndef _OGRSF_FRMTS_H_INCLUDED
  31. #define _OGRSF_FRMTS_H_INCLUDED
  32. #include "cpl_progress.h"
  33. #include "ogr_feature.h"
  34. #include "ogr_featurestyle.h"
  35. #include "gdal_priv.h"
  36. /**
  37. * \file ogrsf_frmts.h
  38. *
  39. * Classes related to registration of format support, and opening datasets.
  40. */
  41. #if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
  42. #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
  43. #else
  44. #define OGR_DEPRECATED(x)
  45. #endif
  46. class OGRLayerAttrIndex;
  47. class OGRSFDriver;
  48. /************************************************************************/
  49. /* OGRLayer */
  50. /************************************************************************/
  51. /**
  52. * This class represents a layer of simple features, with access methods.
  53. *
  54. */
  55. /* Note: any virtual method added to this class must also be added in the */
  56. /* OGRLayerDecorator and OGRMutexedLayer classes. */
  57. class CPL_DLL OGRLayer : public GDALMajorObject
  58. {
  59. private:
  60. void ConvertNonLinearGeomsIfNecessary( OGRFeature *poFeature );
  61. protected:
  62. int m_bFilterIsEnvelope;
  63. OGRGeometry *m_poFilterGeom;
  64. OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */
  65. OGREnvelope m_sFilterEnvelope;
  66. int m_iGeomFieldFilter; // specify the index on which the spatial
  67. // filter is active.
  68. int FilterGeometry( OGRGeometry * );
  69. //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
  70. int InstallFilter( OGRGeometry * );
  71. OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce );
  72. virtual OGRErr ISetFeature( OGRFeature *poFeature );
  73. virtual OGRErr ICreateFeature( OGRFeature *poFeature );
  74. public:
  75. OGRLayer();
  76. virtual ~OGRLayer();
  77. virtual OGRGeometry *GetSpatialFilter();
  78. virtual void SetSpatialFilter( OGRGeometry * );
  79. virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
  80. double dfMaxX, double dfMaxY );
  81. virtual void SetSpatialFilter( int iGeomField, OGRGeometry * );
  82. virtual void SetSpatialFilterRect( int iGeomField,
  83. double dfMinX, double dfMinY,
  84. double dfMaxX, double dfMaxY );
  85. virtual OGRErr SetAttributeFilter( const char * );
  86. virtual void ResetReading() = 0;
  87. virtual OGRFeature *GetNextFeature() = 0;
  88. virtual OGRErr SetNextByIndex( GIntBig nIndex );
  89. virtual OGRFeature *GetFeature( GIntBig nFID );
  90. OGRErr SetFeature( OGRFeature *poFeature );
  91. OGRErr CreateFeature( OGRFeature *poFeature );
  92. virtual OGRErr DeleteFeature( GIntBig nFID );
  93. virtual const char *GetName();
  94. virtual OGRwkbGeometryType GetGeomType();
  95. virtual OGRFeatureDefn *GetLayerDefn() = 0;
  96. virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch );
  97. virtual OGRSpatialReference *GetSpatialRef();
  98. virtual GIntBig GetFeatureCount( int bForce = TRUE );
  99. virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);
  100. virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
  101. int bForce = TRUE);
  102. virtual int TestCapability( const char * ) = 0;
  103. virtual OGRErr CreateField( OGRFieldDefn *poField,
  104. int bApproxOK = TRUE );
  105. virtual OGRErr DeleteField( int iField );
  106. virtual OGRErr ReorderFields( int* panMap );
  107. virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlagsIn );
  108. virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
  109. int bApproxOK = TRUE );
  110. virtual OGRErr SyncToDisk();
  111. virtual OGRStyleTable *GetStyleTable();
  112. virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
  113. virtual void SetStyleTable(OGRStyleTable *poStyleTable);
  114. virtual OGRErr StartTransaction();
  115. virtual OGRErr CommitTransaction();
  116. virtual OGRErr RollbackTransaction();
  117. virtual const char *GetFIDColumn();
  118. virtual const char *GetGeometryColumn();
  119. virtual OGRErr SetIgnoredFields( const char **papszFields );
  120. OGRErr Intersection( OGRLayer *pLayerMethod,
  121. OGRLayer *pLayerResult,
  122. char** papszOptions = NULL,
  123. GDALProgressFunc pfnProgress = NULL,
  124. void * pProgressArg = NULL );
  125. OGRErr Union( OGRLayer *pLayerMethod,
  126. OGRLayer *pLayerResult,
  127. char** papszOptions = NULL,
  128. GDALProgressFunc pfnProgress = NULL,
  129. void * pProgressArg = NULL );
  130. OGRErr SymDifference( OGRLayer *pLayerMethod,
  131. OGRLayer *pLayerResult,
  132. char** papszOptions,
  133. GDALProgressFunc pfnProgress,
  134. void * pProgressArg );
  135. OGRErr Identity( OGRLayer *pLayerMethod,
  136. OGRLayer *pLayerResult,
  137. char** papszOptions = NULL,
  138. GDALProgressFunc pfnProgress = NULL,
  139. void * pProgressArg = NULL );
  140. OGRErr Update( OGRLayer *pLayerMethod,
  141. OGRLayer *pLayerResult,
  142. char** papszOptions = NULL,
  143. GDALProgressFunc pfnProgress = NULL,
  144. void * pProgressArg = NULL );
  145. OGRErr Clip( OGRLayer *pLayerMethod,
  146. OGRLayer *pLayerResult,
  147. char** papszOptions = NULL,
  148. GDALProgressFunc pfnProgress = NULL,
  149. void * pProgressArg = NULL );
  150. OGRErr Erase( OGRLayer *pLayerMethod,
  151. OGRLayer *pLayerResult,
  152. char** papszOptions = NULL,
  153. GDALProgressFunc pfnProgress = NULL,
  154. void * pProgressArg = NULL );
  155. int Reference();
  156. int Dereference();
  157. int GetRefCount() const;
  158. GIntBig GetFeaturesRead();
  159. /* non virtual : conveniency wrapper for ReorderFields() */
  160. OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
  161. int AttributeFilterEvaluationNeedsGeometry();
  162. /* consider these private */
  163. OGRErr InitializeIndexSupport( const char * );
  164. OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
  165. protected:
  166. OGRStyleTable *m_poStyleTable;
  167. OGRFeatureQuery *m_poAttrQuery;
  168. char *m_pszAttrQueryString;
  169. OGRLayerAttrIndex *m_poAttrIndex;
  170. int m_nRefCount;
  171. GIntBig m_nFeaturesRead;
  172. };
  173. /************************************************************************/
  174. /* OGRDataSource */
  175. /************************************************************************/
  176. /**
  177. * LEGACY class. Use GDALDataset in your new code ! This class may be
  178. * removed in a later release.
  179. *
  180. * This class represents a data source. A data source potentially
  181. * consists of many layers (OGRLayer). A data source normally consists
  182. * of one, or a related set of files, though the name doesn't have to be
  183. * a real item in the file system.
  184. *
  185. * When an OGRDataSource is destroyed, all it's associated OGRLayers objects
  186. * are also destroyed.
  187. *
  188. * NOTE: Starting with GDAL 2.0, it is *NOT* safe to cast the handle of
  189. * a C function that returns a OGRDataSourceH to a OGRDataSource*. If a C++ object
  190. * is needed, the handle should be cast to GDALDataset*.
  191. *
  192. * @deprecated
  193. */
  194. class CPL_DLL OGRDataSource : public GDALDataset
  195. {
  196. public:
  197. OGRDataSource();
  198. virtual const char *GetName() OGR_DEPRECATED("Use GDALDataset class instead") = 0;
  199. static void DestroyDataSource( OGRDataSource * ) OGR_DEPRECATED("Use GDALDataset class instead");
  200. };
  201. /************************************************************************/
  202. /* OGRSFDriver */
  203. /************************************************************************/
  204. /**
  205. * LEGACY class. Use GDALDriver in your new code ! This class may be
  206. * removed in a later release.
  207. *
  208. * Represents an operational format driver.
  209. *
  210. * One OGRSFDriver derived class will normally exist for each file format
  211. * registered for use, regardless of whether a file has or will be opened.
  212. * The list of available drivers is normally managed by the
  213. * OGRSFDriverRegistrar.
  214. *
  215. * NOTE: Starting with GDAL 2.0, it is *NOT* safe to cast the handle of
  216. * a C function that returns a OGRSFDriverH to a OGRSFDriver*. If a C++ object
  217. * is needed, the handle should be cast to GDALDriver*.
  218. *
  219. * @deprecated
  220. */
  221. class CPL_DLL OGRSFDriver : public GDALDriver
  222. {
  223. public:
  224. virtual ~OGRSFDriver();
  225. virtual const char *GetName() OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  226. virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  227. virtual int TestCapability( const char *pszCap ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  228. virtual OGRDataSource *CreateDataSource( const char *pszName,
  229. char ** = NULL ) OGR_DEPRECATED("Use GDALDriver class instead");
  230. virtual OGRErr DeleteDataSource( const char *pszName ) OGR_DEPRECATED("Use GDALDriver class instead");
  231. };
  232. /************************************************************************/
  233. /* OGRSFDriverRegistrar */
  234. /************************************************************************/
  235. /**
  236. * LEGACY class. Use GDALDriverManager in your new code ! This class may be
  237. * removed in a later release.
  238. *
  239. * Singleton manager for OGRSFDriver instances that will be used to try
  240. * and open datasources. Normally the registrar is populated with
  241. * standard drivers using the OGRRegisterAll() function and does not need
  242. * to be directly accessed. The driver registrar and all registered drivers
  243. * may be cleaned up on shutdown using OGRCleanupAll().
  244. *
  245. * @deprecated
  246. */
  247. class CPL_DLL OGRSFDriverRegistrar
  248. {
  249. OGRSFDriverRegistrar();
  250. ~OGRSFDriverRegistrar();
  251. static GDALDataset* OpenWithDriverArg(GDALDriver* poDriver,
  252. GDALOpenInfo* poOpenInfo);
  253. static GDALDataset* CreateVectorOnly( GDALDriver* poDriver,
  254. const char * pszName,
  255. char ** papszOptions );
  256. static CPLErr DeleteDataSource( GDALDriver* poDriver,
  257. const char * pszName );
  258. public:
  259. static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED("Use GDALDriverManager class instead");
  260. void RegisterDriver( OGRSFDriver * poDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  261. int GetDriverCount( void ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  262. GDALDriver *GetDriver( int iDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  263. GDALDriver *GetDriverByName( const char * ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  264. int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead");
  265. OGRDataSource *GetOpenDS( int ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  266. };
  267. /* -------------------------------------------------------------------- */
  268. /* Various available registration methods. */
  269. /* -------------------------------------------------------------------- */
  270. CPL_C_START
  271. void CPL_DLL OGRRegisterAll();
  272. void OGRRegisterAllInternal();
  273. void CPL_DLL RegisterOGRFileGDB();
  274. void CPL_DLL RegisterOGRShape();
  275. void CPL_DLL RegisterOGRNTF();
  276. void CPL_DLL RegisterOGRFME();
  277. void CPL_DLL RegisterOGRSDTS();
  278. void CPL_DLL RegisterOGRTiger();
  279. void CPL_DLL RegisterOGRS57();
  280. void CPL_DLL RegisterOGRTAB();
  281. void CPL_DLL RegisterOGRMIF();
  282. void CPL_DLL RegisterOGROGDI();
  283. void CPL_DLL RegisterOGRODBC();
  284. void CPL_DLL RegisterOGRWAsP();
  285. void CPL_DLL RegisterOGRPG();
  286. void CPL_DLL RegisterOGRMSSQLSpatial();
  287. void CPL_DLL RegisterOGRMySQL();
  288. void CPL_DLL RegisterOGROCI();
  289. void CPL_DLL RegisterOGRDGN();
  290. void CPL_DLL RegisterOGRGML();
  291. void CPL_DLL RegisterOGRLIBKML();
  292. void CPL_DLL RegisterOGRKML();
  293. void CPL_DLL RegisterOGRGeoJSON();
  294. void CPL_DLL RegisterOGRAVCBin();
  295. void CPL_DLL RegisterOGRAVCE00();
  296. void CPL_DLL RegisterOGRREC();
  297. void CPL_DLL RegisterOGRMEM();
  298. void CPL_DLL RegisterOGRVRT();
  299. void CPL_DLL RegisterOGRDODS();
  300. void CPL_DLL RegisterOGRSQLite();
  301. void CPL_DLL RegisterOGRCSV();
  302. void CPL_DLL RegisterOGRILI1();
  303. void CPL_DLL RegisterOGRILI2();
  304. void CPL_DLL RegisterOGRGRASS();
  305. void CPL_DLL RegisterOGRPGeo();
  306. void CPL_DLL RegisterOGRDXFDWG();
  307. void CPL_DLL RegisterOGRDXF();
  308. void CPL_DLL RegisterOGRDWG();
  309. void CPL_DLL RegisterOGRSDE();
  310. void CPL_DLL RegisterOGRIDB();
  311. void CPL_DLL RegisterOGRGMT();
  312. void CPL_DLL RegisterOGRBNA();
  313. void CPL_DLL RegisterOGRGPX();
  314. void CPL_DLL RegisterOGRGeoconcept();
  315. void CPL_DLL RegisterOGRIngres();
  316. void CPL_DLL RegisterOGRXPlane();
  317. void CPL_DLL RegisterOGRNAS();
  318. void CPL_DLL RegisterOGRGeoRSS();
  319. void CPL_DLL RegisterOGRGTM();
  320. void CPL_DLL RegisterOGRVFK();
  321. void CPL_DLL RegisterOGRPGDump();
  322. void CPL_DLL RegisterOGROSM();
  323. void CPL_DLL RegisterOGRGPSBabel();
  324. void CPL_DLL RegisterOGRSUA();
  325. void CPL_DLL RegisterOGROpenAir();
  326. void CPL_DLL RegisterOGRPDS();
  327. void CPL_DLL RegisterOGRWFS();
  328. void CPL_DLL RegisterOGRSOSI();
  329. void CPL_DLL RegisterOGRHTF();
  330. void CPL_DLL RegisterOGRAeronavFAA();
  331. void CPL_DLL RegisterOGRGeomedia();
  332. void CPL_DLL RegisterOGRMDB();
  333. void CPL_DLL RegisterOGREDIGEO();
  334. void CPL_DLL RegisterOGRGFT();
  335. void CPL_DLL RegisterOGRGME();
  336. void CPL_DLL RegisterOGRSVG();
  337. void CPL_DLL RegisterOGRCouchDB();
  338. void CPL_DLL RegisterOGRCloudant();
  339. void CPL_DLL RegisterOGRIdrisi();
  340. void CPL_DLL RegisterOGRARCGEN();
  341. void CPL_DLL RegisterOGRSEGUKOOA();
  342. void CPL_DLL RegisterOGRSEGY();
  343. void CPL_DLL RegisterOGRXLS();
  344. void CPL_DLL RegisterOGRODS();
  345. void CPL_DLL RegisterOGRXLSX();
  346. void CPL_DLL RegisterOGRElastic();
  347. void CPL_DLL RegisterOGRGeoPackage();
  348. void CPL_DLL RegisterOGRWalk();
  349. void CPL_DLL RegisterOGRCartoDB();
  350. void CPL_DLL RegisterOGRSXF();
  351. void CPL_DLL RegisterOGROpenFileGDB();
  352. void CPL_DLL RegisterOGRSelafin();
  353. void CPL_DLL RegisterOGRJML();
  354. void CPL_DLL RegisterOGRPLSCENES();
  355. void CPL_DLL RegisterOGRCSW();
  356. CPL_C_END
  357. #endif /* ndef _OGRSF_FRMTS_H_INCLUDED */