int OGRFeatureDefn::IsSame( OGRFeatureDefn * poOtherFeatureDefn ) { if (strcmp(GetName(), poOtherFeatureDefn->GetName()) == 0 && GetFieldCount() == poOtherFeatureDefn->GetFieldCount() && GetGeomFieldCount() == poOtherFeatureDefn->GetGeomFieldCount()) { int i; for(i=0;i<nFieldCount;i++) { const OGRFieldDefn* poFldDefn = GetFieldDefn(i); const OGRFieldDefn* poOtherFldDefn = poOtherFeatureDefn->GetFieldDefn(i); if (!poFldDefn->IsSame(poOtherFldDefn)) { return FALSE; } } for(i=0;i<nGeomFieldCount;i++) { OGRGeomFieldDefn* poGFldDefn = GetGeomFieldDefn(i); OGRGeomFieldDefn* poOtherGFldDefn = poOtherFeatureDefn->GetGeomFieldDefn(i); if (!poGFldDefn->IsSame(poOtherGFldDefn)) { return FALSE; } } return TRUE; } return FALSE; }
void OGRFeatureDefn::SetGeomType( OGRwkbGeometryType eNewType ) { if( GetGeomFieldCount() > 0 ) { if( GetGeomFieldCount() == 1 && eNewType == wkbNone ) DeleteGeomFieldDefn(0); else GetGeomFieldDefn(0)->SetType(eNewType); } else if( eNewType != wkbNone ) { OGRGeomFieldDefn oGeomFieldDefn( "", eNewType ); AddGeomFieldDefn(&oGeomFieldDefn); } }
/** * \fn OGRwkbGeometryType OGRFeatureDefn::GetGeomType(); * * \brief Fetch the geometry base type. * * Note that some drivers are unable to determine a specific geometry * type for a layer, in which case wkbUnknown is returned. A value of * wkbNone indicates no geometry is available for the layer at all. * Many drivers do not properly mark the geometry * type as 25D even if some or all geometries are in fact 25D. A few (broken) * drivers return wkbPolygon for layers that also include wkbMultiPolygon. * * Starting with GDAL 1.11, this method returns GetGeomFieldDefn(0)->GetType(). * * This method is the same as the C function OGR_FD_GetGeomType(). * * @return the base type for all geometry related to this definition. */ OGRwkbGeometryType OGRFeatureDefn::GetGeomType() { if( GetGeomFieldCount() == 0 ) return wkbNone; OGRwkbGeometryType eType = GetGeomFieldDefn(0)->GetType(); if( eType == (wkbUnknown | wkb25DBitInternalUse) && CSLTestBoolean(CPLGetConfigOption("QGIS_HACK", "NO")) ) eType = wkbUnknown; return eType; }
void OGRFeatureDefn::AddGeomFieldDefn( OGRGeomFieldDefn * poNewDefn, int bCopy ) { GetGeomFieldCount(); papoGeomFieldDefn = (OGRGeomFieldDefn **) CPLRealloc( papoGeomFieldDefn, sizeof(void*)*(nGeomFieldCount+1) ); papoGeomFieldDefn[nGeomFieldCount] = (bCopy) ? new OGRGeomFieldDefn( poNewDefn ) : poNewDefn; nGeomFieldCount++; }
OGRGeomFieldDefn *OGRFeatureDefn::GetGeomFieldDefn( int iGeomField ) { if( iGeomField < 0 || iGeomField >= GetGeomFieldCount() ) { CPLError(CE_Failure, CPLE_AppDefined, "Invalid index : %d", iGeomField); return NULL; } return papoGeomFieldDefn[iGeomField]; }
int OGRFeatureDefn::GetGeomFieldIndex( const char * pszGeomFieldName ) { GetGeomFieldCount(); for( int i = 0; i < nGeomFieldCount; i++ ) { if( EQUAL(pszGeomFieldName, GetGeomFieldDefn(i)->GetNameRef() ) ) return i; } return -1; }
OGRErr OGRFeatureDefn::DeleteGeomFieldDefn( int iGeomField ) { if (iGeomField < 0 || iGeomField >= GetGeomFieldCount()) return OGRERR_FAILURE; delete papoGeomFieldDefn[iGeomField]; papoGeomFieldDefn[iGeomField] = NULL; if (iGeomField < nGeomFieldCount - 1) { memmove(papoGeomFieldDefn + iGeomField, papoGeomFieldDefn + iGeomField + 1, (nGeomFieldCount - 1 - iGeomField) * sizeof(void*)); } nGeomFieldCount--; return OGRERR_NONE; }
OGRFeatureDefn *OGRFeatureDefn::Clone() { int i; OGRFeatureDefn *poCopy; poCopy = new OGRFeatureDefn( GetName() ); GetFieldCount(); for( i = 0; i < nFieldCount; i++ ) poCopy->AddFieldDefn( GetFieldDefn( i ) ); /* There is a default geometry field created at OGRFeatureDefn instanciation */ poCopy->DeleteGeomFieldDefn(0); GetGeomFieldCount(); for( i = 0; i < nGeomFieldCount; i++ ) poCopy->AddGeomFieldDefn( GetGeomFieldDefn( i ) ); return poCopy; }
void OGRFeatureDefn::SetGeometryIgnored( int bIgnore ) { if( GetGeomFieldCount() > 0 ) GetGeomFieldDefn(0)->SetIgnored(bIgnore); }
int OGRFeatureDefn::IsGeometryIgnored() { if( GetGeomFieldCount() == 0 ) return FALSE; return GetGeomFieldDefn(0)->IsIgnored(); }
/** * \fn OGRwkbGeometryType OGRFeatureDefn::GetGeomType(); * * \brief Fetch the geometry base type. * * Note that some drivers are unable to determine a specific geometry * type for a layer, in which case wkbUnknown is returned. A value of * wkbNone indicates no geometry is available for the layer at all. * Many drivers do not properly mark the geometry * type as 25D even if some or all geometries are in fact 25D. A few (broken) * drivers return wkbPolygon for layers that also include wkbMultiPolygon. * * Starting with GDAL 1.11, this method returns GetGeomFieldDefn(0)->GetType(). * * This method is the same as the C function OGR_FD_GetGeomType(). * * @return the base type for all geometry related to this definition. */ OGRwkbGeometryType OGRFeatureDefn::GetGeomType() { if( GetGeomFieldCount() == 0 ) return wkbNone; return GetGeomFieldDefn(0)->GetType(); }