GDAL
ogr_p.h
1 /******************************************************************************
2  * $Id: ogr_p.h ce3337bbff3fab9123cf589a727dc3d288318483 2021-10-24 04:30:26 +0200 Even Rouault $
3  *
4  * Project: OpenGIS Simple Features Reference Implementation
5  * Purpose: Some private helper functions and stuff for OGR implementation.
6  * Author: Frank Warmerdam, warmerdam@pobox.com
7  *
8  ******************************************************************************
9  * Copyright (c) 1999, Frank Warmerdam
10  * Copyright (c) 2008-2014, Even Rouault <even dot rouault at spatialys.com>
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 
31 #ifndef OGR_P_H_INCLUDED
32 #define OGR_P_H_INCLUDED
33 
34 /* -------------------------------------------------------------------- */
35 /* Include the common portability library ... lets us do lots */
36 /* of stuff easily. */
37 /* -------------------------------------------------------------------- */
38 
39 #include "cpl_string.h"
40 #include "cpl_conv.h"
41 #include "cpl_minixml.h"
42 
43 #include "ogr_core.h"
44 #include "ogr_geometry.h"
45 #include "ogr_feature.h"
46 
47 /* A default name for the default geometry column, instead of '' */
48 #define OGR_GEOMETRY_DEFAULT_NON_EMPTY_NAME "_ogr_geometry_"
49 
50 #ifdef CPL_MSB
51 # define OGR_SWAP(x) (x == wkbNDR)
52 #else
53 # define OGR_SWAP(x) (x == wkbXDR)
54 #endif
55 
56 /* PostGIS 1.X has non standard codes for the following geometry types */
57 #define POSTGIS15_CURVEPOLYGON 13 /* instead of 10 */
58 #define POSTGIS15_MULTICURVE 14 /* instead of 11 */
59 #define POSTGIS15_MULTISURFACE 15 /* instead of 12 */
60 
61 /* Has been deprecated. Can only be used in very specific circumstances */
62 #ifdef GDAL_COMPILATION
63 #define wkb25DBitInternalUse 0x80000000
64 #endif
65 
66 /* -------------------------------------------------------------------- */
67 /* helper function for parsing well known text format vector objects.*/
68 /* -------------------------------------------------------------------- */
69 
70 #ifdef OGR_GEOMETRY_H_INCLUDED
71 #define OGR_WKT_TOKEN_MAX 64
72 
73 const char CPL_DLL * OGRWktReadToken( const char * pszInput, char * pszToken );
74 
75 const char CPL_DLL * OGRWktReadPoints( const char * pszInput,
76  OGRRawPoint **ppaoPoints,
77  double **ppadfZ,
78  int * pnMaxPoints,
79  int * pnReadPoints );
80 
81 const char CPL_DLL * OGRWktReadPointsM( const char * pszInput,
82  OGRRawPoint **ppaoPoints,
83  double **ppadfZ,
84  double **ppadfM,
85  int * flags, /* geometry flags, are we expecting Z, M, or both; may change due to input */
86  int * pnMaxPoints,
87  int * pnReadPoints );
88 
89 void CPL_DLL OGRMakeWktCoordinate( char *, double, double, double, int );
90 std::string CPL_DLL OGRMakeWktCoordinate(double, double, double, int, OGRWktOptions opts );
91 void CPL_DLL OGRMakeWktCoordinateM( char *, double, double, double, double, OGRBoolean, OGRBoolean );
92 std::string CPL_DLL OGRMakeWktCoordinateM( double, double, double, double, OGRBoolean, OGRBoolean, OGRWktOptions opts );
93 
94 #endif
95 
96 void CPL_DLL OGRFormatDouble( char *pszBuffer, int nBufferLen, double dfVal,
97  char chDecimalSep, int nPrecision = 15, char chConversionSpecifier = 'f' );
98 std::string CPL_DLL OGRFormatDouble(double val, const OGRWktOptions& opts);
99 
100 int OGRFormatFloat(char *pszBuffer, int nBufferLen, float fVal,
101  int nPrecision, char chConversionSpecifier);
102 
103 /* -------------------------------------------------------------------- */
104 /* Date-time parsing and processing functions */
105 /* -------------------------------------------------------------------- */
106 
107 /* Internal use by OGR drivers only, CPL_DLL is just there in case */
108 /* they are compiled as plugins */
109 int CPL_DLL OGRGetDayOfWeek(int day, int month, int year);
110 int CPL_DLL OGRParseXMLDateTime( const char* pszXMLDateTime,
111  OGRField* psField );
112 int CPL_DLL OGRParseRFC822DateTime( const char* pszRFC822DateTime,
113  OGRField* psField );
114 char CPL_DLL * OGRGetRFC822DateTime(const OGRField* psField);
115 char CPL_DLL * OGRGetXMLDateTime(const OGRField* psField);
116 char CPL_DLL * OGRGetXMLDateTime(const OGRField* psField, bool bAlwaysMillisecond);
117 char CPL_DLL * OGRGetXML_UTF8_EscapedString(const char* pszString);
118 
119 int OGRCompareDate(const OGRField *psFirstTuple,
120  const OGRField *psSecondTuple ); /* used by ogr_gensql.cpp and ogrfeaturequery.cpp */
121 
122 /* General utility option processing. */
123 int CPL_DLL OGRGeneralCmdLineProcessor( int nArgc, char ***ppapszArgv, int nOptions );
124 
125 /************************************************************************/
126 /* Support for special attributes (feature query and selection) */
127 /************************************************************************/
128 #define SPF_FID 0
129 #define SPF_OGR_GEOMETRY 1
130 #define SPF_OGR_STYLE 2
131 #define SPF_OGR_GEOM_WKT 3
132 #define SPF_OGR_GEOM_AREA 4
133 #define SPECIAL_FIELD_COUNT 5
134 
135 extern const char* const SpecialFieldNames[SPECIAL_FIELD_COUNT];
136 
137 #ifdef SWQ_H_INCLUDED_
138 extern const swq_field_type SpecialFieldTypes[SPECIAL_FIELD_COUNT];
139 #endif
140 
141 /************************************************************************/
142 /* Some SRS related stuff, search in SRS data files. */
143 /************************************************************************/
144 
145 OGRErr CPL_DLL OSRGetEllipsoidInfo( int, char **, double *, double *);
146 
147 /* Fast atof function */
148 double OGRFastAtof(const char* pszStr);
149 
150 OGRErr CPL_DLL OGRCheckPermutation(const int* panPermutation, int nSize);
151 
152 /* GML related */
153 
154 OGRGeometry *GML2OGRGeometry_XMLNode( const CPLXMLNode *psNode,
155  int nPseudoBoolGetSecondaryGeometryOption,
156  int nRecLevel = 0,
157  int nSRSDimension = 0,
158  bool bIgnoreGSG = false,
159  bool bOrientation = true,
160  bool bFaceHoleNegative = false);
161 
162 /************************************************************************/
163 /* PostGIS EWKB encoding */
164 /************************************************************************/
165 
166 OGRGeometry CPL_DLL *OGRGeometryFromEWKB( GByte *pabyWKB, int nLength, int* pnSRID,
167  int bIsPostGIS1_EWKB );
168 OGRGeometry CPL_DLL *OGRGeometryFromHexEWKB( const char *pszBytea, int* pnSRID,
169  int bIsPostGIS1_EWKB );
170 char CPL_DLL * OGRGeometryToHexEWKB( OGRGeometry * poGeometry, int nSRSId,
171  int nPostGISMajor, int nPostGISMinor );
172 
173 /************************************************************************/
174 /* WKB Type Handling encoding */
175 /************************************************************************/
176 
177 OGRErr OGRReadWKBGeometryType( const unsigned char * pabyData,
178  OGRwkbVariant wkbVariant,
179  OGRwkbGeometryType *eGeometryType );
180 
181 /************************************************************************/
182 /* Other */
183 /************************************************************************/
184 
185 void CPL_DLL OGRUpdateFieldType( OGRFieldDefn* poFDefn,
186  OGRFieldType eNewType,
187  OGRFieldSubType eNewSubType );
188 
189 #endif /* ndef OGR_P_H_INCLUDED */
Definition of an attribute of an OGRFeatureDefn.
Definition: ogr_feature.h:99
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:327
Simple container for a position.
Definition: ogr_geometry.h:104
Various convenience functions for CPL.
Definitions for CPL mini XML Parser/Serializer.
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
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:334
OGRFieldSubType
List of field subtypes.
Definition: ogr_core.h:674
OGRwkbVariant
Output variants of WKB we support.
Definition: ogr_core.h:462
OGRFieldType
List of feature field types.
Definition: ogr_core.h:646
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:346
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:318
Simple feature classes.
Simple feature geometry classes.
Document node structure.
Definition: cpl_minixml.h:70
Options for formatting WKT output.
Definition: ogr_geometry.h:70
OGRFeature field attribute value union.
Definition: ogr_core.h:738