14#ifndef OGR_P_H_INCLUDED
15#define OGR_P_H_INCLUDED
35#define OGR_GEOMETRY_DEFAULT_NON_EMPTY_NAME "_ogr_geometry_"
38#define OGR_SWAP(x) (x == wkbNDR)
40#define OGR_SWAP(x) (x == wkbXDR)
44#define POSTGIS15_CURVEPOLYGON 13
45#define POSTGIS15_MULTICURVE 14
46#define POSTGIS15_MULTISURFACE 15
49#ifdef GDAL_COMPILATION
50#define wkb25DBitInternalUse 0x80000000
57#ifdef OGR_GEOMETRY_H_INCLUDED
58#define OGR_WKT_TOKEN_MAX 64
60const char CPL_DLL *OGRWktReadToken(
const char *pszInput,
char *pszToken);
62const char CPL_DLL *OGRWktReadPoints(
const char *pszInput,
64 int *pnMaxPoints,
int *pnReadPoints);
67OGRWktReadPointsM(
const char *pszInput,
OGRRawPoint **ppaoPoints,
68 double **ppadfZ,
double **ppadfM,
71 int *pnMaxPoints,
int *pnReadPoints);
73void CPL_DLL OGRMakeWktCoordinate(
char *,
double,
double,
double,
int);
74std::string CPL_DLL OGRMakeWktCoordinate(
double,
double,
double,
int,
76void CPL_DLL OGRMakeWktCoordinateM(
char *,
double,
double,
double,
double,
78std::string CPL_DLL OGRMakeWktCoordinateM(
double,
double,
double,
double,
84void CPL_DLL OGRFormatDouble(
char *pszBuffer,
int nBufferLen,
double dfVal,
85 char chDecimalSep,
int nPrecision = 15,
86 char chConversionSpecifier =
'f');
88#ifdef OGR_GEOMETRY_H_INCLUDED
89std::string CPL_DLL OGRFormatDouble(
double val,
const OGRWktOptions &opts,
93int OGRFormatFloat(
char *pszBuffer,
int nBufferLen,
float fVal,
int nPrecision,
94 char chConversionSpecifier);
103int CPL_DLL OGRTimezoneToTZFlag(
const char *pszTZ,
104 bool bEmitErrorIfUnhandledFormat);
105std::string CPL_DLL OGRTZFlagToTimezone(
int nTZFlag,
106 const char *pszUTCRepresentation);
108int CPL_DLL OGRGetDayOfWeek(
int day,
int month,
int year);
109int CPL_DLL OGRParseXMLDateTime(
const char *pszXMLDateTime,
OGRField *psField);
110int CPL_DLL OGRParseRFC822DateTime(
const char *pszRFC822DateTime,
112char CPL_DLL *OGRGetRFC822DateTime(
const OGRField *psField);
113char CPL_DLL *OGRGetXMLDateTime(
const OGRField *psField);
114char CPL_DLL *OGRGetXMLDateTime(
const OGRField *psField,
115 bool bAlwaysMillisecond);
117#define OGR_SIZEOF_ISO8601_DATETIME_BUFFER 30
119OGRGetISO8601DateTime(
const OGRField *psField,
bool bAlwaysMillisecond,
120 char szBuffer[OGR_SIZEOF_ISO8601_DATETIME_BUFFER]);
123enum class OGRISO8601Precision
144 char szBuffer[OGR_SIZEOF_ISO8601_DATETIME_BUFFER]);
145char CPL_DLL *OGRGetXML_UTF8_EscapedString(
const char *pszString);
147#ifdef GDAL_COMPILATION
148bool CPL_DLL OGRParseDateTimeYYYYMMDDTHHMMZ(std::string_view sInput,
150bool CPL_DLL OGRParseDateTimeYYYYMMDDTHHMMSSZ(std::string_view sInput,
152bool CPL_DLL OGRParseDateTimeYYYYMMDDTHHMMSSsssZ(std::string_view sInput,
156int OGRCompareDate(
const OGRField *psFirstTuple,
160bool CPL_DLL OGRIsGeoJSONMediaType(
const char *pszMediaType);
163int CPL_DLL OGRGeneralCmdLineProcessor(
int nArgc,
char ***ppapszArgv,
170#define SPF_OGR_GEOMETRY 1
171#define SPF_OGR_STYLE 2
172#define SPF_OGR_GEOM_WKT 3
173#define SPF_OGR_GEOM_AREA 4
174#define SPECIAL_FIELD_COUNT 5
176extern const char *
const SpecialFieldNames[SPECIAL_FIELD_COUNT];
182OGRErr CPL_DLL OSRGetEllipsoidInfo(
int,
char **,
double *,
double *);
185double OGRFastAtof(
const char *pszStr);
187OGRErr CPL_DLL OGRCheckPermutation(
const int *panPermutation,
int nSize);
194 int *pnSRID,
int bIsPostGIS1_EWKB);
195OGRGeometry CPL_DLL *OGRGeometryFromHexEWKB(
const char *pszBytea,
int *pnSRID,
196 int bIsPostGIS1_EWKB);
197char CPL_DLL *OGRGeometryToHexEWKB(
const OGRGeometry *poGeometry,
int nSRSId,
198 int nPostGISMajor,
int nPostGISMinor);
204OGRErr CPL_DLL OGRReadWKBGeometryType(
const unsigned char *pabyData,
212OGRErr CPL_DLL OGRReadWKTGeometryType(
const char *pszWKT,
234inline uint64_t OGRRoundValueIEEE754(uint64_t nVal,
237inline uint64_t OGRRoundValueIEEE754(uint64_t nVal,
int nBitsPrecision)
239 constexpr int MANTISSA_SIZE = std::numeric_limits<double>::digits - 1;
240 constexpr int MAX_EXPONENT = std::numeric_limits<double>::max_exponent;
241#if __cplusplus >= 201703L
242 static_assert(MANTISSA_SIZE == 52);
243 static_assert(MAX_EXPONENT == 1024);
246 const int nExponent =
247 ((nVal >> MANTISSA_SIZE) & (2 * MAX_EXPONENT - 1)) - (MAX_EXPONENT - 1);
249 const int nBitsRequired = 1 + nExponent + nBitsPrecision;
251 int nNullifiedBits = MANTISSA_SIZE - nBitsRequired;
254 if (nNullifiedBits <= 0)
256 if (nNullifiedBits >= MANTISSA_SIZE)
257 nNullifiedBits = MANTISSA_SIZE;
258 nVal >>= nNullifiedBits;
259 nVal <<= nNullifiedBits;
271template <
int SPACING>
272inline void OGRRoundCoordinatesIEEE754XYValues(
int nBitsPrecision,
273 GByte *pabyBase,
size_t nPoints)
277 if (nBitsPrecision != INT_MIN)
279 for (
size_t i = 0; i < nPoints; i++)
283 memcpy(&nVal, pabyBase + SPACING * i,
sizeof(uint64_t));
284 nVal = OGRRoundValueIEEE754(nVal, nBitsPrecision);
285 memcpy(pabyBase + SPACING * i, &nVal,
sizeof(uint64_t));
287 memcpy(&nVal, pabyBase +
sizeof(uint64_t) + SPACING * i,
289 nVal = OGRRoundValueIEEE754(nVal, nBitsPrecision);
290 memcpy(pabyBase +
sizeof(uint64_t) + SPACING * i, &nVal,
304template <
int SPACING>
305inline void OGRRoundCoordinatesIEEE754(
int nBitsPrecision,
GByte *pabyBase,
308 if (nBitsPrecision != INT_MIN)
310 for (
size_t i = 0; i < nPoints; i++)
314 memcpy(&nVal, pabyBase + SPACING * i,
sizeof(uint64_t));
315 nVal = OGRRoundValueIEEE754(nVal, nBitsPrecision);
316 memcpy(pabyBase + SPACING * i, &nVal,
sizeof(uint64_t));
328std::string CPL_DLL OGRDuplicateCharacter(
const std::string &osStr,
char ch);
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:72
Abstract base class for all geometry classes.
Definition ogr_geometry.h:357
Simple container for a position.
Definition ogr_geometry.h:89
Options for formatting WKT output.
Definition ogr_geometry.h:46
Various convenience functions for CPL.
Definitions for CPL mini XML Parser/Serializer.
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:1035
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:165
Various convenience functions for working with strings and string lists.
Core portability services for cross-platform OGR code.
int OGRBoolean
Type for a OGR boolean.
Definition ogr_core.h:404
OGRFieldSubType
List of field subtypes.
Definition ogr_core.h:817
OGRwkbVariant
Output variants of WKB we support.
Definition ogr_core.h:558
OGRFieldType
List of feature field types.
Definition ogr_core.h:790
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:423
int OGRErr
Type for a OGR error.
Definition ogr_core.h:388
OGRFeature field attribute value union.
Definition ogr_core.h:904