00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _OGR_FEATURE_H_INCLUDED
00031 #define _OGR_FEATURE_H_INCLUDED
00032
00033 #include "ogr_geometry.h"
00034 #include "ogr_featurestyle.h"
00035
00042
00043
00044
00045
00050 class CPL_DLL OGRFieldDefn
00051 {
00052 private:
00053 char *pszName;
00054 OGRFieldType eType;
00055 OGRJustification eJustify;
00056 int nWidth;
00057 int nPrecision;
00058 OGRField uDefault;
00059
00060 void Initialize( const char *, OGRFieldType );
00061
00062 public:
00063 OGRFieldDefn( const char *, OGRFieldType );
00064 OGRFieldDefn( OGRFieldDefn * );
00065 ~OGRFieldDefn();
00066
00067 void SetName( const char * );
00068 const char *GetNameRef() { return pszName; }
00069
00070 OGRFieldType GetType() { return eType; }
00071 void SetType( OGRFieldType eTypeIn ) { eType = eTypeIn;}
00072 static const char *GetFieldTypeName( OGRFieldType );
00073
00074 OGRJustification GetJustify() { return eJustify; }
00075 void SetJustify( OGRJustification eJustifyIn )
00076 { eJustify = eJustifyIn; }
00077
00078 int GetWidth() { return nWidth; }
00079 void SetWidth( int nWidthIn ) { nWidth = MAX(0,nWidthIn); }
00080
00081 int GetPrecision() { return nPrecision; }
00082 void SetPrecision( int nPrecisionIn )
00083 { nPrecision = nPrecisionIn; }
00084
00085 void Set( const char *, OGRFieldType, int = 0, int = 0,
00086 OGRJustification = OJUndefined );
00087
00088 void SetDefault( const OGRField * );
00089 const OGRField *GetDefaultRef() { return &uDefault; }
00090 };
00091
00092
00093
00094
00095
00112 class CPL_DLL OGRFeatureDefn
00113 {
00114 private:
00115 int nRefCount;
00116
00117 int nFieldCount;
00118 OGRFieldDefn **papoFieldDefn;
00119
00120 OGRwkbGeometryType eGeomType;
00121
00122 char *pszFeatureClassName;
00123
00124 public:
00125 OGRFeatureDefn( const char * pszName = NULL );
00126 virtual ~OGRFeatureDefn();
00127
00128 const char *GetName() { return pszFeatureClassName; }
00129
00130 int GetFieldCount() { return nFieldCount; }
00131 OGRFieldDefn *GetFieldDefn( int i );
00132 int GetFieldIndex( const char * );
00133
00134 void AddFieldDefn( OGRFieldDefn * );
00135
00136 OGRwkbGeometryType GetGeomType() { return eGeomType; }
00137 void SetGeomType( OGRwkbGeometryType );
00138
00139 OGRFeatureDefn *Clone();
00140
00141 int Reference() { return ++nRefCount; }
00142 int Dereference() { return --nRefCount; }
00143 int GetReferenceCount() { return nRefCount; }
00144 void Release();
00145
00146 static OGRFeatureDefn *CreateFeatureDefn( const char *pszName = NULL );
00147 static void DestroyFeatureDefn( OGRFeatureDefn * );
00148 };
00149
00150
00151
00152
00153
00158 class CPL_DLL OGRFeature
00159 {
00160 private:
00161
00162 long nFID;
00163 OGRFeatureDefn *poDefn;
00164 OGRGeometry *poGeometry;
00165 OGRField *pauFields;
00166
00167 protected:
00168 char * m_pszStyleString;
00169 OGRStyleTable *m_poStyleTable;
00170 char * m_pszTmpFieldValue;
00171
00172 public:
00173 OGRFeature( OGRFeatureDefn * );
00174 virtual ~OGRFeature();
00175
00176 OGRFeatureDefn *GetDefnRef() { return poDefn; }
00177
00178 OGRErr SetGeometryDirectly( OGRGeometry * );
00179 OGRErr SetGeometry( OGRGeometry * );
00180 OGRGeometry *GetGeometryRef() { return poGeometry; }
00181 OGRGeometry *StealGeometry();
00182
00183 OGRFeature *Clone();
00184 virtual OGRBoolean Equal( OGRFeature * poFeature );
00185
00186 int GetFieldCount() { return poDefn->GetFieldCount(); }
00187 OGRFieldDefn *GetFieldDefnRef( int iField )
00188 { return poDefn->GetFieldDefn(iField); }
00189 int GetFieldIndex( const char * pszName)
00190 { return poDefn->GetFieldIndex(pszName);}
00191
00192 int IsFieldSet( int iField ) const
00193 { return
00194 pauFields[iField].Set.nMarker1 != OGRUnsetMarker
00195 || pauFields[iField].Set.nMarker2 != OGRUnsetMarker;
00196 }
00197
00198 void UnsetField( int iField );
00199
00200 OGRField *GetRawFieldRef( int i ) { return pauFields + i; }
00201
00202 int GetFieldAsInteger( int i );
00203 double GetFieldAsDouble( int i );
00204 const char *GetFieldAsString( int i );
00205 const int *GetFieldAsIntegerList( int i, int *pnCount );
00206 const double *GetFieldAsDoubleList( int i, int *pnCount );
00207 char **GetFieldAsStringList( int i ) const;
00208 GByte *GetFieldAsBinary( int i, int *pnCount );
00209 int GetFieldAsDateTime( int i,
00210 int *pnYear, int *pnMonth, int *pnDay,
00211 int *pnHour, int *pnMinute, int *pnSecond,
00212 int *pnTZFlag );
00213
00214 int GetFieldAsInteger( const char *pszFName )
00215 { return GetFieldAsInteger( GetFieldIndex(pszFName) ); }
00216 double GetFieldAsDouble( const char *pszFName )
00217 { return GetFieldAsDouble( GetFieldIndex(pszFName) ); }
00218 const char *GetFieldAsString( const char *pszFName )
00219 { return GetFieldAsString( GetFieldIndex(pszFName) ); }
00220 const int *GetFieldAsIntegerList( const char *pszFName,
00221 int *pnCount )
00222 { return GetFieldAsIntegerList( GetFieldIndex(pszFName),
00223 pnCount ); }
00224 const double *GetFieldAsDoubleList( const char *pszFName,
00225 int *pnCount )
00226 { return GetFieldAsDoubleList( GetFieldIndex(pszFName),
00227 pnCount ); }
00228 char **GetFieldAsStringList( const char *pszFName )
00229 { return GetFieldAsStringList(GetFieldIndex(pszFName)); }
00230
00231 void SetField( int i, int nValue );
00232 void SetField( int i, double dfValue );
00233 void SetField( int i, const char * pszValue );
00234 void SetField( int i, int nCount, int * panValues );
00235 void SetField( int i, int nCount, double * padfValues );
00236 void SetField( int i, char ** papszValues );
00237 void SetField( int i, OGRField * puValue );
00238 void SetField( int i, int nCount, GByte * pabyBinary );
00239 void SetField( int i, int nYear, int nMonth, int nDay,
00240 int nHour=0, int nMinute=0, int nSecond=0,
00241 int nTZFlag = 0 );
00242
00243 void SetField( const char *pszFName, int nValue )
00244 { SetField( GetFieldIndex(pszFName), nValue ); }
00245 void SetField( const char *pszFName, double dfValue )
00246 { SetField( GetFieldIndex(pszFName), dfValue ); }
00247 void SetField( const char *pszFName, const char * pszValue)
00248 { SetField( GetFieldIndex(pszFName), pszValue ); }
00249 void SetField( const char *pszFName, int nCount,
00250 int * panValues )
00251 { SetField(GetFieldIndex(pszFName),nCount,panValues);}
00252 void SetField( const char *pszFName, int nCount,
00253 double * padfValues )
00254 {SetField(GetFieldIndex(pszFName),nCount,padfValues);}
00255 void SetField( const char *pszFName, char ** papszValues )
00256 { SetField( GetFieldIndex(pszFName), papszValues); }
00257 void SetField( const char *pszFName, OGRField * puValue )
00258 { SetField( GetFieldIndex(pszFName), puValue ); }
00259 void SetField( const char *pszFName,
00260 int nYear, int nMonth, int nDay,
00261 int nHour=0, int nMinute=0, int nSecond=0,
00262 int nTZFlag = 0 )
00263 { SetField( GetFieldIndex(pszFName),
00264 nYear, nMonth, nDay,
00265 nHour, nMinute, nSecond, nTZFlag ); }
00266
00267 long GetFID() { return nFID; }
00268 virtual OGRErr SetFID( long nFID );
00269
00270 void DumpReadable( FILE * );
00271
00272 OGRErr SetFrom( OGRFeature *, int = TRUE);
00273
00274 OGRErr RemapFields( OGRFeatureDefn *poNewDefn,
00275 int *panRemapSource );
00276
00277 virtual const char *GetStyleString();
00278 virtual void SetStyleString( const char * );
00279 virtual void SetStyleStringDirectly( char * );
00280 virtual OGRStyleTable *GetStyleTable() { return m_poStyleTable; }
00281 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
00282 virtual void SetStyleTableDirectly(OGRStyleTable *poStyleTable)
00283 { if ( m_poStyleTable ) delete m_poStyleTable;
00284 m_poStyleTable = poStyleTable; }
00285
00286 static OGRFeature *CreateFeature( OGRFeatureDefn * );
00287 static void DestroyFeature( OGRFeature * );
00288 };
00289
00290
00291
00292
00293
00294 class OGRLayer;
00295
00296 class CPL_DLL OGRFeatureQuery
00297 {
00298 private:
00299 OGRFeatureDefn *poTargetDefn;
00300 void *pSWQExpr;
00301
00302 char **FieldCollector( void *, char ** );
00303
00304 public:
00305 OGRFeatureQuery();
00306 ~OGRFeatureQuery();
00307
00308 OGRErr Compile( OGRFeatureDefn *, const char * );
00309 int Evaluate( OGRFeature * );
00310
00311 long *EvaluateAgainstIndices( OGRLayer *, OGRErr * );
00312
00313 char **GetUsedFields();
00314
00315 void *GetSWGExpr() { return pSWQExpr; }
00316 };
00317
00318 #endif