OGR
ogr_core.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  * $Id: ogr_core.h 22448 2011-05-28 18:49:54Z 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     double      MinX;
00054     double      MaxX;
00055     double      MinY;
00056     double      MaxY;
00057 
00058     int  IsInit() const { return MinX != 0 || MinY != 0 || MaxX != 0 || MaxY != 0; }
00059     void Merge( OGREnvelope const& sOther ) {
00060         if( IsInit() )
00061         {
00062             MinX = MIN(MinX,sOther.MinX);
00063             MaxX = MAX(MaxX,sOther.MaxX);
00064             MinY = MIN(MinY,sOther.MinY);
00065             MaxY = MAX(MaxY,sOther.MaxY);
00066         }
00067         else
00068         {
00069             MinX = sOther.MinX;
00070             MaxX = sOther.MaxX;
00071             MinY = sOther.MinY;
00072             MaxY = sOther.MaxY;
00073         }
00074     }
00075     void Merge( double dfX, double dfY ) {
00076         if( IsInit() )
00077         {
00078             MinX = MIN(MinX,dfX);
00079             MaxX = MAX(MaxX,dfX);
00080             MinY = MIN(MinY,dfY);
00081             MaxY = MAX(MaxY,dfY);
00082         }
00083         else
00084         {
00085             MinX = MaxX = dfX;
00086             MinY = MaxY = dfY;
00087         }
00088     }
00089     
00090     void Intersect( OGREnvelope const& sOther ) {
00091         if(Intersects(sOther))
00092         {
00093             if( IsInit() )
00094             {
00095                 MinX = MAX(MinX,sOther.MinX);
00096                 MaxX = MIN(MaxX,sOther.MaxX);
00097                 MinY = MAX(MinY,sOther.MinY);
00098                 MaxY = MIN(MaxY,sOther.MaxY);
00099             }
00100             else
00101             {
00102                 MinX = sOther.MinX;
00103                 MaxX = sOther.MaxX;
00104                 MinY = sOther.MinY;
00105                 MaxY = sOther.MaxY;
00106             }
00107         }
00108         else
00109         {
00110             MinX = 0;
00111             MaxX = 0;
00112             MinY = 0;
00113             MaxY = 0;
00114         }
00115     }
00116  
00117     int Intersects(OGREnvelope const& other) const
00118     {
00119         return MinX <= other.MaxX && MaxX >= other.MinX && 
00120                MinY <= other.MaxY && MaxY >= other.MinY;
00121     }
00122 
00123     int Contains(OGREnvelope const& other) const
00124     {
00125         return MinX <= other.MinX && MinY <= other.MinY &&
00126                MaxX >= other.MaxX && MaxY >= other.MaxY;
00127     }
00128 };
00129 #else
00130 typedef struct
00131 {
00132     double      MinX;
00133     double      MaxX;
00134     double      MinY;
00135     double      MaxY;
00136 } OGREnvelope;
00137 #endif
00138 
00139 
00144 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
00145 class CPL_DLL OGREnvelope3D : public OGREnvelope
00146 {
00147   public:
00148         OGREnvelope3D() : OGREnvelope(), MinZ(0.0), MaxZ(0.0)
00149         {
00150         }
00151 
00152     double      MinZ;
00153     double      MaxZ;
00154 
00155     int  IsInit() const { return MinX != 0 || MinY != 0 || MaxX != 0 || MaxY != 0 || MinZ != 0 || MaxZ != 0; }
00156     void Merge( OGREnvelope3D const& sOther ) {
00157         if( IsInit() )
00158         {
00159             MinX = MIN(MinX,sOther.MinX);
00160             MaxX = MAX(MaxX,sOther.MaxX);
00161             MinY = MIN(MinY,sOther.MinY);
00162             MaxY = MAX(MaxY,sOther.MaxY);
00163             MinZ = MIN(MinZ,sOther.MinZ);
00164             MaxZ = MAX(MaxZ,sOther.MaxZ);
00165         }
00166         else
00167         {
00168             MinX = sOther.MinX;
00169             MaxX = sOther.MaxX;
00170             MinY = sOther.MinY;
00171             MaxY = sOther.MaxY;
00172             MinZ = sOther.MinZ;
00173             MaxZ = sOther.MaxZ;
00174         }
00175     }
00176     void Merge( double dfX, double dfY, double dfZ ) {
00177         if( IsInit() )
00178         {
00179             MinX = MIN(MinX,dfX);
00180             MaxX = MAX(MaxX,dfX);
00181             MinY = MIN(MinY,dfY);
00182             MaxY = MAX(MaxY,dfY);
00183             MinZ = MIN(MinZ,dfZ);
00184             MaxZ = MAX(MaxZ,dfZ);
00185         }
00186         else
00187         {
00188             MinX = MaxX = dfX;
00189             MinY = MaxY = dfY;
00190             MinZ = MaxZ = dfZ;
00191         }
00192     }
00193 
00194     void Intersect( OGREnvelope3D const& sOther ) {
00195         if(Intersects(sOther))
00196         {
00197             if( IsInit() )
00198             {
00199                 MinX = MAX(MinX,sOther.MinX);
00200                 MaxX = MIN(MaxX,sOther.MaxX);
00201                 MinY = MAX(MinY,sOther.MinY);
00202                 MaxY = MIN(MaxY,sOther.MaxY);
00203                 MinZ = MAX(MinZ,sOther.MinZ);
00204                 MaxZ = MIN(MaxZ,sOther.MaxZ);
00205             }
00206             else
00207             {
00208                 MinX = sOther.MinX;
00209                 MaxX = sOther.MaxX;
00210                 MinY = sOther.MinY;
00211                 MaxY = sOther.MaxY;
00212                 MinZ = sOther.MinZ;
00213                 MaxZ = sOther.MaxZ;
00214             }
00215         }
00216         else
00217         {
00218             MinX = 0;
00219             MaxX = 0;
00220             MinY = 0;
00221             MaxY = 0;
00222             MinZ = 0;
00223             MaxZ = 0;
00224         }
00225     }
00226 
00227     int Intersects(OGREnvelope3D const& other) const
00228     {
00229         return MinX <= other.MaxX && MaxX >= other.MinX &&
00230                MinY <= other.MaxY && MaxY >= other.MinY &&
00231                MinZ <= other.MaxZ && MaxZ >= other.MinZ;
00232     }
00233 
00234     int Contains(OGREnvelope3D const& other) const
00235     {
00236         return MinX <= other.MinX && MinY <= other.MinY &&
00237                MaxX >= other.MaxX && MaxY >= other.MaxY &&
00238                MaxZ >= other.MaxZ && MaxZ >= other.MaxZ;
00239     }
00240 };
00241 #else
00242 typedef struct
00243 {
00244     double      MinX;
00245     double      MaxX;
00246     double      MinY;
00247     double      MaxY;
00248     double      MinZ;
00249     double      MaxZ;
00250 } OGREnvelope3D;
00251 #endif
00252 
00253 
00254 CPL_C_START
00255 
00256 void CPL_DLL *OGRMalloc( size_t );
00257 void CPL_DLL *OGRCalloc( size_t, size_t );
00258 void CPL_DLL *OGRRealloc( void *, size_t );
00259 char CPL_DLL *OGRStrdup( const char * );
00260 void CPL_DLL OGRFree( void * );
00261 
00262 typedef int OGRErr;
00263 
00264 #define OGRERR_NONE                0
00265 #define OGRERR_NOT_ENOUGH_DATA     1    /* not enough data to deserialize */
00266 #define OGRERR_NOT_ENOUGH_MEMORY   2
00267 #define OGRERR_UNSUPPORTED_GEOMETRY_TYPE 3
00268 #define OGRERR_UNSUPPORTED_OPERATION 4
00269 #define OGRERR_CORRUPT_DATA        5
00270 #define OGRERR_FAILURE             6
00271 #define OGRERR_UNSUPPORTED_SRS     7
00272 #define OGRERR_INVALID_HANDLE      8
00273 
00274 typedef int     OGRBoolean;
00275 
00276 /* -------------------------------------------------------------------- */
00277 /*      ogr_geometry.h related definitions.                             */
00278 /* -------------------------------------------------------------------- */
00285 typedef enum 
00286 {
00287     wkbUnknown = 0,         
00288     wkbPoint = 1,           
00289     wkbLineString = 2,      
00291     wkbPolygon = 3,         
00294     wkbMultiPoint = 4,      
00295     wkbMultiLineString = 5, 
00296     wkbMultiPolygon = 6,    
00297     wkbGeometryCollection = 7, 
00299     wkbNone = 100,          
00300     wkbLinearRing = 101,    
00301     wkbPoint25D = 0x80000001, 
00302     wkbLineString25D = 0x80000002, 
00303     wkbPolygon25D = 0x80000003, 
00304     wkbMultiPoint25D = 0x80000004, 
00305     wkbMultiLineString25D = 0x80000005, 
00306     wkbMultiPolygon25D = 0x80000006, 
00307     wkbGeometryCollection25D = 0x80000007 
00308 } OGRwkbGeometryType;
00309 
00310 #define wkb25DBit 0x80000000
00311 #define wkbFlatten(x)  ((OGRwkbGeometryType) ((x) & (~wkb25DBit)))
00312 
00313 #define ogrZMarker 0x21125711
00314 
00315 const char CPL_DLL * OGRGeometryTypeToName( OGRwkbGeometryType eType );
00316 OGRwkbGeometryType CPL_DLL OGRMergeGeometryTypes( OGRwkbGeometryType eMain,
00317                                                   OGRwkbGeometryType eExtra );
00318 
00319 typedef enum 
00320 {
00321     wkbXDR = 0,         /* MSB/Sun/Motoroloa: Most Significant Byte First   */
00322     wkbNDR = 1          /* LSB/Intel/Vax: Least Significant Byte First      */
00323 } OGRwkbByteOrder;
00324 
00325 #ifndef NO_HACK_FOR_IBM_DB2_V72
00326 #  define HACK_FOR_IBM_DB2_V72
00327 #endif
00328 
00329 #ifdef HACK_FOR_IBM_DB2_V72
00330 #  define DB2_V72_FIX_BYTE_ORDER(x) ((((x) & 0x31) == (x)) ? (OGRwkbByteOrder) ((x) & 0x1) : (x))
00331 #  define DB2_V72_UNFIX_BYTE_ORDER(x) ((unsigned char) (OGRGeometry::bGenerate_DB2_V72_BYTE_ORDER ? ((x) | 0x30) : (x)))
00332 #else
00333 #  define DB2_V72_FIX_BYTE_ORDER(x) (x)
00334 #  define DB2_V72_UNFIX_BYTE_ORDER(x) (x)
00335 #endif
00336 
00337 #define ALTER_NAME_FLAG            0x1
00338 #define ALTER_TYPE_FLAG            0x2
00339 #define ALTER_WIDTH_PRECISION_FLAG 0x4
00340 #define ALTER_ALL_FLAG             (ALTER_NAME_FLAG | ALTER_TYPE_FLAG | ALTER_WIDTH_PRECISION_FLAG)
00341 
00342 /************************************************************************/
00343 /*                  ogr_feature.h related definitions.                  */
00344 /************************************************************************/
00345 
00352 typedef enum 
00353 {                   OFTInteger = 0,                 OFTIntegerList = 1,        OFTReal = 2,                        OFTRealList = 3,                  OFTString = 4,                       OFTStringList = 5,                             OFTWideString = 6,                             OFTWideStringList = 7,                        OFTBinary = 8,                                   OFTDate = 9,                                   OFTTime = 10,                          OFTDateTime = 11,
00366                                                 OFTMaxType = 11
00367 } OGRFieldType;
00368 
00373 typedef enum 
00374 {
00375     OJUndefined = 0,
00376     OJLeft = 1,
00377     OJRight = 2
00378 } OGRJustification;
00379 
00380 #define OGRNullFID            -1
00381 #define OGRUnsetMarker        -21121
00382 
00383 /************************************************************************/
00384 /*                               OGRField                               */
00385 /************************************************************************/
00386 
00391 typedef union {
00392     int         Integer;
00393     double      Real;
00394     char       *String;
00395     
00396     struct {
00397         int     nCount;
00398         int     *paList;
00399     } IntegerList;
00400     
00401     struct {
00402         int     nCount;
00403         double  *paList;
00404     } RealList;
00405     
00406     struct {
00407         int     nCount;
00408         char    **paList;
00409     } StringList;
00410 
00411     struct {
00412         int     nCount;
00413         GByte   *paData;
00414     } Binary;
00415     
00416     struct {
00417         int     nMarker1;
00418         int     nMarker2;
00419     } Set;
00420 
00421     struct {
00422         GInt16  Year;
00423         GByte   Month;
00424         GByte   Day;
00425         GByte   Hour;
00426         GByte   Minute;
00427         GByte   Second;
00428         GByte   TZFlag; /* 0=unknown, 1=localtime(ambiguous), 
00429                            100=GMT, 104=GMT+1, 80=GMT-5, etc */
00430     } Date;
00431 } OGRField;
00432 
00433 int CPL_DLL OGRParseDate( const char *pszInput, OGRField *psOutput, 
00434                           int nOptions );
00435 
00436 /* -------------------------------------------------------------------- */
00437 /*      Constants from ogrsf_frmts.h for capabilities.                  */
00438 /* -------------------------------------------------------------------- */
00439 #define OLCRandomRead          "RandomRead"
00440 #define OLCSequentialWrite     "SequentialWrite"
00441 #define OLCRandomWrite         "RandomWrite"
00442 #define OLCFastSpatialFilter   "FastSpatialFilter"
00443 #define OLCFastFeatureCount    "FastFeatureCount"
00444 #define OLCFastGetExtent       "FastGetExtent"
00445 #define OLCCreateField         "CreateField"
00446 #define OLCDeleteField         "DeleteField"
00447 #define OLCReorderFields       "ReorderFields"
00448 #define OLCAlterFieldDefn      "AlterFieldDefn"
00449 #define OLCTransactions        "Transactions"
00450 #define OLCDeleteFeature       "DeleteFeature"
00451 #define OLCFastSetNextByIndex  "FastSetNextByIndex"
00452 #define OLCStringsAsUTF8       "StringsAsUTF8"
00453 #define OLCIgnoreFields        "IgnoreFields"
00454 
00455 #define ODsCCreateLayer        "CreateLayer"
00456 #define ODsCDeleteLayer        "DeleteLayer"
00457 
00458 #define ODrCCreateDataSource   "CreateDataSource"
00459 #define ODrCDeleteDataSource   "DeleteDataSource"
00460 
00461 
00462 /************************************************************************/
00463 /*                  ogr_featurestyle.h related definitions.             */
00464 /************************************************************************/
00465 
00470 typedef enum ogr_style_tool_class_id
00471 {
00472     OGRSTCNone   = 0,
00473     OGRSTCPen    = 1,
00474     OGRSTCBrush  = 2,
00475     OGRSTCSymbol = 3,
00476     OGRSTCLabel  = 4,
00477     OGRSTCVector = 5
00478 } OGRSTClassId;
00479 
00483 typedef enum ogr_style_tool_units_id
00484 {
00485     OGRSTUGround = 0,
00486     OGRSTUPixel  = 1,
00487     OGRSTUPoints = 2,
00488     OGRSTUMM     = 3,
00489     OGRSTUCM     = 4,
00490     OGRSTUInches = 5
00491 } OGRSTUnitId;
00492 
00496 typedef enum ogr_style_tool_param_pen_id
00497 {  
00498     OGRSTPenColor       = 0,                   
00499     OGRSTPenWidth       = 1,                   
00500     OGRSTPenPattern     = 2,
00501     OGRSTPenId          = 3,
00502     OGRSTPenPerOffset   = 4,
00503     OGRSTPenCap         = 5,
00504     OGRSTPenJoin        = 6,
00505     OGRSTPenPriority    = 7,
00506     OGRSTPenLast        = 8
00507               
00508 } OGRSTPenParam;
00509 
00513 typedef enum ogr_style_tool_param_brush_id
00514 {  
00515     OGRSTBrushFColor    = 0,                   
00516     OGRSTBrushBColor    = 1,                   
00517     OGRSTBrushId        = 2,
00518     OGRSTBrushAngle     = 3,                   
00519     OGRSTBrushSize      = 4,
00520     OGRSTBrushDx        = 5,
00521     OGRSTBrushDy        = 6,
00522     OGRSTBrushPriority  = 7,
00523     OGRSTBrushLast      = 8
00524               
00525 } OGRSTBrushParam;
00526 
00527 
00531 typedef enum ogr_style_tool_param_symbol_id
00532 {  
00533     OGRSTSymbolId       = 0,
00534     OGRSTSymbolAngle    = 1,
00535     OGRSTSymbolColor    = 2,
00536     OGRSTSymbolSize     = 3,
00537     OGRSTSymbolDx       = 4,
00538     OGRSTSymbolDy       = 5,
00539     OGRSTSymbolStep     = 6,
00540     OGRSTSymbolPerp     = 7,
00541     OGRSTSymbolOffset   = 8,
00542     OGRSTSymbolPriority = 9,
00543     OGRSTSymbolFontName = 10,
00544     OGRSTSymbolOColor   = 11,
00545     OGRSTSymbolLast     = 12
00546               
00547 } OGRSTSymbolParam;
00548 
00552 typedef enum ogr_style_tool_param_label_id
00553 {  
00554     OGRSTLabelFontName  = 0,
00555     OGRSTLabelSize      = 1,
00556     OGRSTLabelTextString = 2,
00557     OGRSTLabelAngle     = 3,
00558     OGRSTLabelFColor    = 4,
00559     OGRSTLabelBColor    = 5,
00560     OGRSTLabelPlacement = 6,
00561     OGRSTLabelAnchor    = 7,
00562     OGRSTLabelDx        = 8,
00563     OGRSTLabelDy        = 9,
00564     OGRSTLabelPerp      = 10,
00565     OGRSTLabelBold      = 11,
00566     OGRSTLabelItalic    = 12,
00567     OGRSTLabelUnderline = 13,
00568     OGRSTLabelPriority  = 14,
00569     OGRSTLabelStrikeout = 15,
00570     OGRSTLabelStretch   = 16,
00571     OGRSTLabelAdjHor    = 17,
00572     OGRSTLabelAdjVert   = 18,
00573     OGRSTLabelHColor    = 19,
00574     OGRSTLabelOColor    = 20,
00575     OGRSTLabelLast      = 21
00576               
00577 } OGRSTLabelParam;
00578 
00579 /* ------------------------------------------------------------------- */
00580 /*                        Version checking                             */
00581 /* -------------------------------------------------------------------- */
00582 
00583 /* Note to developers : please keep this section in sync with gdal.h */
00584 
00585 #ifndef GDAL_VERSION_INFO_DEFINED
00586 #define GDAL_VERSION_INFO_DEFINED
00587 const char CPL_DLL * CPL_STDCALL GDALVersionInfo( const char * );
00588 #endif
00589 
00590 #ifndef GDAL_CHECK_VERSION
00591 
00603 int CPL_DLL CPL_STDCALL GDALCheckVersion( int nVersionMajor, int nVersionMinor,
00604                                           const char* pszCallingComponentName);
00605 
00607 #define GDAL_CHECK_VERSION(pszCallingComponentName) \
00608  GDALCheckVersion(GDAL_VERSION_MAJOR, GDAL_VERSION_MINOR, pszCallingComponentName)
00609 
00610 #endif
00611 
00612 CPL_C_END
00613 
00614 #endif /* ndef OGR_CORE_H_INCLUDED */

Generated for GDAL by doxygen 1.7.6.1.