?? ogrfeature.cpp
字號:
OGRGeometry *OGRFeature::StealGeometry()
{
OGRGeometry *poReturn = poGeometry;
poGeometry = NULL;
return poReturn;
}
/************************************************************************/
/* GetGeometryRef() */
/************************************************************************/
/**
* \fn OGRGeometry *OGRFeature::GetGeometryRef();
*
* Fetch pointer to feature geometry.
*
* This method is the same as the C function OGR_F_GetGeometryRef().
*
* @return pointer to internal feature geometry. This object should
* not be modified.
*/
/************************************************************************/
/* OGR_F_GetGeometryRef() */
/************************************************************************/
/**
* Fetch an handle to feature geometry.
*
* This function is the same as the C++ method OGRFeature::GetGeometryRef().
*
* @param hFeat handle to the feature to get geometry from.
* @return an handle to internal feature geometry. This object should
* not be modified.
*/
OGRGeometryH OGR_F_GetGeometryRef( OGRFeatureH hFeat )
{
return ((OGRFeature *) hFeat)->GetGeometryRef();
}
/************************************************************************/
/* Clone() */
/************************************************************************/
/**
* Duplicate feature.
*
* The newly created feature is owned by the caller, and will have it's own
* reference to the OGRFeatureDefn.
*
* This method is the same as the C function OGR_F_Clone().
*
* @return new feature, exactly matching this feature.
*/
OGRFeature *OGRFeature::Clone()
{
OGRFeature *poNew = new OGRFeature( poDefn );
poNew->SetGeometry( poGeometry );
for( int i = 0; i < poDefn->GetFieldCount(); i++ )
{
poNew->SetField( i, pauFields + i );
}
if( GetStyleString() != NULL )
poNew->SetStyleString(GetStyleString());
poNew->SetFID( GetFID() );
return poNew;
}
/************************************************************************/
/* OGR_F_Clone() */
/************************************************************************/
/**
* Duplicate feature.
*
* The newly created feature is owned by the caller, and will have it's own
* reference to the OGRFeatureDefn.
*
* This function is the same as the C++ method OGRFeature::Clone().
*
* @param hFeat handle to the feature to clone.
* @return an handle to the new feature, exactly matching this feature.
*/
OGRFeatureH OGR_F_Clone( OGRFeatureH hFeat )
{
return (OGRFeatureH) ((OGRFeature *) hFeat)->Clone();
}
/************************************************************************/
/* GetFieldCount() */
/************************************************************************/
/**
* \fn int OGRFeature::GetFieldCount();
*
* Fetch number of fields on this feature. This will always be the same
* as the field count for the OGRFeatureDefn.
*
* This method is the same as the C function OGR_F_GetFieldCount().
*
* @return count of fields.
*/
/************************************************************************/
/* OGR_F_GetFieldCount() */
/************************************************************************/
/**
* Fetch number of fields on this feature. This will always be the same
* as the field count for the OGRFeatureDefn.
*
* This function is the same as the C++ method OGRFeature::GetFieldCount().
*
* @param hFeat handle to the feature to get the fields count from.
* @return count of fields.
*/
int OGR_F_GetFieldCount( OGRFeatureH hFeat )
{
return ((OGRFeature *) hFeat)->GetFieldCount();
}
/************************************************************************/
/* GetFieldDefnRef() */
/************************************************************************/
/**
* \fn OGRFieldDefn *OGRFeature::GetFieldDefnRef( int iField );
*
* Fetch definition for this field.
*
* This method is the same as the C function OGR_F_GetFieldDefnRef().
*
* @param iField the field to fetch, from 0 to GetFieldCount()-1.
*
* @return the field definition (from the OGRFeatureDefn). This is an
* internal reference, and should not be deleted or modified.
*/
/************************************************************************/
/* OGR_F_GetFieldDefnRef() */
/************************************************************************/
/**
* Fetch definition for this field.
*
* This function is the same as the C++ method OGRFeature::GetFieldDefnRef().
*
* @param hFeat handle to the feature on which the field is found.
* @param i the field to fetch, from 0 to GetFieldCount()-1.
*
* @return an handle to the field definition (from the OGRFeatureDefn).
* This is an internal reference, and should not be deleted or modified.
*/
OGRFieldDefnH OGR_F_GetFieldDefnRef( OGRFeatureH hFeat, int i )
{
return (OGRFieldDefnH) ((OGRFeature *) hFeat)->GetFieldDefnRef(i);
}
/************************************************************************/
/* GetFieldIndex() */
/************************************************************************/
/**
* \fn int OGRFeature::GetFieldIndex( const char * pszName );
*
* Fetch the field index given field name.
*
* This is a cover for the OGRFeatureDefn::GetFieldIndex() method.
*
* This method is the same as the C function OGR_F_GetFieldIndex().
*
* @param pszName the name of the field to search for.
*
* @return the field index, or -1 if no matching field is found.
*/
/************************************************************************/
/* OGR_F_GetFieldIndex() */
/************************************************************************/
/**
* Fetch the field index given field name.
*
* This is a cover for the OGRFeatureDefn::GetFieldIndex() method.
*
* This function is the same as the C++ method OGRFeature::GetFieldIndex().
*
* @param hFeat handle to the feature on which the field is found.
* @param pszName the name of the field to search for.
*
* @return the field index, or -1 if no matching field is found.
*/
int OGR_F_GetFieldIndex( OGRFeatureH hFeat, const char *pszName )
{
return ((OGRFeature *) hFeat)->GetFieldIndex( pszName );
}
/************************************************************************/
/* IsFieldSet() */
/************************************************************************/
/**
* \fn int OGRFeature::IsFieldSet( int iField );
*
* Test if a field has ever been assigned a value or not.
*
* This method is the same as the C function OGR_F_IsFieldSet().
*
* @param iField the field to test.
*
* @return TRUE if the field has been set, otherwise false.
*/
/************************************************************************/
/* OGR_F_IsFieldSet() */
/************************************************************************/
/**
* Test if a field has ever been assigned a value or not.
*
* This function is the same as the C++ method OGRFeature::IsFieldSet().
*
* @param hFeat handle to the feature on which the field is.
* @param iField the field to test.
*
* @return TRUE if the field has been set, otherwise false.
*/
int OGR_F_IsFieldSet( OGRFeatureH hFeat, int iField )
{
return ((OGRFeature *)hFeat)->IsFieldSet( iField );
}
/************************************************************************/
/* UnsetField() */
/************************************************************************/
/**
* Clear a field, marking it as unset.
*
* This method is the same as the C function OGR_F_UnsetField().
*
* @param iField the field to unset.
*/
void OGRFeature::UnsetField( int iField )
{
OGRFieldDefn *poFDefn = poDefn->GetFieldDefn( iField );
CPLAssert( poFDefn != NULL || iField == -1 );
if( poFDefn == NULL || !IsFieldSet(iField) )
return;
switch( poFDefn->GetType() )
{
case OFTRealList:
case OFTIntegerList:
CPLFree( pauFields[iField].IntegerList.paList );
break;
case OFTStringList:
CSLDestroy( pauFields[iField].StringList.paList );
break;
case OFTString:
CPLFree( pauFields[iField].String );
break;
case OFTBinary:
CPLFree( pauFields[iField].Binary.paData );
break;
default:
break;
}
pauFields[iField].Set.nMarker1 = OGRUnsetMarker;
pauFields[iField].Set.nMarker2 = OGRUnsetMarker;
}
/************************************************************************/
/* OGR_F_UnsetField() */
/************************************************************************/
/**
* Clear a field, marking it as unset.
*
* This function is the same as the C++ method OGRFeature::UnsetField().
*
* @param hFeat handle to the feature on which the field is.
* @param iField the field to unset.
*/
void OGR_F_UnsetField( OGRFeatureH hFeat, int iField )
{
((OGRFeature *) hFeat)->UnsetField( iField );
}
/************************************************************************/
/* GetRawFieldRef() */
/************************************************************************/
/**
* \fn OGRField *OGRFeature::GetRawFieldRef( int iField );
*
* Fetch a pointer to the internal field value given the index.
*
* This method is the same as the C function OGR_F_GetRawFieldRef().
*
* @param iField the field to fetch, from 0 to GetFieldCount()-1.
*
* @return the returned pointer is to an internal data structure, and should
* not be freed, or modified.
*/
/************************************************************************/
/* OGR_F_GetRawFieldRef() */
/************************************************************************/
/**
* Fetch an handle to the internal field value given the index.
*
* This function is the same as the C++ method OGRFeature::GetRawFieldRef().
*
* @param hFeat handle to the feature on which field is found.
* @param iField the field to fetch, from 0 to GetFieldCount()-1.
*
* @return the returned handle is to an internal data structure, and should
* not be freed, or modified.
*/
OGRField *OGR_F_GetRawFieldRef( OGRFeatureH hFeat, int iField )
{
return ((OGRFeature *)hFeat)->GetRawFieldRef( iField );
}
/************************************************************************/
/* GetFieldAsInteger() */
/************************************************************************/
/**
* Fetch field value as integer.
*
* OFTString features will be translated using atoi(). OFTReal fields
* will be cast to integer. Other field types, or errors will result in
* a return value of zero.
*
* This method is the same as the C function OGR_F_GetFieldAsInteger().
*
* @param iField the field to fetch, from 0 to GetFieldCount()-1.
*
* @return the field value.
*/
int OGRFeature::GetFieldAsInteger( int iField )
{
int iSpecialField = iField - poDefn->GetFieldCount();
if (iSpecialField >= 0)
{
// special field value accessors
switch (iSpecialField)
{
case SPF_FID:
return GetFID();
default:
return 0;
}
}
OGRFieldDefn *poFDefn = poDefn->GetFieldDefn( iField );
CPLAssert( poFDefn != NULL || iField == -1 );
if( poFDefn == NULL )
return 0;
if( !IsFieldSet(iField) )
return 0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -