OGR
ogr_core.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  * $Id: ogr_core.h 23947 2012-02-11 17:37:02Z rouault $
00003  *
00004  * Project:  OpenGIS Simple Features Reference Implementation
00005  * Purpose:  Define some core portability services for cross-platform OGR code.
00006  * Author:   Frank Warmerdam, warmerdam@pobox.com
00007  *
00008  ******************************************************************************
00009  * Copyright (c) 1999, Frank Warmerdam
00010  *
00011  * Permission is hereby granted, free of charge, to any person obtaining a
00012  * copy of this software and associated documentation files (the "Software"),
00013  * to deal in the Software without restriction, including without limitation
00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00015  * and/or sell copies of the Software, and to permit persons to whom the
00016  * Software is furnished to do so, subject to the following conditions:
00017  *
00018  * The above copyright notice and this permission notice shall be included
00019  * in all copies or substantial portions of the Software.
00020  *
00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00027  * DEALINGS IN THE SOFTWARE.
00028  ****************************************************************************/
00029 
00030 #ifndef OGR_CORE_H_INCLUDED
00031 #define OGR_CORE_H_INCLUDED
00032 
00033 #include "cpl_port.h"
00034 #include "gdal_version.h"
00035 
00046 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
00047 class CPL_DLL OGREnvelope
00048 {
00049   public:
00050         OGREnvelope() : MinX(0.0), MaxX(0.0), MinY(0.0), MaxY(0.0)
00051         {
00052         }
00053 
00054         OGREnvelope(const OGREnvelope& oOther) :
00055             MinX(oOther.MinX),MaxX(oOther.MaxX), MinY(oOther.MinY), MaxY(oOther.MaxY)
00056         {
00057         }
00058 
00059     double      MinX;
00060     double      MaxX;
00061     double      MinY;
00062     double      MaxY;
00063 
00064     int  IsInit() const { return MinX != 0 || MinY != 0 || MaxX != 0 || MaxY != 0; }
00065     void Merge( OGREnvelope const& sOther ) {
00066         if( IsInit() )
00067         {
00068             MinX = MIN(MinX,sOther.MinX);
00069             MaxX = MAX(MaxX,sOther.MaxX);
00070             MinY = MIN(MinY,sOther.MinY);
00071             MaxY = MAX(MaxY,sOther.MaxY);
00072         }
00073         else
00074         {
00075             MinX = sOther.MinX;
00076             MaxX = sOther.MaxX;
00077             MinY = sOther.MinY;
00078             MaxY = sOther.MaxY;
00079         }
00080     }
00081     void Merge( double dfX, double dfY ) {
00082         if( IsInit() )
00083         {
00084             MinX = MIN(MinX,dfX);
00085             MaxX = MAX(MaxX,dfX);
00086             MinY = MIN(MinY,dfY);
00087             MaxY = MAX(MaxY,dfY);
00088         }
00089         else
00090         {
00091             MinX = MaxX = dfX;
00092             MinY = MaxY = dfY;
00093         }
00094     }
00095     
00096     void Intersect( OGREnvelope const& sOther ) {
00097         if(Intersects(sOther))
00098         {
00099             if( IsInit() )
00100             {
00101                 MinX = MAX(MinX,sOther.MinX);
00102                 MaxX = MIN(MaxX,sOther.MaxX);
00103                 MinY = MAX(MinY,sOther.MinY);
00104                 MaxY = MIN(MaxY,sOther.MaxY);
00105             }
00106             else
00107             {
00108                 MinX = sOther.MinX;
00109                 MaxX = sOther.MaxX;
00110                 MinY = sOther.MinY;
00111                 MaxY = sOther.MaxY;
00112             }
00113         }
00114         else
00115         {
00116             MinX = 0;
00117             MaxX = 0;
00118             MinY = 0;
00119             MaxY = 0;
00120         }
00121     }
00122  
00123     int Intersects(OGREnvelope const& other) const
00124     {
00125         return MinX <= other.MaxX && MaxX >= other.MinX && 
00126                MinY <= other.MaxY && MaxY >= other.MinY;
00127     }
00128 
00129     int Contains(OGREnvelope const& other) const
00130     {
00131         return MinX <= other.MinX && MinY <= other.MinY &&
00132                MaxX >= other.MaxX && MaxY >= other.MaxY;
00133     }
00134 };
00135 #else
00136 typedef struct
00137 {
00138     double      MinX;
00139     double      MaxX;
00140     double      MinY;
00141     double      MaxY;
00142 } OGREnvelope;
00143 #endif
00144 
00145 
00150 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
00151 class CPL_DLL OGREnvelope3D : public OGREnvelope
00152 {
00153   public:
00154         OGREnvelope3D() : OGREnvelope(), MinZ(0.0), MaxZ(0.0)
00155         {
00156         }
00157 
00158         OGREnvelope3D(const OGREnvelope3D& oOther) :
00159                             OGREnvelope(oOther),
00160                             MinZ(oOther.MinZ), MaxZ(oOther.MaxZ)
00161         {
00162         }
00163 
00164     double      MinZ;
00165     double      MaxZ;
00166 
00167     int  IsInit() const { return MinX != 0 || MinY != 0 || MaxX != 0 || MaxY != 0 || MinZ != 0 || MaxZ != 0; }
00168     void Merge( OGREnvelope3D const& sOther ) {
00169         if( IsInit() )
00170         {
00171             MinX = MIN(MinX,sOther.MinX);
00172             MaxX = MAX(MaxX,sOther.MaxX);
00173             MinY = MIN(MinY,sOther.MinY);
00174             MaxY = MAX(MaxY,sOther.MaxY);
00175             MinZ = MIN(MinZ,sOther.MinZ);
00176             MaxZ = MAX(MaxZ,sOther.MaxZ);
00177         }
00178         else
00179         {
00180             MinX = sOther.MinX;
00181             MaxX = sOther.MaxX;
00182             MinY = sOther.MinY;
00183             MaxY = sOther.MaxY;
00184             MinZ = sOther.MinZ;
00185             MaxZ = sOther.MaxZ;
00186         }
00187     }
00188     void Merge( double dfX, double dfY, double dfZ ) {
00189         if( IsInit() )
00190         {
00191             MinX = MIN(MinX,dfX);
00192             MaxX = MAX(MaxX,dfX);
00193             MinY = MIN(MinY,dfY);
00194             MaxY = MAX(MaxY,dfY);
00195             MinZ = MIN(MinZ,dfZ);
00196             MaxZ = MAX(MaxZ,dfZ);
00197         }
00198         else
00199         {
00200             MinX = MaxX = dfX;
00201             MinY = MaxY = dfY;
00202             MinZ = MaxZ = dfZ;
00203         }
00204     }
00205 
00206     void Intersect( OGREnvelope3D const& sOther ) {
00207         if(Intersects(sOther))
00208         {
00209             if( IsInit() )
00210             {
00211                 MinX = MAX(MinX,sOther.MinX);
00212                 MaxX = MIN(MaxX,sOther.MaxX);
00213                 MinY = MAX(MinY,sOther.MinY);
00214                 MaxY = MIN(MaxY,sOther.MaxY);
00215                 MinZ = MAX(MinZ,sOther.MinZ);
00216                 MaxZ = MIN(MaxZ,sOther.MaxZ);
00217             }
00218             else
00219             {
00220                 MinX = sOther.MinX;
00221                 MaxX = sOther.MaxX;
00222                 MinY = sOther.MinY;
00223                 MaxY = sOther.MaxY;
00224                 MinZ = sOther.MinZ;
00225                 MaxZ = sOther.MaxZ;
00226             }
00227         }
00228         else
00229         {
00230             MinX = 0;
00231             MaxX = 0;
00232             MinY = 0;
00233             MaxY = 0;
00234             MinZ = 0;
00235             MaxZ = 0;
00236         }
00237     }
00238 
00239     int Intersects(OGREnvelope3D const& other) const
00240     {
00241         return MinX <= other.MaxX && MaxX >= other.MinX &&
00242                MinY <= other.MaxY && MaxY >= other.MinY &&
00243                MinZ <= other.MaxZ && MaxZ >= other.MinZ;
00244     }
00245 
00246     int Contains(OGREnvelope3D const& other) const
00247     {
00248         return MinX <= other.MinX && MinY <= other.MinY &&
00249                MaxX >= other.MaxX && MaxY >= other.MaxY &&
00250                MaxZ >= other.MaxZ && MaxZ >= other.MaxZ;
00251     }
00252 };
00253 #else
00254 typedef struct
00255 {
00256     double      MinX;
00257     double      MaxX;
00258     double      MinY;
00259     double      MaxY;
00260     double      MinZ;
00261     double      MaxZ;
00262 } OGREnvelope3D;
00263 #endif
00264 
00265 
00266 CPL_C_START
00267 
00268 void CPL_DLL *OGRMalloc( size_t );
00269 void CPL_DLL *OGRCalloc( size_t, size_t );
00270 void CPL_DLL *OGRRealloc( void *, size_t );
00271 char CPL_DLL *OGRStrdup( const char * );
00272 void CPL_DLL OGRFree( void * );
00273 
00274 typedef int OGRErr;
00275 
00276 #define OGRERR_NONE                0
00277 #define OGRERR_NOT_ENOUGH_DATA     1    /* not enough data to deserialize */
00278 #define OGRERR_NOT_ENOUGH_MEMORY   2
00279 #define OGRERR_UNSUPPORTED_GEOMETRY_TYPE 3
00280 #define OGRERR_UNSUPPORTED_OPERATION 4
00281 #define OGRERR_CORRUPT_DATA        5
00282 #define OGRERR_FAILURE             6
00283 #define OGRERR_UNSUPPORTED_SRS     7
00284 #define OGRERR_INVALID_HANDLE      8
00285 
00286 typedef int     OGRBoolean;
00287 
00288 /* -------------------------------------------------------------------- */
00289 /*      ogr_geometry.h related definitions.                             */
00290 /* -------------------------------------------------------------------- */
00297 typedef enum 
00298 {
00299     wkbUnknown = 0,         
00300     wkbPoint = 1,           
00301     wkbLineString = 2,      
00303     wkbPolygon = 3,         
00306     wkbMultiPoint = 4,      
00307     wkbMultiLineString = 5, 
00308     wkbMultiPolygon = 6,    
00309     wkbGeometryCollection = 7, 
00311     wkbNone = 100,          
00312     wkbLinearRing = 101,    
00313     wkbPoint25D = 0x80000001, 
00314     wkbLineString25D = 0x80000002, 
00315     wkbPolygon25D = 0x80000003, 
00316     wkbMultiPoint25D = 0x80000004, 
00317     wkbMultiLineString25D = 0x80000005, 
00318     wkbMultiPolygon25D = 0x80000006, 
00319     wkbGeometryCollection25D = 0x80000007 
00320 } OGRwkbGeometryType;
00321 
00322 #define wkb25DBit 0x80000000
00323 #define wkbFlatten(x)  ((OGRwkbGeometryType) ((x) & (~wkb25DBit)))
00324 
00325 #define ogrZMarker 0x21125711
00326 
00327 const char CPL_DLL * OGRGeometryTypeToName( OGRwkbGeometryType eType );
00328 OGRwkbGeometryType CPL_DLL OGRMergeGeometryTypes( OGRwkbGeometryType eMain,
00329                                                   OGRwkbGeometryType eExtra );
00330 
00331 typedef enum 
00332 {
00333     wkbXDR = 0,         /* MSB/Sun/Motoroloa: Most Significant Byte First   */
00334     wkbNDR = 1          /* LSB/Intel/Vax: Least Significant Byte First      */
00335 } OGRwkbByteOrder;
00336 
00337 #ifndef NO_HACK_FOR_IBM_DB2_V72
00338 #  define HACK_FOR_IBM_DB2_V72
00339 #endif
00340 
00341 #ifdef HACK_FOR_IBM_DB2_V72
00342 #  define DB2_V72_FIX_BYTE_ORDER(x) ((((x) & 0x31) == (x)) ? (OGRwkbByteOrder) ((x) & 0x1) : (x))
00343 #  define DB2_V72_UNFIX_BYTE_ORDER(x) ((unsigned char) (OGRGeometry::bGenerate_DB2_V72_BYTE_ORDER ? ((x) | 0x30) : (x)))
00344 #else
00345 #  define DB2_V72_FIX_BYTE_ORDER(x) (x)
00346 #  define DB2_V72_UNFIX_BYTE_ORDER(x) (x)
00347 #endif
00348 
00349 #define ALTER_NAME_FLAG            0x1
00350 #define ALTER_TYPE_FLAG            0x2
00351 #define ALTER_WIDTH_PRECISION_FLAG 0x4
00352 #define ALTER_ALL_FLAG             (ALTER_NAME_FLAG | ALTER_TYPE_FLAG | ALTER_WIDTH_PRECISION_FLAG)
00353 
00354 /************************************************************************/
00355 /*                  ogr_feature.h related definitions.                  */
00356 /************************************************************************/
00357 
00364 typedef enum 
00365 {                   OFTInteger = 0,                 OFTIntegerList = 1,        OFTReal = 2,                        OFTRealList = 3,                  OFTString = 4,                       OFTStringList = 5,                             OFTWideString = 6,                             OFTWideStringList = 7,                        OFTBinary = 8,                                   OFTDate = 9,                                   OFTTime = 10,                          OFTDateTime = 11,
00378                                                 OFTMaxType = 11
00379 } OGRFieldType;
00380 
00385 typedef enum 
00386 {
00387     OJUndefined = 0,
00388     OJLeft = 1,
00389     OJRight = 2
00390 } OGRJustification;
00391 
00392 #define OGRNullFID            -1
00393 #define OGRUnsetMarker        -21121
00394 
00395 /************************************************************************/
00396 /*                               OGRField                               */
00397 /************************************************************************/
00398 
00403 typedef union {
00404     int         Integer;
00405     double      Real;
00406     char       *String;
00407     
00408     struct {
00409         int     nCount;
00410         int     *paList;
00411     } IntegerList;
00412     
00413     struct {
00414         int     nCount;
00415         double  *paList;
00416     } RealList;
00417     
00418     struct {
00419         int     nCount;
00420         char    **paList;
00421     } StringList;
00422 
00423     struct {
00424         int     nCount;
00425         GByte   *paData;
00426     } Binary;
00427     
00428     struct {
00429         int     nMarker1;
00430         int     nMarker2;
00431     } Set;
00432 
00433     struct {
00434         GInt16  Year;
00435         GByte   Month;
00436         GByte   Day;
00437         GByte   Hour;
00438         GByte   Minute;
00439         GByte   Second;
00440         GByte   TZFlag; /* 0=unknown, 1=localtime(ambiguous), 
00441                            100=GMT, 104=GMT+1, 80=GMT-5, etc */
00442     } Date;
00443 } OGRField;
00444 
00445 int CPL_DLL OGRParseDate( const char *pszInput, OGRField *psOutput, 
00446                           int nOptions );
00447 
00448 /* -------------------------------------------------------------------- */
00449 /*      Constants from ogrsf_frmts.h for capabilities.                  */
00450 /* -------------------------------------------------------------------- */
00451 #define OLCRandomRead          "RandomRead"
00452 #define OLCSequentialWrite     "SequentialWrite"
00453 #define OLCRandomWrite         "RandomWrite"
00454 #define OLCFastSpatialFilter   "FastSpatialFilter"
00455 #define OLCFastFeatureCount    "FastFeatureCount"
00456 #define OLCFastGetExtent       "FastGetExtent"
00457 #define OLCCreateField         "CreateField"
00458 #define OLCDeleteField         "DeleteField"
00459 #define OLCReorderFields       "ReorderFields"
00460 #define OLCAlterFieldDefn      "AlterFieldDefn"
00461 #define OLCTransactions        "Transactions"
00462 #define OLCDeleteFeature       "DeleteFeature"
00463 #define OLCFastSetNextByIndex  "FastSetNextByIndex"
00464 #define OLCStringsAsUTF8       "StringsAsUTF8"
00465 #define OLCIgnoreFields        "IgnoreFields"
00466 
00467 #define ODsCCreateLayer        "CreateLayer"
00468 #define ODsCDeleteLayer        "DeleteLayer"
00469 
00470 #define ODrCCreateDataSource   "CreateDataSource"
00471 #define ODrCDeleteDataSource   "DeleteDataSource"
00472 
00473 
00474 /************************************************************************/
00475 /*                  ogr_featurestyle.h related definitions.             */
00476 /************************************************************************/
00477 
00482 typedef enum ogr_style_tool_class_id
00483 {
00484     OGRSTCNone   = 0,
00485     OGRSTCPen    = 1,
00486     OGRSTCBrush  = 2,
00487     OGRSTCSymbol = 3,
00488     OGRSTCLabel  = 4,
00489     OGRSTCVector = 5
00490 } OGRSTClassId;
00491 
00495 typedef enum ogr_style_tool_units_id
00496 {
00497     OGRSTUGround = 0,
00498     OGRSTUPixel  = 1,
00499     OGRSTUPoints = 2,
00500     OGRSTUMM     = 3,
00501     OGRSTUCM     = 4,
00502     OGRSTUInches = 5
00503 } OGRSTUnitId;
00504 
00508 typedef enum ogr_style_tool_param_pen_id
00509 {  
00510     OGRSTPenColor       = 0,                   
00511     OGRSTPenWidth       = 1,                   
00512     OGRSTPenPattern     = 2,
00513     OGRSTPenId          = 3,
00514     OGRSTPenPerOffset   = 4,
00515     OGRSTPenCap         = 5,
00516     OGRSTPenJoin        = 6,
00517     OGRSTPenPriority    = 7,
00518     OGRSTPenLast        = 8
00519               
00520 } OGRSTPenParam;
00521 
00525 typedef enum ogr_style_tool_param_brush_id
00526 {  
00527     OGRSTBrushFColor    = 0,                   
00528     OGRSTBrushBColor    = 1,                   
00529     OGRSTBrushId        = 2,
00530     OGRSTBrushAngle     = 3,                   
00531     OGRSTBrushSize      = 4,
00532     OGRSTBrushDx        = 5,
00533     OGRSTBrushDy        = 6,
00534     OGRSTBrushPriority  = 7,
00535     OGRSTBrushLast      = 8
00536               
00537 } OGRSTBrushParam;
00538 
00539 
00543 typedef enum ogr_style_tool_param_symbol_id
00544 {  
00545     OGRSTSymbolId       = 0,
00546     OGRSTSymbolAngle    = 1,
00547     OGRSTSymbolColor    = 2,
00548     OGRSTSymbolSize     = 3,
00549     OGRSTSymbolDx       = 4,
00550     OGRSTSymbolDy       = 5,
00551     OGRSTSymbolStep     = 6,
00552     OGRSTSymbolPerp     = 7,
00553     OGRSTSymbolOffset   = 8,
00554     OGRSTSymbolPriority = 9,
00555     OGRSTSymbolFontName = 10,
00556     OGRSTSymbolOColor   = 11,
00557     OGRSTSymbolLast     = 12
00558               
00559 } OGRSTSymbolParam;
00560 
00564 typedef enum ogr_style_tool_param_label_id
00565 {  
00566     OGRSTLabelFontName  = 0,
00567     OGRSTLabelSize      = 1,
00568     OGRSTLabelTextString = 2,
00569     OGRSTLabelAngle     = 3,
00570     OGRSTLabelFColor    = 4,
00571     OGRSTLabelBColor    = 5,
00572     OGRSTLabelPlacement = 6,
00573     OGRSTLabelAnchor    = 7,
00574     OGRSTLabelDx        = 8,
00575     OGRSTLabelDy        = 9,
00576     OGRSTLabelPerp      = 10,
00577     OGRSTLabelBold      = 11,
00578     OGRSTLabelItalic    = 12,
00579     OGRSTLabelUnderline = 13,
00580     OGRSTLabelPriority  = 14,
00581     OGRSTLabelStrikeout = 15,
00582     OGRSTLabelStretch   = 16,
00583     OGRSTLabelAdjHor    = 17,
00584     OGRSTLabelAdjVert   = 18,
00585     OGRSTLabelHColor    = 19,
00586     OGRSTLabelOColor    = 20,
00587     OGRSTLabelLast      = 21
00588               
00589 } OGRSTLabelParam;
00590 
00591 /* ------------------------------------------------------------------- */
00592 /*                        Version checking                             */
00593 /* -------------------------------------------------------------------- */
00594 
00595 /* Note to developers : please keep this section in sync with gdal.h */
00596 
00597 #ifndef GDAL_VERSION_INFO_DEFINED
00598 #define GDAL_VERSION_INFO_DEFINED
00599 const char CPL_DLL * CPL_STDCALL GDALVersionInfo( const char * );
00600 #endif
00601 
00602 #ifndef GDAL_CHECK_VERSION
00603 
00615 int CPL_DLL CPL_STDCALL GDALCheckVersion( int nVersionMajor, int nVersionMinor,
00616                                           const char* pszCallingComponentName);
00617 
00619 #define GDAL_CHECK_VERSION(pszCallingComponentName) \
00620  GDALCheckVersion(GDAL_VERSION_MAJOR, GDAL_VERSION_MINOR, pszCallingComponentName)
00621 
00622 #endif
00623 
00624 CPL_C_END
00625 
00626 #endif /* ndef OGR_CORE_H_INCLUDED */

Generated for GDAL by doxygen 1.7.6.1.