gooderp18绿色标准版
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

528 行
20KB

  1. /******************************************************************************
  2. * $Id: ogrsf_frmts.h d9f7fa611bf09986ea4695f4c5b36be798bf9a17 2019-01-13 13:53:53 +0100 Even 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. #include <memory>
  37. /**
  38. * \file ogrsf_frmts.h
  39. *
  40. * Classes related to registration of format support, and opening datasets.
  41. */
  42. //! @cond Doxygen_Suppress
  43. #if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
  44. #define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
  45. #else
  46. #define OGR_DEPRECATED(x)
  47. #endif
  48. //! @endcond
  49. class OGRLayerAttrIndex;
  50. class OGRSFDriver;
  51. /************************************************************************/
  52. /* OGRLayer */
  53. /************************************************************************/
  54. /**
  55. * This class represents a layer of simple features, with access methods.
  56. *
  57. */
  58. /* Note: any virtual method added to this class must also be added in the */
  59. /* OGRLayerDecorator and OGRMutexedLayer classes. */
  60. class CPL_DLL OGRLayer : public GDALMajorObject
  61. {
  62. private:
  63. struct Private;
  64. std::unique_ptr<Private> m_poPrivate;
  65. void ConvertGeomsIfNecessary( OGRFeature *poFeature );
  66. class CPL_DLL FeatureIterator
  67. {
  68. struct Private;
  69. std::unique_ptr<Private> m_poPrivate;
  70. public:
  71. FeatureIterator(OGRLayer* poLayer, bool bStart);
  72. FeatureIterator(FeatureIterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
  73. ~FeatureIterator();
  74. OGRFeatureUniquePtr& operator*();
  75. FeatureIterator& operator++();
  76. bool operator!=(const FeatureIterator& it) const;
  77. };
  78. friend inline FeatureIterator begin(OGRLayer* poLayer);
  79. friend inline FeatureIterator end(OGRLayer* poLayer);
  80. CPL_DISALLOW_COPY_ASSIGN(OGRLayer)
  81. protected:
  82. //! @cond Doxygen_Suppress
  83. int m_bFilterIsEnvelope;
  84. OGRGeometry *m_poFilterGeom;
  85. OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a prepared geometry */
  86. OGREnvelope m_sFilterEnvelope;
  87. int m_iGeomFieldFilter; // specify the index on which the spatial
  88. // filter is active.
  89. int FilterGeometry( OGRGeometry * );
  90. //int FilterGeometry( OGRGeometry *, OGREnvelope* psGeometryEnvelope);
  91. int InstallFilter( OGRGeometry * );
  92. OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce );
  93. //! @endcond
  94. virtual OGRErr ISetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
  95. virtual OGRErr ICreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
  96. public:
  97. OGRLayer();
  98. virtual ~OGRLayer();
  99. /** Return begin of feature iterator.
  100. *
  101. * Using this iterator for standard range-based loops is safe, but
  102. * due to implementation limitations, you shouldn't try to access
  103. * (dereference) more than one iterator step at a time, since the
  104. * OGRFeatureUniquePtr reference is reused.
  105. *
  106. * Only one iterator per layer can be active at a time.
  107. * @since GDAL 2.3
  108. */
  109. FeatureIterator begin();
  110. /** Return end of feature iterator. */
  111. FeatureIterator end();
  112. virtual OGRGeometry *GetSpatialFilter();
  113. virtual void SetSpatialFilter( OGRGeometry * );
  114. virtual void SetSpatialFilterRect( double dfMinX, double dfMinY,
  115. double dfMaxX, double dfMaxY );
  116. virtual void SetSpatialFilter( int iGeomField, OGRGeometry * );
  117. virtual void SetSpatialFilterRect( int iGeomField,
  118. double dfMinX, double dfMinY,
  119. double dfMaxX, double dfMaxY );
  120. virtual OGRErr SetAttributeFilter( const char * );
  121. virtual void ResetReading() = 0;
  122. virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0;
  123. virtual OGRErr SetNextByIndex( GIntBig nIndex );
  124. virtual OGRFeature *GetFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
  125. OGRErr SetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
  126. OGRErr CreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
  127. virtual OGRErr DeleteFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
  128. virtual const char *GetName();
  129. virtual OGRwkbGeometryType GetGeomType();
  130. virtual OGRFeatureDefn *GetLayerDefn() = 0;
  131. virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch );
  132. virtual OGRSpatialReference *GetSpatialRef();
  133. virtual GIntBig GetFeatureCount( int bForce = TRUE );
  134. virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
  135. virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
  136. int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
  137. virtual int TestCapability( const char * ) = 0;
  138. virtual OGRErr CreateField( OGRFieldDefn *poField,
  139. int bApproxOK = TRUE );
  140. virtual OGRErr DeleteField( int iField );
  141. virtual OGRErr ReorderFields( int* panMap );
  142. virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlagsIn );
  143. virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField,
  144. int bApproxOK = TRUE );
  145. virtual OGRErr SyncToDisk();
  146. virtual OGRStyleTable *GetStyleTable();
  147. virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
  148. virtual void SetStyleTable(OGRStyleTable *poStyleTable);
  149. virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
  150. virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
  151. virtual OGRErr RollbackTransaction();
  152. virtual const char *GetFIDColumn();
  153. virtual const char *GetGeometryColumn();
  154. virtual OGRErr SetIgnoredFields( const char **papszFields );
  155. OGRErr Intersection( OGRLayer *pLayerMethod,
  156. OGRLayer *pLayerResult,
  157. char** papszOptions = nullptr,
  158. GDALProgressFunc pfnProgress = nullptr,
  159. void * pProgressArg = nullptr );
  160. OGRErr Union( OGRLayer *pLayerMethod,
  161. OGRLayer *pLayerResult,
  162. char** papszOptions = nullptr,
  163. GDALProgressFunc pfnProgress = nullptr,
  164. void * pProgressArg = nullptr );
  165. OGRErr SymDifference( OGRLayer *pLayerMethod,
  166. OGRLayer *pLayerResult,
  167. char** papszOptions,
  168. GDALProgressFunc pfnProgress,
  169. void * pProgressArg );
  170. OGRErr Identity( OGRLayer *pLayerMethod,
  171. OGRLayer *pLayerResult,
  172. char** papszOptions = nullptr,
  173. GDALProgressFunc pfnProgress = nullptr,
  174. void * pProgressArg = nullptr );
  175. OGRErr Update( OGRLayer *pLayerMethod,
  176. OGRLayer *pLayerResult,
  177. char** papszOptions = nullptr,
  178. GDALProgressFunc pfnProgress = nullptr,
  179. void * pProgressArg = nullptr );
  180. OGRErr Clip( OGRLayer *pLayerMethod,
  181. OGRLayer *pLayerResult,
  182. char** papszOptions = nullptr,
  183. GDALProgressFunc pfnProgress = nullptr,
  184. void * pProgressArg = nullptr );
  185. OGRErr Erase( OGRLayer *pLayerMethod,
  186. OGRLayer *pLayerResult,
  187. char** papszOptions = nullptr,
  188. GDALProgressFunc pfnProgress = nullptr,
  189. void * pProgressArg = nullptr );
  190. int Reference();
  191. int Dereference();
  192. int GetRefCount() const;
  193. //! @cond Doxygen_Suppress
  194. GIntBig GetFeaturesRead();
  195. //! @endcond
  196. /* non virtual : convenience wrapper for ReorderFields() */
  197. OGRErr ReorderField( int iOldFieldPos, int iNewFieldPos );
  198. //! @cond Doxygen_Suppress
  199. int AttributeFilterEvaluationNeedsGeometry();
  200. /* consider these private */
  201. OGRErr InitializeIndexSupport( const char * );
  202. OGRLayerAttrIndex *GetIndex() { return m_poAttrIndex; }
  203. int GetGeomFieldFilter() const { return m_iGeomFieldFilter; }
  204. const char *GetAttrQueryString() const { return m_pszAttrQueryString; }
  205. //! @endcond
  206. /** Convert a OGRLayer* to a OGRLayerH.
  207. * @since GDAL 2.3
  208. */
  209. static inline OGRLayerH ToHandle(OGRLayer* poLayer)
  210. { return reinterpret_cast<OGRLayerH>(poLayer); }
  211. /** Convert a OGRLayerH to a OGRLayer*.
  212. * @since GDAL 2.3
  213. */
  214. static inline OGRLayer* FromHandle(OGRLayerH hLayer)
  215. { return reinterpret_cast<OGRLayer*>(hLayer); }
  216. protected:
  217. //! @cond Doxygen_Suppress
  218. OGRStyleTable *m_poStyleTable;
  219. OGRFeatureQuery *m_poAttrQuery;
  220. char *m_pszAttrQueryString;
  221. OGRLayerAttrIndex *m_poAttrIndex;
  222. int m_nRefCount;
  223. GIntBig m_nFeaturesRead;
  224. //! @endcond
  225. };
  226. /** Return begin of feature iterator.
  227. *
  228. * Using this iterator for standard range-based loops is safe, but
  229. * due to implementation limitations, you shouldn't try to access
  230. * (dereference) more than one iterator step at a time, since the
  231. * std::unique_ptr&lt;OGRFeature&gt; reference is reused.
  232. *
  233. * Only one iterator per layer can be active at a time.
  234. * @since GDAL 2.3
  235. * @see OGRLayer::begin()
  236. */
  237. inline OGRLayer::FeatureIterator begin(OGRLayer* poLayer) { return poLayer->begin(); }
  238. /** Return end of feature iterator.
  239. * @see OGRLayer::end()
  240. */
  241. inline OGRLayer::FeatureIterator end(OGRLayer* poLayer) { return poLayer->end(); }
  242. /************************************************************************/
  243. /* OGRDataSource */
  244. /************************************************************************/
  245. /**
  246. * LEGACY class. Use GDALDataset in your new code ! This class may be
  247. * removed in a later release.
  248. *
  249. * This class represents a data source. A data source potentially
  250. * consists of many layers (OGRLayer). A data source normally consists
  251. * of one, or a related set of files, though the name doesn't have to be
  252. * a real item in the file system.
  253. *
  254. * When an OGRDataSource is destroyed, all its associated OGRLayers objects
  255. * are also destroyed.
  256. *
  257. * NOTE: Starting with GDAL 2.0, it is *NOT* safe to cast the handle of
  258. * a C function that returns a OGRDataSourceH to a OGRDataSource*. If a C++ object
  259. * is needed, the handle should be cast to GDALDataset*.
  260. *
  261. * @deprecated
  262. */
  263. class CPL_DLL OGRDataSource : public GDALDataset
  264. {
  265. public:
  266. OGRDataSource();
  267. //! @cond Doxygen_Suppress
  268. virtual const char *GetName() OGR_DEPRECATED("Use GDALDataset class instead") = 0;
  269. static void DestroyDataSource( OGRDataSource * ) OGR_DEPRECATED("Use GDALDataset class instead");
  270. //! @endcond
  271. };
  272. /************************************************************************/
  273. /* OGRSFDriver */
  274. /************************************************************************/
  275. /**
  276. * LEGACY class. Use GDALDriver in your new code ! This class may be
  277. * removed in a later release.
  278. *
  279. * Represents an operational format driver.
  280. *
  281. * One OGRSFDriver derived class will normally exist for each file format
  282. * registered for use, regardless of whether a file has or will be opened.
  283. * The list of available drivers is normally managed by the
  284. * OGRSFDriverRegistrar.
  285. *
  286. * NOTE: Starting with GDAL 2.0, it is *NOT* safe to cast the handle of
  287. * a C function that returns a OGRSFDriverH to a OGRSFDriver*. If a C++ object
  288. * is needed, the handle should be cast to GDALDriver*.
  289. *
  290. * @deprecated
  291. */
  292. class CPL_DLL OGRSFDriver : public GDALDriver
  293. {
  294. public:
  295. //! @cond Doxygen_Suppress
  296. virtual ~OGRSFDriver();
  297. virtual const char *GetName() OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  298. virtual OGRDataSource *Open( const char *pszName, int bUpdate=FALSE ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  299. virtual int TestCapability( const char *pszCap ) OGR_DEPRECATED("Use GDALDriver class instead") = 0;
  300. virtual OGRDataSource *CreateDataSource( const char *pszName,
  301. char ** = nullptr ) OGR_DEPRECATED("Use GDALDriver class instead");
  302. virtual OGRErr DeleteDataSource( const char *pszName ) OGR_DEPRECATED("Use GDALDriver class instead");
  303. //! @endcond
  304. };
  305. /************************************************************************/
  306. /* OGRSFDriverRegistrar */
  307. /************************************************************************/
  308. /**
  309. * LEGACY class. Use GDALDriverManager in your new code ! This class may be
  310. * removed in a later release.
  311. *
  312. * Singleton manager for OGRSFDriver instances that will be used to try
  313. * and open datasources. Normally the registrar is populated with
  314. * standard drivers using the OGRRegisterAll() function and does not need
  315. * to be directly accessed. The driver registrar and all registered drivers
  316. * may be cleaned up on shutdown using OGRCleanupAll().
  317. *
  318. * @deprecated
  319. */
  320. class CPL_DLL OGRSFDriverRegistrar
  321. {
  322. OGRSFDriverRegistrar();
  323. ~OGRSFDriverRegistrar();
  324. static GDALDataset* OpenWithDriverArg(GDALDriver* poDriver,
  325. GDALOpenInfo* poOpenInfo);
  326. static GDALDataset* CreateVectorOnly( GDALDriver* poDriver,
  327. const char * pszName,
  328. char ** papszOptions );
  329. static CPLErr DeleteDataSource( GDALDriver* poDriver,
  330. const char * pszName );
  331. public:
  332. //! @cond Doxygen_Suppress
  333. static OGRSFDriverRegistrar *GetRegistrar() OGR_DEPRECATED("Use GDALDriverManager class instead");
  334. // cppcheck-suppress functionStatic
  335. void RegisterDriver( OGRSFDriver * poDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  336. // cppcheck-suppress functionStatic
  337. int GetDriverCount( void ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  338. // cppcheck-suppress functionStatic
  339. GDALDriver *GetDriver( int iDriver ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  340. // cppcheck-suppress functionStatic
  341. GDALDriver *GetDriverByName( const char * ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  342. // cppcheck-suppress functionStatic
  343. int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead");
  344. // cppcheck-suppress functionStatic
  345. OGRDataSource *GetOpenDS( int ) OGR_DEPRECATED("Use GDALDriverManager class instead");
  346. //! @endcond
  347. };
  348. /* -------------------------------------------------------------------- */
  349. /* Various available registration methods. */
  350. /* -------------------------------------------------------------------- */
  351. CPL_C_START
  352. //! @cond Doxygen_Suppress
  353. void OGRRegisterAllInternal();
  354. void CPL_DLL RegisterOGRFileGDB();
  355. void CPL_DLL RegisterOGRShape();
  356. void CPL_DLL RegisterOGRDB2();
  357. void CPL_DLL RegisterOGRNTF();
  358. void CPL_DLL RegisterOGRFME();
  359. void CPL_DLL RegisterOGRSDTS();
  360. void CPL_DLL RegisterOGRTiger();
  361. void CPL_DLL RegisterOGRS57();
  362. void CPL_DLL RegisterOGRTAB();
  363. void CPL_DLL RegisterOGRMIF();
  364. void CPL_DLL RegisterOGROGDI();
  365. void CPL_DLL RegisterOGRODBC();
  366. void CPL_DLL RegisterOGRWAsP();
  367. void CPL_DLL RegisterOGRPG();
  368. void CPL_DLL RegisterOGRMSSQLSpatial();
  369. void CPL_DLL RegisterOGRMySQL();
  370. void CPL_DLL RegisterOGROCI();
  371. void CPL_DLL RegisterOGRDGN();
  372. void CPL_DLL RegisterOGRGML();
  373. void CPL_DLL RegisterOGRLIBKML();
  374. void CPL_DLL RegisterOGRKML();
  375. void CPL_DLL RegisterOGRGeoJSON();
  376. void CPL_DLL RegisterOGRGeoJSONSeq();
  377. void CPL_DLL RegisterOGRESRIJSON();
  378. void CPL_DLL RegisterOGRTopoJSON();
  379. void CPL_DLL RegisterOGRAVCBin();
  380. void CPL_DLL RegisterOGRAVCE00();
  381. void CPL_DLL RegisterOGRREC();
  382. void CPL_DLL RegisterOGRMEM();
  383. void CPL_DLL RegisterOGRVRT();
  384. void CPL_DLL RegisterOGRDODS();
  385. void CPL_DLL RegisterOGRSQLite();
  386. void CPL_DLL RegisterOGRCSV();
  387. void CPL_DLL RegisterOGRILI1();
  388. void CPL_DLL RegisterOGRILI2();
  389. void CPL_DLL RegisterOGRGRASS();
  390. void CPL_DLL RegisterOGRPGeo();
  391. void CPL_DLL RegisterOGRDXF();
  392. void CPL_DLL RegisterOGRCAD();
  393. void CPL_DLL RegisterOGRDWG();
  394. void CPL_DLL RegisterOGRDGNV8();
  395. void CPL_DLL RegisterOGRSDE();
  396. void CPL_DLL RegisterOGRIDB();
  397. void CPL_DLL RegisterOGRGMT();
  398. void CPL_DLL RegisterOGRBNA();
  399. void CPL_DLL RegisterOGRGPX();
  400. void CPL_DLL RegisterOGRGeoconcept();
  401. void CPL_DLL RegisterOGRIngres();
  402. void CPL_DLL RegisterOGRXPlane();
  403. void CPL_DLL RegisterOGRNAS();
  404. void CPL_DLL RegisterOGRGeoRSS();
  405. void CPL_DLL RegisterOGRGTM();
  406. void CPL_DLL RegisterOGRVFK();
  407. void CPL_DLL RegisterOGRPGDump();
  408. void CPL_DLL RegisterOGROSM();
  409. void CPL_DLL RegisterOGRGPSBabel();
  410. void CPL_DLL RegisterOGRSUA();
  411. void CPL_DLL RegisterOGROpenAir();
  412. void CPL_DLL RegisterOGRPDS();
  413. void CPL_DLL RegisterOGRWFS();
  414. void CPL_DLL RegisterOGRWFS3();
  415. void CPL_DLL RegisterOGRSOSI();
  416. void CPL_DLL RegisterOGRHTF();
  417. void CPL_DLL RegisterOGRAeronavFAA();
  418. void CPL_DLL RegisterOGRGeomedia();
  419. void CPL_DLL RegisterOGRMDB();
  420. void CPL_DLL RegisterOGREDIGEO();
  421. void CPL_DLL RegisterOGRGFT();
  422. void CPL_DLL RegisterOGRSVG();
  423. void CPL_DLL RegisterOGRCouchDB();
  424. void CPL_DLL RegisterOGRCloudant();
  425. void CPL_DLL RegisterOGRIdrisi();
  426. void CPL_DLL RegisterOGRARCGEN();
  427. void CPL_DLL RegisterOGRSEGUKOOA();
  428. void CPL_DLL RegisterOGRSEGY();
  429. void CPL_DLL RegisterOGRXLS();
  430. void CPL_DLL RegisterOGRODS();
  431. void CPL_DLL RegisterOGRXLSX();
  432. void CPL_DLL RegisterOGRElastic();
  433. void CPL_DLL RegisterOGRGeoPackage();
  434. void CPL_DLL RegisterOGRWalk();
  435. void CPL_DLL RegisterOGRCarto();
  436. void CPL_DLL RegisterOGRAmigoCloud();
  437. void CPL_DLL RegisterOGRSXF();
  438. void CPL_DLL RegisterOGROpenFileGDB();
  439. void CPL_DLL RegisterOGRSelafin();
  440. void CPL_DLL RegisterOGRJML();
  441. void CPL_DLL RegisterOGRPLSCENES();
  442. void CPL_DLL RegisterOGRCSW();
  443. void CPL_DLL RegisterOGRMongoDBv3();
  444. void CPL_DLL RegisterOGRMongoDB();
  445. void CPL_DLL RegisterOGRVDV();
  446. void CPL_DLL RegisterOGRGMLAS();
  447. void CPL_DLL RegisterOGRMVT();
  448. void CPL_DLL RegisterOGRNGW();
  449. // @endcond
  450. CPL_C_END
  451. #endif /* ndef OGRSF_FRMTS_H_INCLUDED */
上海开阖软件有限公司 沪ICP备12045867号-1