Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

ogr_feature.h

Go to the documentation of this file.
00001 /****************************************************************************** 00002 * $Id: ogr_feature.h,v 1.29 2004/02/23 21:47:23 warmerda Exp $ 00003 * 00004 * Project: OpenGIS Simple Features Reference Implementation 00005 * Purpose: Class for representing a whole feature, and layer schemas. 00006 * Author: Frank Warmerdam, warmerda@home.com 00007 * 00008 ****************************************************************************** 00009 * Copyright (c) 1999, Les Technologies SoftMap Inc. 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 * $Log: ogr_feature.h,v $ 00031 * Revision 1.29 2004/02/23 21:47:23 warmerda 00032 * Added GetUsedFields() and GetSWGExpr() methods on OGRFeatureQuery class 00033 * 00034 * Revision 1.28 2003/05/28 19:16:42 warmerda 00035 * fixed up argument names and stuff for docs 00036 * 00037 * Revision 1.27 2003/04/08 20:57:28 warmerda 00038 * added RemapFields on OGRFeature 00039 * 00040 * Revision 1.26 2003/03/04 05:46:31 warmerda 00041 * added EvaluateAgainstIndices for OGRFeatureQuery 00042 * 00043 * Revision 1.25 2003/01/08 22:03:44 warmerda 00044 * added StealGeometry() method on OGRFeature 00045 * 00046 * Revision 1.24 2002/10/09 14:31:06 warmerda 00047 * dont permit negative widths to be assigned to field definition 00048 * 00049 * Revision 1.23 2002/09/26 18:13:17 warmerda 00050 * moved some defs to ogr_core.h for sharing with ogr_api.h 00051 * 00052 * Revision 1.22 2002/08/07 21:37:47 warmerda 00053 * added indirect OGRFeaturedefn constructor/destructor 00054 * 00055 * Revision 1.21 2001/11/01 16:54:16 warmerda 00056 * added DestroyFeature 00057 * 00058 * Revision 1.20 2001/07/19 18:25:07 warmerda 00059 * expanded tabs 00060 * 00061 * Revision 1.19 2001/06/19 15:48:36 warmerda 00062 * added feature attribute query support 00063 * 00064 * Revision 1.18 2001/06/01 14:33:00 warmerda 00065 * added CreateFeature factory method 00066 * 00067 * Revision 1.17 2001/02/06 17:10:28 warmerda 00068 * export entry points from DLL 00069 * 00070 * Revision 1.16 2001/01/19 21:10:47 warmerda 00071 * replaced tabs 00072 * 00073 * Revision 1.15 2000/12/07 03:40:13 danmo 00074 * Removed stray comma in OGRFieldType enum defn 00075 * 00076 * Revision 1.14 2000/10/03 19:19:56 danmo 00077 * Made m_pszStyleString protected (was private) 00078 * 00079 * Revision 1.13 2000/10/03 18:14:29 danmo 00080 * Made OGRFeature::Get/SetStyleString() virtual 00081 * 00082 * Revision 1.12 2000/08/18 21:26:53 svillene 00083 * Add representation 00084 * 00085 * Revision 1.11 1999/11/26 03:05:38 warmerda 00086 * added unset field support 00087 * 00088 * Revision 1.10 1999/11/18 19:02:20 warmerda 00089 * expanded tabs 00090 * 00091 * Revision 1.9 1999/11/04 21:05:49 warmerda 00092 * Added the Set() method on OGRFieldDefn to set all info in one call, 00093 * and the SetFrom() method on OGRFeature to copy the contents of one 00094 * feature to another, even if of a different OGRFeatureDefn. 00095 * 00096 * Revision 1.8 1999/10/01 14:47:05 warmerda 00097 * added full family of get/set field methods with field names 00098 * 00099 * Revision 1.7 1999/08/30 14:52:33 warmerda 00100 * added support for StringList fields 00101 * 00102 * Revision 1.6 1999/08/26 17:38:00 warmerda 00103 * added support for real and integer lists 00104 * 00105 * Revision 1.5 1999/07/27 00:47:37 warmerda 00106 * Added FID to OGRFeature class 00107 * 00108 * Revision 1.4 1999/07/07 04:23:07 danmo 00109 * Fixed typo in #define _OGR_..._H_INCLUDED line 00110 * 00111 * Revision 1.3 1999/07/05 17:18:39 warmerda 00112 * added docs 00113 * 00114 * Revision 1.2 1999/06/11 19:21:27 warmerda 00115 * Fleshed out operational definitions 00116 * 00117 * Revision 1.1 1999/05/31 17:14:53 warmerda 00118 * New 00119 * 00120 */ 00121 00122 #ifndef _OGR_FEATURE_H_INCLUDED 00123 #define _OGR_FEATURE_H_INCLUDED 00124 00125 #include "ogr_geometry.h" 00126 00127 class OGRStyleTable; 00128 00135 /************************************************************************/ 00136 /* OGRFieldDefn */ 00137 /************************************************************************/ 00138 00143 class CPL_DLL OGRFieldDefn 00144 { 00145 private: 00146 char *pszName; 00147 OGRFieldType eType; 00148 OGRJustification eJustify; 00149 int nWidth; /* zero is variable */ 00150 int nPrecision; 00151 OGRField uDefault; 00152 00153 void Initialize( const char *, OGRFieldType ); 00154 00155 public: 00156 OGRFieldDefn( const char *, OGRFieldType ); 00157 OGRFieldDefn( OGRFieldDefn * ); 00158 ~OGRFieldDefn(); 00159 00160 void SetName( const char * ); 00161 const char *GetNameRef() { return pszName; } 00162 00163 OGRFieldType GetType() { return eType; } 00164 void SetType( OGRFieldType eTypeIn ) { eType = eTypeIn;} 00165 static const char *GetFieldTypeName( OGRFieldType ); 00166 00167 OGRJustification GetJustify() { return eJustify; } 00168 void SetJustify( OGRJustification eJustifyIn ) 00169 { eJustify = eJustifyIn; } 00170 00171 int GetWidth() { return nWidth; } 00172 void SetWidth( int nWidthIn ) { nWidth = MAX(0,nWidthIn); } 00173 00174 int GetPrecision() { return nPrecision; } 00175 void SetPrecision( int nPrecisionIn ) 00176 { nPrecision = nPrecisionIn; } 00177 00178 void Set( const char *, OGRFieldType, int = 0, int = 0, 00179 OGRJustification = OJUndefined ); 00180 00181 void SetDefault( const OGRField * ); 00182 const OGRField *GetDefaultRef() { return &uDefault; } 00183 }; 00184 00185 /************************************************************************/ 00186 /* OGRFeatureDefn */ 00187 /************************************************************************/ 00188 00205 class CPL_DLL OGRFeatureDefn 00206 { 00207 private: 00208 int nRefCount; 00209 00210 int nFieldCount; 00211 OGRFieldDefn **papoFieldDefn; 00212 00213 OGRwkbGeometryType eGeomType; 00214 00215 char *pszFeatureClassName; 00216 00217 public: 00218 OGRFeatureDefn( const char * pszName = NULL ); 00219 virtual ~OGRFeatureDefn(); 00220 00221 const char *GetName() { return pszFeatureClassName; } 00222 00223 int GetFieldCount() { return nFieldCount; } 00224 OGRFieldDefn *GetFieldDefn( int i ); 00225 int GetFieldIndex( const char * ); 00226 00227 void AddFieldDefn( OGRFieldDefn * ); 00228 00229 OGRwkbGeometryType GetGeomType() { return eGeomType; } 00230 void SetGeomType( OGRwkbGeometryType ); 00231 00232 OGRFeatureDefn *Clone(); 00233 00234 int Reference() { return ++nRefCount; } 00235 int Dereference() { return --nRefCount; } 00236 int GetReferenceCount() { return nRefCount; } 00237 00238 static OGRFeatureDefn *CreateFeatureDefn( const char *pszName = NULL ); 00239 static void DestroyFeatureDefn( OGRFeatureDefn * ); 00240 }; 00241 00242 /************************************************************************/ 00243 /* OGRFeature */ 00244 /************************************************************************/ 00245 00250 class CPL_DLL OGRFeature 00251 { 00252 private: 00253 00254 long nFID; 00255 OGRFeatureDefn *poDefn; 00256 OGRGeometry *poGeometry; 00257 OGRField *pauFields; 00258 00259 protected: 00260 char * m_pszStyleString; 00261 OGRStyleTable *m_poStyleTable; 00262 00263 00264 public: 00265 OGRFeature( OGRFeatureDefn * ); 00266 virtual ~OGRFeature(); 00267 00268 OGRFeatureDefn *GetDefnRef() { return poDefn; } 00269 00270 OGRErr SetGeometryDirectly( OGRGeometry * ); 00271 OGRErr SetGeometry( OGRGeometry * ); 00272 OGRGeometry *GetGeometryRef() { return poGeometry; } 00273 OGRGeometry *StealGeometry(); 00274 00275 OGRFeature *Clone(); 00276 virtual OGRBoolean Equal( OGRFeature * poFeature ); 00277 00278 int GetFieldCount() { return poDefn->GetFieldCount(); } 00279 OGRFieldDefn *GetFieldDefnRef( int iField ) 00280 { return poDefn->GetFieldDefn(iField); } 00281 int GetFieldIndex( const char * pszName) 00282 { return poDefn->GetFieldIndex(pszName);} 00283 00284 int IsFieldSet( int iField ) 00285 { return 00286 pauFields[iField].Set.nMarker1 != OGRUnsetMarker 00287 || pauFields[iField].Set.nMarker2 != OGRUnsetMarker; 00288 } 00289 00290 void UnsetField( int iField ); 00291 00292 OGRField *GetRawFieldRef( int i ) { return pauFields + i; } 00293 00294 int GetFieldAsInteger( int i ); 00295 double GetFieldAsDouble( int i ); 00296 const char *GetFieldAsString( int i ); 00297 const int *GetFieldAsIntegerList( int i, int *pnCount ); 00298 const double *GetFieldAsDoubleList( int i, int *pnCount ); 00299 char **GetFieldAsStringList( int i ); 00300 00301 int GetFieldAsInteger( const char *pszFName ) 00302 { return GetFieldAsInteger( GetFieldIndex(pszFName) ); } 00303 double GetFieldAsDouble( const char *pszFName ) 00304 { return GetFieldAsDouble( GetFieldIndex(pszFName) ); } 00305 const char *GetFieldAsString( const char *pszFName ) 00306 { return GetFieldAsString( GetFieldIndex(pszFName) ); } 00307 const int *GetFieldAsIntegerList( const char *pszFName, 00308 int *pnCount ) 00309 { return GetFieldAsIntegerList( GetFieldIndex(pszFName), 00310 pnCount ); } 00311 const double *GetFieldAsDoubleList( const char *pszFName, 00312 int *pnCount ) 00313 { return GetFieldAsDoubleList( GetFieldIndex(pszFName), 00314 pnCount ); } 00315 char **GetFieldAsStringList( const char *pszFName ) 00316 { return GetFieldAsStringList(GetFieldIndex(pszFName)); } 00317 00318 void SetField( int i, int nValue ); 00319 void SetField( int i, double dfValue ); 00320 void SetField( int i, const char * pszValue ); 00321 void SetField( int i, int nCount, int * panValues ); 00322 void SetField( int i, int nCount, double * padfValues ); 00323 void SetField( int i, char ** papszValues ); 00324 void SetField( int i, OGRField * puValue ); 00325 00326 void SetField( const char *pszFName, int nValue ) 00327 { SetField( GetFieldIndex(pszFName), nValue ); } 00328 void SetField( const char *pszFName, double dfValue ) 00329 { SetField( GetFieldIndex(pszFName), dfValue ); } 00330 void SetField( const char *pszFName, const char * pszValue) 00331 { SetField( GetFieldIndex(pszFName), pszValue ); } 00332 void SetField( const char *pszFName, int nCount, 00333 int * panValues ) 00334 { SetField(GetFieldIndex(pszFName),nCount,panValues);} 00335 void SetField( const char *pszFName, int nCount, 00336 double * padfValues ) 00337 {SetField(GetFieldIndex(pszFName),nCount,padfValues);} 00338 void SetField( const char *pszFName, char ** papszValues ) 00339 { SetField( GetFieldIndex(pszFName), papszValues); } 00340 void SetField( const char *pszFName, OGRField * puValue ) 00341 { SetField( GetFieldIndex(pszFName), puValue ); } 00342 00343 long GetFID() { return nFID; } 00344 virtual OGRErr SetFID( long nFID ); 00345 00346 void DumpReadable( FILE * ); 00347 00348 OGRErr SetFrom( OGRFeature *, int = TRUE); 00349 00350 OGRErr RemapFields( OGRFeatureDefn *poNewDefn, 00351 int *panRemapSource ); 00352 00353 virtual const char *GetStyleString(); 00354 virtual void SetStyleString(const char *); 00355 virtual void SetStyleTable(OGRStyleTable *poStyleTable); 00356 00357 static OGRFeature *CreateFeature( OGRFeatureDefn * ); 00358 static void DestroyFeature( OGRFeature * ); 00359 }; 00360 00361 /************************************************************************/ 00362 /* OGRFeatureQuery */ 00363 /************************************************************************/ 00364 00365 class OGRLayer; 00366 00367 class CPL_DLL OGRFeatureQuery 00368 { 00369 private: 00370 OGRFeatureDefn *poTargetDefn; 00371 void *pSWQExpr; 00372 00373 char **FieldCollector( void *, char ** ); 00374 00375 public: 00376 OGRFeatureQuery(); 00377 ~OGRFeatureQuery(); 00378 00379 OGRErr Compile( OGRFeatureDefn *, const char * ); 00380 int Evaluate( OGRFeature * ); 00381 00382 long *EvaluateAgainstIndices( OGRLayer *, OGRErr * ); 00383 00384 char **GetUsedFields(); 00385 00386 void *GetSWGExpr() { return pSWQExpr; } 00387 }; 00388 00389 #endif /* ndef _OGR_FEATURE_H_INCLUDED */

Generated on Thu Jul 29 19:47:50 2004 for OGR by doxygen 1.3.7