gooderp18绿色标准版
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

768 lines
38KB

  1. /******************************************************************************
  2. * $Id: ogr_api.h 29693f999fa9435ffcf1c4bdc2ffa2eeb3011b9c 2018-03-28 16:51:44 +0200 Even Rouault $
  3. *
  4. * Project: OpenGIS Simple Features Reference Implementation
  5. * Purpose: C API for OGR Geometry, Feature, Layers, DataSource and drivers.
  6. * Author: Frank Warmerdam, warmerdam@pobox.com
  7. *
  8. ******************************************************************************
  9. * Copyright (c) 2002, Frank Warmerdam
  10. * Copyright (c) 2008-2013, 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 OGR_API_H_INCLUDED
  31. #define OGR_API_H_INCLUDED
  32. /**
  33. * \file ogr_api.h
  34. *
  35. * C API and defines for OGRFeature, OGRGeometry, and OGRDataSource
  36. * related classes.
  37. *
  38. * See also: ogr_geometry.h, ogr_feature.h, ogrsf_frmts.h, ogr_featurestyle.h
  39. */
  40. #include "cpl_progress.h"
  41. #include "cpl_minixml.h"
  42. #include "ogr_core.h"
  43. CPL_C_START
  44. /* -------------------------------------------------------------------- */
  45. /* Geometry related functions (ogr_geometry.h) */
  46. /* -------------------------------------------------------------------- */
  47. #ifndef DEFINEH_OGRGeometryH
  48. /*! @cond Doxygen_Suppress */
  49. #define DEFINEH_OGRGeometryH
  50. /*! @endcond */
  51. #ifdef DEBUG
  52. typedef struct OGRGeometryHS *OGRGeometryH;
  53. #else
  54. /** Opaque type for a geometry */
  55. typedef void *OGRGeometryH;
  56. #endif
  57. #endif /* DEFINEH_OGRGeometryH */
  58. #ifndef DEFINED_OGRSpatialReferenceH
  59. /*! @cond Doxygen_Suppress */
  60. #define DEFINED_OGRSpatialReferenceH
  61. /*! @endcond */
  62. #ifdef DEBUG
  63. typedef struct OGRSpatialReferenceHS *OGRSpatialReferenceH;
  64. typedef struct OGRCoordinateTransformationHS *OGRCoordinateTransformationH;
  65. #else
  66. /** Opaque type for a spatial reference system */
  67. typedef void *OGRSpatialReferenceH;
  68. /** Opaque type for a coordinate transformation object */
  69. typedef void *OGRCoordinateTransformationH;
  70. #endif
  71. #endif /* DEFINED_OGRSpatialReferenceH */
  72. struct _CPLXMLNode;
  73. /* From base OGRGeometry class */
  74. OGRErr CPL_DLL OGR_G_CreateFromWkb( const void*, OGRSpatialReferenceH,
  75. OGRGeometryH *, int );
  76. OGRErr CPL_DLL OGR_G_CreateFromWkt( char **, OGRSpatialReferenceH,
  77. OGRGeometryH * );
  78. OGRErr CPL_DLL OGR_G_CreateFromFgf( const void*, OGRSpatialReferenceH,
  79. OGRGeometryH *, int, int * );
  80. void CPL_DLL OGR_G_DestroyGeometry( OGRGeometryH );
  81. OGRGeometryH CPL_DLL OGR_G_CreateGeometry( OGRwkbGeometryType ) CPL_WARN_UNUSED_RESULT;
  82. OGRGeometryH CPL_DLL
  83. OGR_G_ApproximateArcAngles(
  84. double dfCenterX, double dfCenterY, double dfZ,
  85. double dfPrimaryRadius, double dfSecondaryAxis, double dfRotation,
  86. double dfStartAngle, double dfEndAngle,
  87. double dfMaxAngleStepSizeDegrees ) CPL_WARN_UNUSED_RESULT;
  88. OGRGeometryH CPL_DLL OGR_G_ForceToPolygon( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  89. OGRGeometryH CPL_DLL OGR_G_ForceToLineString( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  90. OGRGeometryH CPL_DLL OGR_G_ForceToMultiPolygon( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  91. OGRGeometryH CPL_DLL OGR_G_ForceToMultiPoint( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  92. OGRGeometryH CPL_DLL OGR_G_ForceToMultiLineString( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  93. OGRGeometryH CPL_DLL OGR_G_ForceTo( OGRGeometryH hGeom,
  94. OGRwkbGeometryType eTargetType,
  95. char** papszOptions ) CPL_WARN_UNUSED_RESULT;
  96. int CPL_DLL OGR_G_GetDimension( OGRGeometryH );
  97. int CPL_DLL OGR_G_GetCoordinateDimension( OGRGeometryH );
  98. int CPL_DLL OGR_G_CoordinateDimension( OGRGeometryH );
  99. void CPL_DLL OGR_G_SetCoordinateDimension( OGRGeometryH, int );
  100. int CPL_DLL OGR_G_Is3D( OGRGeometryH );
  101. int CPL_DLL OGR_G_IsMeasured( OGRGeometryH );
  102. void CPL_DLL OGR_G_Set3D( OGRGeometryH, int );
  103. void CPL_DLL OGR_G_SetMeasured( OGRGeometryH, int );
  104. OGRGeometryH CPL_DLL OGR_G_Clone( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  105. void CPL_DLL OGR_G_GetEnvelope( OGRGeometryH, OGREnvelope * );
  106. void CPL_DLL OGR_G_GetEnvelope3D( OGRGeometryH, OGREnvelope3D * );
  107. OGRErr CPL_DLL OGR_G_ImportFromWkb( OGRGeometryH, const void*, int );
  108. OGRErr CPL_DLL OGR_G_ExportToWkb( OGRGeometryH, OGRwkbByteOrder, unsigned char*);
  109. OGRErr CPL_DLL OGR_G_ExportToIsoWkb( OGRGeometryH, OGRwkbByteOrder, unsigned char*);
  110. int CPL_DLL OGR_G_WkbSize( OGRGeometryH hGeom );
  111. OGRErr CPL_DLL OGR_G_ImportFromWkt( OGRGeometryH, char ** );
  112. OGRErr CPL_DLL OGR_G_ExportToWkt( OGRGeometryH, char ** );
  113. OGRErr CPL_DLL OGR_G_ExportToIsoWkt( OGRGeometryH, char ** );
  114. OGRwkbGeometryType CPL_DLL OGR_G_GetGeometryType( OGRGeometryH );
  115. const char CPL_DLL *OGR_G_GetGeometryName( OGRGeometryH );
  116. void CPL_DLL OGR_G_DumpReadable( OGRGeometryH, FILE *, const char * );
  117. void CPL_DLL OGR_G_FlattenTo2D( OGRGeometryH );
  118. void CPL_DLL OGR_G_CloseRings( OGRGeometryH );
  119. OGRGeometryH CPL_DLL OGR_G_CreateFromGML( const char * ) CPL_WARN_UNUSED_RESULT;
  120. char CPL_DLL *OGR_G_ExportToGML( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  121. char CPL_DLL *OGR_G_ExportToGMLEx( OGRGeometryH, char** papszOptions ) CPL_WARN_UNUSED_RESULT;
  122. OGRGeometryH CPL_DLL OGR_G_CreateFromGMLTree( const CPLXMLNode * ) CPL_WARN_UNUSED_RESULT;
  123. CPLXMLNode CPL_DLL *OGR_G_ExportToGMLTree( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  124. CPLXMLNode CPL_DLL *OGR_G_ExportEnvelopeToGMLTree( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  125. char CPL_DLL *OGR_G_ExportToKML( OGRGeometryH, const char* pszAltitudeMode ) CPL_WARN_UNUSED_RESULT;
  126. char CPL_DLL *OGR_G_ExportToJson( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  127. char CPL_DLL *OGR_G_ExportToJsonEx( OGRGeometryH, char** papszOptions ) CPL_WARN_UNUSED_RESULT;
  128. /** Create a OGR geometry from a GeoJSON geometry object */
  129. OGRGeometryH CPL_DLL OGR_G_CreateGeometryFromJson( const char* ) CPL_WARN_UNUSED_RESULT;
  130. void CPL_DLL OGR_G_AssignSpatialReference( OGRGeometryH,
  131. OGRSpatialReferenceH );
  132. OGRSpatialReferenceH CPL_DLL OGR_G_GetSpatialReference( OGRGeometryH );
  133. OGRErr CPL_DLL OGR_G_Transform( OGRGeometryH, OGRCoordinateTransformationH );
  134. OGRErr CPL_DLL OGR_G_TransformTo( OGRGeometryH, OGRSpatialReferenceH );
  135. OGRGeometryH CPL_DLL OGR_G_Simplify( OGRGeometryH hThis, double tolerance ) CPL_WARN_UNUSED_RESULT;
  136. OGRGeometryH CPL_DLL OGR_G_SimplifyPreserveTopology( OGRGeometryH hThis, double tolerance ) CPL_WARN_UNUSED_RESULT;
  137. OGRGeometryH CPL_DLL OGR_G_DelaunayTriangulation( OGRGeometryH hThis, double dfTolerance, int bOnlyEdges ) CPL_WARN_UNUSED_RESULT;
  138. void CPL_DLL OGR_G_Segmentize(OGRGeometryH hGeom, double dfMaxLength );
  139. int CPL_DLL OGR_G_Intersects( OGRGeometryH, OGRGeometryH );
  140. int CPL_DLL OGR_G_Equals( OGRGeometryH, OGRGeometryH );
  141. /*int CPL_DLL OGR_G_EqualsExact( OGRGeometryH, OGRGeometryH, double );*/
  142. int CPL_DLL OGR_G_Disjoint( OGRGeometryH, OGRGeometryH );
  143. int CPL_DLL OGR_G_Touches( OGRGeometryH, OGRGeometryH );
  144. int CPL_DLL OGR_G_Crosses( OGRGeometryH, OGRGeometryH );
  145. int CPL_DLL OGR_G_Within( OGRGeometryH, OGRGeometryH );
  146. int CPL_DLL OGR_G_Contains( OGRGeometryH, OGRGeometryH );
  147. int CPL_DLL OGR_G_Overlaps( OGRGeometryH, OGRGeometryH );
  148. OGRGeometryH CPL_DLL OGR_G_Boundary( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  149. OGRGeometryH CPL_DLL OGR_G_ConvexHull( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  150. OGRGeometryH CPL_DLL OGR_G_Buffer( OGRGeometryH, double, int ) CPL_WARN_UNUSED_RESULT;
  151. OGRGeometryH CPL_DLL OGR_G_Intersection( OGRGeometryH, OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  152. OGRGeometryH CPL_DLL OGR_G_Union( OGRGeometryH, OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  153. OGRGeometryH CPL_DLL OGR_G_UnionCascaded( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  154. OGRGeometryH CPL_DLL OGR_G_PointOnSurface( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  155. /*OGRGeometryH CPL_DLL OGR_G_Polygonize( OGRGeometryH *, int);*/
  156. /*OGRGeometryH CPL_DLL OGR_G_Polygonizer_getCutEdges( OGRGeometryH *, int);*/
  157. /*OGRGeometryH CPL_DLL OGR_G_LineMerge( OGRGeometryH );*/
  158. OGRGeometryH CPL_DLL OGR_G_Difference( OGRGeometryH, OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  159. OGRGeometryH CPL_DLL OGR_G_SymDifference( OGRGeometryH, OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  160. double CPL_DLL OGR_G_Distance( OGRGeometryH, OGRGeometryH );
  161. double CPL_DLL OGR_G_Distance3D( OGRGeometryH, OGRGeometryH );
  162. double CPL_DLL OGR_G_Length( OGRGeometryH );
  163. double CPL_DLL OGR_G_Area( OGRGeometryH );
  164. int CPL_DLL OGR_G_Centroid( OGRGeometryH, OGRGeometryH );
  165. OGRGeometryH CPL_DLL OGR_G_Value( OGRGeometryH, double dfDistance ) CPL_WARN_UNUSED_RESULT;
  166. void CPL_DLL OGR_G_Empty( OGRGeometryH );
  167. int CPL_DLL OGR_G_IsEmpty( OGRGeometryH );
  168. int CPL_DLL OGR_G_IsValid( OGRGeometryH );
  169. /*char CPL_DLL *OGR_G_IsValidReason( OGRGeometryH );*/
  170. OGRGeometryH CPL_DLL OGR_G_MakeValid( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  171. int CPL_DLL OGR_G_IsSimple( OGRGeometryH );
  172. int CPL_DLL OGR_G_IsRing( OGRGeometryH );
  173. OGRGeometryH CPL_DLL OGR_G_Polygonize( OGRGeometryH ) CPL_WARN_UNUSED_RESULT;
  174. /*! @cond Doxygen_Suppress */
  175. /* backward compatibility (non-standard methods) */
  176. int CPL_DLL OGR_G_Intersect( OGRGeometryH, OGRGeometryH ) CPL_WARN_DEPRECATED("Non standard method. Use OGR_G_Intersects() instead");
  177. int CPL_DLL OGR_G_Equal( OGRGeometryH, OGRGeometryH ) CPL_WARN_DEPRECATED("Non standard method. Use OGR_G_Equals() instead");
  178. OGRGeometryH CPL_DLL OGR_G_SymmetricDifference( OGRGeometryH, OGRGeometryH ) CPL_WARN_DEPRECATED("Non standard method. Use OGR_G_SymDifference() instead");
  179. double CPL_DLL OGR_G_GetArea( OGRGeometryH ) CPL_WARN_DEPRECATED("Non standard method. Use OGR_G_Area() instead");
  180. OGRGeometryH CPL_DLL OGR_G_GetBoundary( OGRGeometryH ) CPL_WARN_DEPRECATED("Non standard method. Use OGR_G_Boundary() instead");
  181. /*! @endcond */
  182. /* Methods for getting/setting vertices in points, line strings and rings */
  183. int CPL_DLL OGR_G_GetPointCount( OGRGeometryH );
  184. int CPL_DLL OGR_G_GetPoints( OGRGeometryH hGeom,
  185. void* pabyX, int nXStride,
  186. void* pabyY, int nYStride,
  187. void* pabyZ, int nZStride);
  188. int CPL_DLL OGR_G_GetPointsZM( OGRGeometryH hGeom,
  189. void* pabyX, int nXStride,
  190. void* pabyY, int nYStride,
  191. void* pabyZ, int nZStride,
  192. void* pabyM, int nMStride);
  193. double CPL_DLL OGR_G_GetX( OGRGeometryH, int );
  194. double CPL_DLL OGR_G_GetY( OGRGeometryH, int );
  195. double CPL_DLL OGR_G_GetZ( OGRGeometryH, int );
  196. double CPL_DLL OGR_G_GetM( OGRGeometryH, int );
  197. void CPL_DLL OGR_G_GetPoint( OGRGeometryH, int iPoint,
  198. double *, double *, double * );
  199. void CPL_DLL OGR_G_GetPointZM( OGRGeometryH, int iPoint,
  200. double *, double *, double *, double * );
  201. void CPL_DLL OGR_G_SetPointCount( OGRGeometryH hGeom, int nNewPointCount );
  202. void CPL_DLL OGR_G_SetPoint( OGRGeometryH, int iPoint,
  203. double, double, double );
  204. void CPL_DLL OGR_G_SetPoint_2D( OGRGeometryH, int iPoint,
  205. double, double );
  206. void CPL_DLL OGR_G_SetPointM( OGRGeometryH, int iPoint,
  207. double, double, double );
  208. void CPL_DLL OGR_G_SetPointZM( OGRGeometryH, int iPoint,
  209. double, double, double, double );
  210. void CPL_DLL OGR_G_AddPoint( OGRGeometryH, double, double, double );
  211. void CPL_DLL OGR_G_AddPoint_2D( OGRGeometryH, double, double );
  212. void CPL_DLL OGR_G_AddPointM( OGRGeometryH, double, double, double );
  213. void CPL_DLL OGR_G_AddPointZM( OGRGeometryH, double, double, double, double );
  214. void CPL_DLL OGR_G_SetPoints( OGRGeometryH hGeom, int nPointsIn,
  215. const void* pabyX, int nXStride,
  216. const void* pabyY, int nYStride,
  217. const void* pabyZ, int nZStride );
  218. void CPL_DLL OGR_G_SetPointsZM( OGRGeometryH hGeom, int nPointsIn,
  219. const void* pabyX, int nXStride,
  220. const void* pabyY, int nYStride,
  221. const void* pabyZ, int nZStride,
  222. const void* pabyM, int nMStride );
  223. void CPL_DLL OGR_G_SwapXY( OGRGeometryH hGeom );
  224. /* Methods for getting/setting rings and members collections */
  225. int CPL_DLL OGR_G_GetGeometryCount( OGRGeometryH );
  226. OGRGeometryH CPL_DLL OGR_G_GetGeometryRef( OGRGeometryH, int );
  227. OGRErr CPL_DLL OGR_G_AddGeometry( OGRGeometryH, OGRGeometryH );
  228. OGRErr CPL_DLL OGR_G_AddGeometryDirectly( OGRGeometryH, OGRGeometryH );
  229. OGRErr CPL_DLL OGR_G_RemoveGeometry( OGRGeometryH, int, int );
  230. int CPL_DLL OGR_G_HasCurveGeometry( OGRGeometryH, int bLookForNonLinear );
  231. OGRGeometryH CPL_DLL OGR_G_GetLinearGeometry( OGRGeometryH hGeom,
  232. double dfMaxAngleStepSizeDegrees,
  233. char** papszOptions) CPL_WARN_UNUSED_RESULT;
  234. OGRGeometryH CPL_DLL OGR_G_GetCurveGeometry( OGRGeometryH hGeom,
  235. char** papszOptions ) CPL_WARN_UNUSED_RESULT;
  236. OGRGeometryH CPL_DLL
  237. OGRBuildPolygonFromEdges( OGRGeometryH hLinesAsCollection,
  238. int bBestEffort,
  239. int bAutoClose,
  240. double dfTolerance,
  241. OGRErr * peErr ) CPL_WARN_UNUSED_RESULT;
  242. /*! @cond Doxygen_Suppress */
  243. OGRErr CPL_DLL OGRSetGenerate_DB2_V72_BYTE_ORDER(
  244. int bGenerate_DB2_V72_BYTE_ORDER );
  245. int CPL_DLL OGRGetGenerate_DB2_V72_BYTE_ORDER(void);
  246. /*! @endcond */
  247. void CPL_DLL OGRSetNonLinearGeometriesEnabledFlag(int bFlag);
  248. int CPL_DLL OGRGetNonLinearGeometriesEnabledFlag(void);
  249. /* -------------------------------------------------------------------- */
  250. /* Feature related (ogr_feature.h) */
  251. /* -------------------------------------------------------------------- */
  252. #ifndef DEFINE_OGRFeatureH
  253. /*! @cond Doxygen_Suppress */
  254. #define DEFINE_OGRFeatureH
  255. /*! @endcond */
  256. #ifdef DEBUG
  257. typedef struct OGRFieldDefnHS *OGRFieldDefnH;
  258. typedef struct OGRFeatureDefnHS *OGRFeatureDefnH;
  259. typedef struct OGRFeatureHS *OGRFeatureH;
  260. typedef struct OGRStyleTableHS *OGRStyleTableH;
  261. #else
  262. /** Opaque type for a field definition (OGRFieldDefn) */
  263. typedef void *OGRFieldDefnH;
  264. /** Opaque type for a feature definition (OGRFeatureDefn) */
  265. typedef void *OGRFeatureDefnH;
  266. /** Opaque type for a feature (OGRFeature) */
  267. typedef void *OGRFeatureH;
  268. /** Opaque type for a style table (OGRStyleTable) */
  269. typedef void *OGRStyleTableH;
  270. #endif
  271. /** Opaque type for a geometry field definition (OGRGeomFieldDefn) */
  272. typedef struct OGRGeomFieldDefnHS *OGRGeomFieldDefnH;
  273. #endif /* DEFINE_OGRFeatureH */
  274. /* OGRFieldDefn */
  275. OGRFieldDefnH CPL_DLL OGR_Fld_Create( const char *, OGRFieldType ) CPL_WARN_UNUSED_RESULT;
  276. void CPL_DLL OGR_Fld_Destroy( OGRFieldDefnH );
  277. void CPL_DLL OGR_Fld_SetName( OGRFieldDefnH, const char * );
  278. const char CPL_DLL *OGR_Fld_GetNameRef( OGRFieldDefnH );
  279. OGRFieldType CPL_DLL OGR_Fld_GetType( OGRFieldDefnH );
  280. void CPL_DLL OGR_Fld_SetType( OGRFieldDefnH, OGRFieldType );
  281. OGRFieldSubType CPL_DLL OGR_Fld_GetSubType( OGRFieldDefnH );
  282. void CPL_DLL OGR_Fld_SetSubType( OGRFieldDefnH, OGRFieldSubType );
  283. OGRJustification CPL_DLL OGR_Fld_GetJustify( OGRFieldDefnH );
  284. void CPL_DLL OGR_Fld_SetJustify( OGRFieldDefnH, OGRJustification );
  285. int CPL_DLL OGR_Fld_GetWidth( OGRFieldDefnH );
  286. void CPL_DLL OGR_Fld_SetWidth( OGRFieldDefnH, int );
  287. int CPL_DLL OGR_Fld_GetPrecision( OGRFieldDefnH );
  288. void CPL_DLL OGR_Fld_SetPrecision( OGRFieldDefnH, int );
  289. void CPL_DLL OGR_Fld_Set( OGRFieldDefnH, const char *, OGRFieldType,
  290. int, int, OGRJustification );
  291. int CPL_DLL OGR_Fld_IsIgnored( OGRFieldDefnH hDefn );
  292. void CPL_DLL OGR_Fld_SetIgnored( OGRFieldDefnH hDefn, int );
  293. int CPL_DLL OGR_Fld_IsNullable( OGRFieldDefnH hDefn );
  294. void CPL_DLL OGR_Fld_SetNullable( OGRFieldDefnH hDefn, int );
  295. const char CPL_DLL *OGR_Fld_GetDefault( OGRFieldDefnH hDefn );
  296. void CPL_DLL OGR_Fld_SetDefault( OGRFieldDefnH hDefn, const char* );
  297. int CPL_DLL OGR_Fld_IsDefaultDriverSpecific( OGRFieldDefnH hDefn );
  298. const char CPL_DLL *OGR_GetFieldTypeName( OGRFieldType );
  299. const char CPL_DLL *OGR_GetFieldSubTypeName( OGRFieldSubType );
  300. int CPL_DLL OGR_AreTypeSubTypeCompatible( OGRFieldType eType,
  301. OGRFieldSubType eSubType );
  302. /* OGRGeomFieldDefnH */
  303. OGRGeomFieldDefnH CPL_DLL OGR_GFld_Create( const char *, OGRwkbGeometryType ) CPL_WARN_UNUSED_RESULT;
  304. void CPL_DLL OGR_GFld_Destroy( OGRGeomFieldDefnH );
  305. void CPL_DLL OGR_GFld_SetName( OGRGeomFieldDefnH, const char * );
  306. const char CPL_DLL *OGR_GFld_GetNameRef( OGRGeomFieldDefnH );
  307. OGRwkbGeometryType CPL_DLL OGR_GFld_GetType( OGRGeomFieldDefnH );
  308. void CPL_DLL OGR_GFld_SetType( OGRGeomFieldDefnH, OGRwkbGeometryType );
  309. OGRSpatialReferenceH CPL_DLL OGR_GFld_GetSpatialRef( OGRGeomFieldDefnH );
  310. void CPL_DLL OGR_GFld_SetSpatialRef( OGRGeomFieldDefnH,
  311. OGRSpatialReferenceH hSRS );
  312. int CPL_DLL OGR_GFld_IsNullable( OGRGeomFieldDefnH hDefn );
  313. void CPL_DLL OGR_GFld_SetNullable( OGRGeomFieldDefnH hDefn, int );
  314. int CPL_DLL OGR_GFld_IsIgnored( OGRGeomFieldDefnH hDefn );
  315. void CPL_DLL OGR_GFld_SetIgnored( OGRGeomFieldDefnH hDefn, int );
  316. /* OGRFeatureDefn */
  317. OGRFeatureDefnH CPL_DLL OGR_FD_Create( const char * ) CPL_WARN_UNUSED_RESULT;
  318. void CPL_DLL OGR_FD_Destroy( OGRFeatureDefnH );
  319. void CPL_DLL OGR_FD_Release( OGRFeatureDefnH );
  320. const char CPL_DLL *OGR_FD_GetName( OGRFeatureDefnH );
  321. int CPL_DLL OGR_FD_GetFieldCount( OGRFeatureDefnH );
  322. OGRFieldDefnH CPL_DLL OGR_FD_GetFieldDefn( OGRFeatureDefnH, int );
  323. int CPL_DLL OGR_FD_GetFieldIndex( OGRFeatureDefnH, const char * );
  324. void CPL_DLL OGR_FD_AddFieldDefn( OGRFeatureDefnH, OGRFieldDefnH );
  325. OGRErr CPL_DLL OGR_FD_DeleteFieldDefn( OGRFeatureDefnH hDefn, int iField );
  326. OGRErr CPL_DLL OGR_FD_ReorderFieldDefns( OGRFeatureDefnH hDefn, int* panMap );
  327. OGRwkbGeometryType CPL_DLL OGR_FD_GetGeomType( OGRFeatureDefnH );
  328. void CPL_DLL OGR_FD_SetGeomType( OGRFeatureDefnH, OGRwkbGeometryType );
  329. int CPL_DLL OGR_FD_IsGeometryIgnored( OGRFeatureDefnH );
  330. void CPL_DLL OGR_FD_SetGeometryIgnored( OGRFeatureDefnH, int );
  331. int CPL_DLL OGR_FD_IsStyleIgnored( OGRFeatureDefnH );
  332. void CPL_DLL OGR_FD_SetStyleIgnored( OGRFeatureDefnH, int );
  333. int CPL_DLL OGR_FD_Reference( OGRFeatureDefnH );
  334. int CPL_DLL OGR_FD_Dereference( OGRFeatureDefnH );
  335. int CPL_DLL OGR_FD_GetReferenceCount( OGRFeatureDefnH );
  336. int CPL_DLL OGR_FD_GetGeomFieldCount( OGRFeatureDefnH hFDefn );
  337. OGRGeomFieldDefnH CPL_DLL OGR_FD_GetGeomFieldDefn( OGRFeatureDefnH hFDefn,
  338. int i );
  339. int CPL_DLL OGR_FD_GetGeomFieldIndex( OGRFeatureDefnH hFDefn,
  340. const char *pszName);
  341. void CPL_DLL OGR_FD_AddGeomFieldDefn( OGRFeatureDefnH hFDefn,
  342. OGRGeomFieldDefnH hGFldDefn);
  343. OGRErr CPL_DLL OGR_FD_DeleteGeomFieldDefn( OGRFeatureDefnH hFDefn,
  344. int iGeomField );
  345. int CPL_DLL OGR_FD_IsSame( OGRFeatureDefnH hFDefn,
  346. OGRFeatureDefnH hOtherFDefn );
  347. /* OGRFeature */
  348. OGRFeatureH CPL_DLL OGR_F_Create( OGRFeatureDefnH ) CPL_WARN_UNUSED_RESULT;
  349. void CPL_DLL OGR_F_Destroy( OGRFeatureH );
  350. OGRFeatureDefnH CPL_DLL OGR_F_GetDefnRef( OGRFeatureH );
  351. OGRErr CPL_DLL OGR_F_SetGeometryDirectly( OGRFeatureH, OGRGeometryH );
  352. OGRErr CPL_DLL OGR_F_SetGeometry( OGRFeatureH, OGRGeometryH );
  353. OGRGeometryH CPL_DLL OGR_F_GetGeometryRef( OGRFeatureH );
  354. OGRGeometryH CPL_DLL OGR_F_StealGeometry( OGRFeatureH ) CPL_WARN_UNUSED_RESULT;
  355. OGRFeatureH CPL_DLL OGR_F_Clone( OGRFeatureH ) CPL_WARN_UNUSED_RESULT;
  356. int CPL_DLL OGR_F_Equal( OGRFeatureH, OGRFeatureH );
  357. int CPL_DLL OGR_F_GetFieldCount( OGRFeatureH );
  358. OGRFieldDefnH CPL_DLL OGR_F_GetFieldDefnRef( OGRFeatureH, int );
  359. int CPL_DLL OGR_F_GetFieldIndex( OGRFeatureH, const char * );
  360. int CPL_DLL OGR_F_IsFieldSet( OGRFeatureH, int );
  361. void CPL_DLL OGR_F_UnsetField( OGRFeatureH, int );
  362. int CPL_DLL OGR_F_IsFieldNull( OGRFeatureH, int );
  363. int CPL_DLL OGR_F_IsFieldSetAndNotNull( OGRFeatureH, int );
  364. void CPL_DLL OGR_F_SetFieldNull( OGRFeatureH, int );
  365. OGRField CPL_DLL *OGR_F_GetRawFieldRef( OGRFeatureH, int );
  366. int CPL_DLL OGR_RawField_IsUnset( const OGRField* );
  367. int CPL_DLL OGR_RawField_IsNull( const OGRField* );
  368. void CPL_DLL OGR_RawField_SetUnset( OGRField* );
  369. void CPL_DLL OGR_RawField_SetNull( OGRField* );
  370. int CPL_DLL OGR_F_GetFieldAsInteger( OGRFeatureH, int );
  371. GIntBig CPL_DLL OGR_F_GetFieldAsInteger64( OGRFeatureH, int );
  372. double CPL_DLL OGR_F_GetFieldAsDouble( OGRFeatureH, int );
  373. const char CPL_DLL *OGR_F_GetFieldAsString( OGRFeatureH, int );
  374. const int CPL_DLL *OGR_F_GetFieldAsIntegerList( OGRFeatureH, int, int * );
  375. const GIntBig CPL_DLL *OGR_F_GetFieldAsInteger64List( OGRFeatureH, int, int * );
  376. const double CPL_DLL *OGR_F_GetFieldAsDoubleList( OGRFeatureH, int, int * );
  377. char CPL_DLL **OGR_F_GetFieldAsStringList( OGRFeatureH, int );
  378. GByte CPL_DLL *OGR_F_GetFieldAsBinary( OGRFeatureH, int, int * );
  379. int CPL_DLL OGR_F_GetFieldAsDateTime( OGRFeatureH, int, int *, int *, int *,
  380. int *, int *, int *, int * );
  381. int CPL_DLL OGR_F_GetFieldAsDateTimeEx( OGRFeatureH hFeat, int iField,
  382. int *pnYear, int *pnMonth, int *pnDay,
  383. int *pnHour, int *pnMinute, float *pfSecond,
  384. int *pnTZFlag );
  385. void CPL_DLL OGR_F_SetFieldInteger( OGRFeatureH, int, int );
  386. void CPL_DLL OGR_F_SetFieldInteger64( OGRFeatureH, int, GIntBig );
  387. void CPL_DLL OGR_F_SetFieldDouble( OGRFeatureH, int, double );
  388. void CPL_DLL OGR_F_SetFieldString( OGRFeatureH, int, const char * );
  389. void CPL_DLL OGR_F_SetFieldIntegerList( OGRFeatureH, int, int, const int * );
  390. void CPL_DLL OGR_F_SetFieldInteger64List( OGRFeatureH, int, int, const GIntBig * );
  391. void CPL_DLL OGR_F_SetFieldDoubleList( OGRFeatureH, int, int, const double * );
  392. void CPL_DLL OGR_F_SetFieldStringList( OGRFeatureH, int, CSLConstList );
  393. void CPL_DLL OGR_F_SetFieldRaw( OGRFeatureH, int, OGRField * );
  394. void CPL_DLL OGR_F_SetFieldBinary( OGRFeatureH, int, int, const void * );
  395. void CPL_DLL OGR_F_SetFieldDateTime( OGRFeatureH, int,
  396. int, int, int, int, int, int, int );
  397. void CPL_DLL OGR_F_SetFieldDateTimeEx( OGRFeatureH, int,
  398. int, int, int, int, int, float, int );
  399. int CPL_DLL OGR_F_GetGeomFieldCount( OGRFeatureH hFeat );
  400. OGRGeomFieldDefnH CPL_DLL OGR_F_GetGeomFieldDefnRef( OGRFeatureH hFeat,
  401. int iField );
  402. int CPL_DLL OGR_F_GetGeomFieldIndex( OGRFeatureH hFeat,
  403. const char *pszName);
  404. OGRGeometryH CPL_DLL OGR_F_GetGeomFieldRef( OGRFeatureH hFeat,
  405. int iField );
  406. OGRErr CPL_DLL OGR_F_SetGeomFieldDirectly( OGRFeatureH hFeat,
  407. int iField,
  408. OGRGeometryH hGeom );
  409. OGRErr CPL_DLL OGR_F_SetGeomField( OGRFeatureH hFeat,
  410. int iField, OGRGeometryH hGeom );
  411. GIntBig CPL_DLL OGR_F_GetFID( OGRFeatureH );
  412. OGRErr CPL_DLL OGR_F_SetFID( OGRFeatureH, GIntBig );
  413. void CPL_DLL OGR_F_DumpReadable( OGRFeatureH, FILE * );
  414. OGRErr CPL_DLL OGR_F_SetFrom( OGRFeatureH, OGRFeatureH, int );
  415. OGRErr CPL_DLL OGR_F_SetFromWithMap( OGRFeatureH, OGRFeatureH, int , const int * );
  416. const char CPL_DLL *OGR_F_GetStyleString( OGRFeatureH );
  417. void CPL_DLL OGR_F_SetStyleString( OGRFeatureH, const char * );
  418. void CPL_DLL OGR_F_SetStyleStringDirectly( OGRFeatureH, char * );
  419. /** Return style table */
  420. OGRStyleTableH CPL_DLL OGR_F_GetStyleTable( OGRFeatureH );
  421. /** Set style table and take ownership */
  422. void CPL_DLL OGR_F_SetStyleTableDirectly( OGRFeatureH, OGRStyleTableH );
  423. /** Set style table */
  424. void CPL_DLL OGR_F_SetStyleTable( OGRFeatureH, OGRStyleTableH );
  425. const char CPL_DLL *OGR_F_GetNativeData( OGRFeatureH );
  426. void CPL_DLL OGR_F_SetNativeData( OGRFeatureH, const char* );
  427. const char CPL_DLL *OGR_F_GetNativeMediaType( OGRFeatureH );
  428. void CPL_DLL OGR_F_SetNativeMediaType( OGRFeatureH, const char* );
  429. void CPL_DLL OGR_F_FillUnsetWithDefault( OGRFeatureH hFeat,
  430. int bNotNullableOnly,
  431. char** papszOptions );
  432. int CPL_DLL OGR_F_Validate( OGRFeatureH, int nValidateFlags, int bEmitError );
  433. /* -------------------------------------------------------------------- */
  434. /* ogrsf_frmts.h */
  435. /* -------------------------------------------------------------------- */
  436. #ifdef DEBUG
  437. typedef struct OGRLayerHS *OGRLayerH;
  438. typedef struct OGRDataSourceHS *OGRDataSourceH;
  439. typedef struct OGRDriverHS *OGRSFDriverH;
  440. #else
  441. /** Opaque type for a layer (OGRLayer) */
  442. typedef void *OGRLayerH;
  443. /** Opaque type for a OGR datasource (OGRDataSource) */
  444. typedef void *OGRDataSourceH;
  445. /** Opaque type for a OGR driver (OGRSFDriver) */
  446. typedef void *OGRSFDriverH;
  447. #endif
  448. /* OGRLayer */
  449. const char CPL_DLL* OGR_L_GetName( OGRLayerH );
  450. OGRwkbGeometryType CPL_DLL OGR_L_GetGeomType( OGRLayerH );
  451. OGRGeometryH CPL_DLL OGR_L_GetSpatialFilter( OGRLayerH );
  452. void CPL_DLL OGR_L_SetSpatialFilter( OGRLayerH, OGRGeometryH );
  453. void CPL_DLL OGR_L_SetSpatialFilterRect( OGRLayerH,
  454. double, double, double, double );
  455. void CPL_DLL OGR_L_SetSpatialFilterEx( OGRLayerH, int iGeomField,
  456. OGRGeometryH hGeom );
  457. void CPL_DLL OGR_L_SetSpatialFilterRectEx( OGRLayerH, int iGeomField,
  458. double dfMinX, double dfMinY,
  459. double dfMaxX, double dfMaxY );
  460. OGRErr CPL_DLL OGR_L_SetAttributeFilter( OGRLayerH, const char * );
  461. void CPL_DLL OGR_L_ResetReading( OGRLayerH );
  462. OGRFeatureH CPL_DLL OGR_L_GetNextFeature( OGRLayerH ) CPL_WARN_UNUSED_RESULT;
  463. /*! @endcond */
  464. /** Conveniency macro to iterate over features of a layer.
  465. *
  466. * Typical usage is:
  467. * <pre>
  468. * OGR_FOR_EACH_FEATURE_BEGIN(hFeat, hLayer)
  469. * {
  470. * // Do something, including continue, break;
  471. * // Do not explicitly destroy the feature (unless you use return or goto
  472. * // outside of the loop, in which case use OGR_F_Destroy(hFeat))
  473. * }
  474. * OGR_FOR_EACH_FEATURE_END(hFeat)
  475. * </pre>
  476. *
  477. * In C++, you might want to use instead range-based loop:
  478. * <pre>
  479. * for( auto&& poFeature: poLayer )
  480. * {
  481. * }
  482. * </pre>
  483. *
  484. * @param hFeat variable name for OGRFeatureH. The variable will be declared
  485. * inside the macro body.
  486. * @param hLayer layer to iterate over.
  487. *
  488. * @since GDAL 2.3
  489. */
  490. #define OGR_FOR_EACH_FEATURE_BEGIN(hFeat, hLayer) \
  491. { \
  492. OGRFeatureH hFeat = CPL_NULLPTR; \
  493. OGR_L_ResetReading(hLayer); \
  494. while( true) \
  495. { \
  496. if( hFeat ) \
  497. OGR_F_Destroy(hFeat); \
  498. hFeat = OGR_L_GetNextFeature(hLayer); \
  499. if( !hFeat ) \
  500. break;
  501. /** End of iterator. */
  502. #define OGR_FOR_EACH_FEATURE_END(hFeat) \
  503. } \
  504. OGR_F_Destroy(hFeat); \
  505. }
  506. OGRErr CPL_DLL OGR_L_SetNextByIndex( OGRLayerH, GIntBig );
  507. OGRFeatureH CPL_DLL OGR_L_GetFeature( OGRLayerH, GIntBig ) CPL_WARN_UNUSED_RESULT;
  508. OGRErr CPL_DLL OGR_L_SetFeature( OGRLayerH, OGRFeatureH ) CPL_WARN_UNUSED_RESULT;
  509. OGRErr CPL_DLL OGR_L_CreateFeature( OGRLayerH, OGRFeatureH ) CPL_WARN_UNUSED_RESULT;
  510. OGRErr CPL_DLL OGR_L_DeleteFeature( OGRLayerH, GIntBig ) CPL_WARN_UNUSED_RESULT;
  511. OGRFeatureDefnH CPL_DLL OGR_L_GetLayerDefn( OGRLayerH );
  512. OGRSpatialReferenceH CPL_DLL OGR_L_GetSpatialRef( OGRLayerH );
  513. int CPL_DLL OGR_L_FindFieldIndex( OGRLayerH, const char *, int bExactMatch );
  514. GIntBig CPL_DLL OGR_L_GetFeatureCount( OGRLayerH, int );
  515. OGRErr CPL_DLL OGR_L_GetExtent( OGRLayerH, OGREnvelope *, int );
  516. OGRErr CPL_DLL OGR_L_GetExtentEx( OGRLayerH, int iGeomField,
  517. OGREnvelope *psExtent, int bForce );
  518. int CPL_DLL OGR_L_TestCapability( OGRLayerH, const char * );
  519. OGRErr CPL_DLL OGR_L_CreateField( OGRLayerH, OGRFieldDefnH, int );
  520. OGRErr CPL_DLL OGR_L_CreateGeomField( OGRLayerH hLayer,
  521. OGRGeomFieldDefnH hFieldDefn, int bForce );
  522. OGRErr CPL_DLL OGR_L_DeleteField( OGRLayerH, int iField );
  523. OGRErr CPL_DLL OGR_L_ReorderFields( OGRLayerH, int* panMap );
  524. OGRErr CPL_DLL OGR_L_ReorderField( OGRLayerH, int iOldFieldPos, int iNewFieldPos );
  525. OGRErr CPL_DLL OGR_L_AlterFieldDefn( OGRLayerH, int iField, OGRFieldDefnH hNewFieldDefn, int nFlags );
  526. OGRErr CPL_DLL OGR_L_StartTransaction( OGRLayerH ) CPL_WARN_UNUSED_RESULT;
  527. OGRErr CPL_DLL OGR_L_CommitTransaction( OGRLayerH ) CPL_WARN_UNUSED_RESULT;
  528. OGRErr CPL_DLL OGR_L_RollbackTransaction( OGRLayerH );
  529. /*! @cond Doxygen_Suppress */
  530. int CPL_DLL OGR_L_Reference( OGRLayerH );
  531. int CPL_DLL OGR_L_Dereference( OGRLayerH );
  532. int CPL_DLL OGR_L_GetRefCount( OGRLayerH );
  533. /*! @endcond */
  534. OGRErr CPL_DLL OGR_L_SyncToDisk( OGRLayerH );
  535. /*! @cond Doxygen_Suppress */
  536. GIntBig CPL_DLL OGR_L_GetFeaturesRead( OGRLayerH );
  537. /*! @endcond */
  538. const char CPL_DLL *OGR_L_GetFIDColumn( OGRLayerH );
  539. const char CPL_DLL *OGR_L_GetGeometryColumn( OGRLayerH );
  540. /** Get style table */
  541. OGRStyleTableH CPL_DLL OGR_L_GetStyleTable( OGRLayerH );
  542. /** Set style table (and take ownership) */
  543. void CPL_DLL OGR_L_SetStyleTableDirectly( OGRLayerH, OGRStyleTableH );
  544. /** Set style table */
  545. void CPL_DLL OGR_L_SetStyleTable( OGRLayerH, OGRStyleTableH );
  546. OGRErr CPL_DLL OGR_L_SetIgnoredFields( OGRLayerH, const char** );
  547. OGRErr CPL_DLL OGR_L_Intersection( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  548. OGRErr CPL_DLL OGR_L_Union( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  549. OGRErr CPL_DLL OGR_L_SymDifference( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  550. OGRErr CPL_DLL OGR_L_Identity( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  551. OGRErr CPL_DLL OGR_L_Update( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  552. OGRErr CPL_DLL OGR_L_Clip( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  553. OGRErr CPL_DLL OGR_L_Erase( OGRLayerH, OGRLayerH, OGRLayerH, char**, GDALProgressFunc, void * );
  554. /* OGRDataSource */
  555. void CPL_DLL OGR_DS_Destroy( OGRDataSourceH );
  556. const char CPL_DLL *OGR_DS_GetName( OGRDataSourceH );
  557. int CPL_DLL OGR_DS_GetLayerCount( OGRDataSourceH );
  558. OGRLayerH CPL_DLL OGR_DS_GetLayer( OGRDataSourceH, int );
  559. OGRLayerH CPL_DLL OGR_DS_GetLayerByName( OGRDataSourceH, const char * );
  560. OGRErr CPL_DLL OGR_DS_DeleteLayer( OGRDataSourceH, int );
  561. OGRSFDriverH CPL_DLL OGR_DS_GetDriver( OGRDataSourceH );
  562. OGRLayerH CPL_DLL OGR_DS_CreateLayer( OGRDataSourceH, const char *,
  563. OGRSpatialReferenceH, OGRwkbGeometryType,
  564. char ** );
  565. OGRLayerH CPL_DLL OGR_DS_CopyLayer( OGRDataSourceH, OGRLayerH, const char *,
  566. char ** );
  567. int CPL_DLL OGR_DS_TestCapability( OGRDataSourceH, const char * );
  568. OGRLayerH CPL_DLL OGR_DS_ExecuteSQL( OGRDataSourceH, const char *,
  569. OGRGeometryH, const char * );
  570. void CPL_DLL OGR_DS_ReleaseResultSet( OGRDataSourceH, OGRLayerH );
  571. /*! @cond Doxygen_Suppress */
  572. int CPL_DLL OGR_DS_Reference( OGRDataSourceH );
  573. int CPL_DLL OGR_DS_Dereference( OGRDataSourceH );
  574. int CPL_DLL OGR_DS_GetRefCount( OGRDataSourceH );
  575. int CPL_DLL OGR_DS_GetSummaryRefCount( OGRDataSourceH );
  576. /*! @endcond */
  577. /** Flush pending changes to disk. See GDALDataset::FlushCache() */
  578. OGRErr CPL_DLL OGR_DS_SyncToDisk( OGRDataSourceH );
  579. /** Get style table */
  580. OGRStyleTableH CPL_DLL OGR_DS_GetStyleTable( OGRDataSourceH );
  581. /** Set style table (and take ownership) */
  582. void CPL_DLL OGR_DS_SetStyleTableDirectly( OGRDataSourceH, OGRStyleTableH );
  583. /** Set style table */
  584. void CPL_DLL OGR_DS_SetStyleTable( OGRDataSourceH, OGRStyleTableH );
  585. /* OGRSFDriver */
  586. const char CPL_DLL *OGR_Dr_GetName( OGRSFDriverH );
  587. OGRDataSourceH CPL_DLL OGR_Dr_Open( OGRSFDriverH, const char *, int ) CPL_WARN_UNUSED_RESULT;
  588. int CPL_DLL OGR_Dr_TestCapability( OGRSFDriverH, const char * );
  589. OGRDataSourceH CPL_DLL OGR_Dr_CreateDataSource( OGRSFDriverH, const char *,
  590. char ** ) CPL_WARN_UNUSED_RESULT;
  591. OGRDataSourceH CPL_DLL OGR_Dr_CopyDataSource( OGRSFDriverH, OGRDataSourceH,
  592. const char *, char ** ) CPL_WARN_UNUSED_RESULT;
  593. OGRErr CPL_DLL OGR_Dr_DeleteDataSource( OGRSFDriverH, const char * );
  594. /* OGRSFDriverRegistrar */
  595. OGRDataSourceH CPL_DLL OGROpen( const char *, int, OGRSFDriverH * ) CPL_WARN_UNUSED_RESULT;
  596. OGRDataSourceH CPL_DLL OGROpenShared( const char *, int, OGRSFDriverH * ) CPL_WARN_UNUSED_RESULT;
  597. OGRErr CPL_DLL OGRReleaseDataSource( OGRDataSourceH );
  598. /*! @cond Doxygen_Suppress */
  599. void CPL_DLL OGRRegisterDriver( OGRSFDriverH );
  600. void CPL_DLL OGRDeregisterDriver( OGRSFDriverH );
  601. /*! @endcond */
  602. int CPL_DLL OGRGetDriverCount(void);
  603. OGRSFDriverH CPL_DLL OGRGetDriver( int );
  604. OGRSFDriverH CPL_DLL OGRGetDriverByName( const char * );
  605. /*! @cond Doxygen_Suppress */
  606. int CPL_DLL OGRGetOpenDSCount(void);
  607. OGRDataSourceH CPL_DLL OGRGetOpenDS( int iDS );
  608. /*! @endcond */
  609. void CPL_DLL OGRRegisterAll(void);
  610. /** Clean-up all drivers (including raster ones starting with GDAL 2.0.
  611. * See GDALDestroyDriverManager() */
  612. void CPL_DLL OGRCleanupAll(void);
  613. /* -------------------------------------------------------------------- */
  614. /* ogrsf_featurestyle.h */
  615. /* -------------------------------------------------------------------- */
  616. #ifdef DEBUG
  617. typedef struct OGRStyleMgrHS *OGRStyleMgrH;
  618. typedef struct OGRStyleToolHS *OGRStyleToolH;
  619. #else
  620. /** Style manager opaque type */
  621. typedef void *OGRStyleMgrH;
  622. /** Style tool opaque type */
  623. typedef void *OGRStyleToolH;
  624. #endif
  625. /* OGRStyleMgr */
  626. OGRStyleMgrH CPL_DLL OGR_SM_Create(OGRStyleTableH hStyleTable) CPL_WARN_UNUSED_RESULT;
  627. void CPL_DLL OGR_SM_Destroy(OGRStyleMgrH hSM);
  628. const char CPL_DLL *OGR_SM_InitFromFeature(OGRStyleMgrH hSM,
  629. OGRFeatureH hFeat);
  630. int CPL_DLL OGR_SM_InitStyleString(OGRStyleMgrH hSM,
  631. const char *pszStyleString);
  632. int CPL_DLL OGR_SM_GetPartCount(OGRStyleMgrH hSM,
  633. const char *pszStyleString);
  634. OGRStyleToolH CPL_DLL OGR_SM_GetPart(OGRStyleMgrH hSM, int nPartId,
  635. const char *pszStyleString);
  636. int CPL_DLL OGR_SM_AddPart(OGRStyleMgrH hSM, OGRStyleToolH hST);
  637. int CPL_DLL OGR_SM_AddStyle(OGRStyleMgrH hSM, const char *pszStyleName,
  638. const char *pszStyleString);
  639. /* OGRStyleTool */
  640. OGRStyleToolH CPL_DLL OGR_ST_Create(OGRSTClassId eClassId) CPL_WARN_UNUSED_RESULT;
  641. void CPL_DLL OGR_ST_Destroy(OGRStyleToolH hST);
  642. OGRSTClassId CPL_DLL OGR_ST_GetType(OGRStyleToolH hST);
  643. OGRSTUnitId CPL_DLL OGR_ST_GetUnit(OGRStyleToolH hST);
  644. void CPL_DLL OGR_ST_SetUnit(OGRStyleToolH hST, OGRSTUnitId eUnit,
  645. double dfGroundPaperScale);
  646. const char CPL_DLL *OGR_ST_GetParamStr(OGRStyleToolH hST, int eParam, int *bValueIsNull);
  647. int CPL_DLL OGR_ST_GetParamNum(OGRStyleToolH hST, int eParam, int *bValueIsNull);
  648. double CPL_DLL OGR_ST_GetParamDbl(OGRStyleToolH hST, int eParam, int *bValueIsNull);
  649. void CPL_DLL OGR_ST_SetParamStr(OGRStyleToolH hST, int eParam, const char *pszValue);
  650. void CPL_DLL OGR_ST_SetParamNum(OGRStyleToolH hST, int eParam, int nValue);
  651. void CPL_DLL OGR_ST_SetParamDbl(OGRStyleToolH hST, int eParam, double dfValue);
  652. const char CPL_DLL *OGR_ST_GetStyleString(OGRStyleToolH hST);
  653. int CPL_DLL OGR_ST_GetRGBFromString(OGRStyleToolH hST, const char *pszColor,
  654. int *pnRed, int *pnGreen, int *pnBlue,
  655. int *pnAlpha);
  656. /* OGRStyleTable */
  657. OGRStyleTableH CPL_DLL OGR_STBL_Create( void ) CPL_WARN_UNUSED_RESULT;
  658. void CPL_DLL OGR_STBL_Destroy( OGRStyleTableH hSTBL );
  659. int CPL_DLL OGR_STBL_AddStyle( OGRStyleTableH hStyleTable,
  660. const char *pszName,
  661. const char *pszStyleString);
  662. int CPL_DLL OGR_STBL_SaveStyleTable( OGRStyleTableH hStyleTable,
  663. const char *pszFilename );
  664. int CPL_DLL OGR_STBL_LoadStyleTable( OGRStyleTableH hStyleTable,
  665. const char *pszFilename );
  666. const char CPL_DLL *OGR_STBL_Find( OGRStyleTableH hStyleTable, const char *pszName );
  667. void CPL_DLL OGR_STBL_ResetStyleStringReading( OGRStyleTableH hStyleTable );
  668. const char CPL_DLL *OGR_STBL_GetNextStyle( OGRStyleTableH hStyleTable);
  669. const char CPL_DLL *OGR_STBL_GetLastStyleName( OGRStyleTableH hStyleTable);
  670. CPL_C_END
  671. #endif /* ndef OGR_API_H_INCLUDED */
上海开阖软件有限公司 沪ICP备12045867号-1