void AddGeomField(const char* psName, OGRwkbGeometryType geomType) { OGRGeomFieldDefn fieldDef(psName, geomType); //oGFld.SetSpatialRef(geomlayer->GetSpatialRef()); poTableDefn->AddGeomFieldDefn(&fieldDef); CPLDebug( "OGR_ILI", "Adding geometry field '%s' to Class %s", psName, GetName()); }
OGRErr OGRLayerWithTransaction::CreateGeomField( OGRGeomFieldDefn *poField, int bApproxOK ) { if( !m_poDecoratedLayer ) return OGRERR_FAILURE; int nFields = m_poDecoratedLayer->GetLayerDefn()->GetGeomFieldCount(); OGRErr eErr = m_poDecoratedLayer->CreateGeomField(poField, bApproxOK); if( m_poFeatureDefn && eErr == OGRERR_NONE && m_poDecoratedLayer->GetLayerDefn()->GetGeomFieldCount() == nFields + 1 ) { m_poFeatureDefn->AddGeomFieldDefn( m_poDecoratedLayer->GetLayerDefn()->GetGeomFieldDefn(nFields) ); } return eErr; }
// Add additional Geometry table for Interlis 1 void AddGeomTable(CPLString layerName, const char* psFieldName, OGRwkbGeometryType eType, bool bRefTIDField = false) { OGRFeatureDefn* poGeomTableDefn = new OGRFeatureDefn(layerName); OGRFieldDefn fieldDef("_TID", OFTString); poGeomTableDefn->AddFieldDefn(&fieldDef); if (bRefTIDField) { OGRFieldDefn fieldDefRef("_RefTID", OFTString); poGeomTableDefn->AddFieldDefn(&fieldDefRef); } poGeomTableDefn->DeleteGeomFieldDefn(0); OGRGeomFieldDefn fieldDefGeom(psFieldName, eType); poGeomTableDefn->AddGeomFieldDefn(&fieldDefGeom); CPLDebug( "OGR_ILI", "Adding geometry table %s for field %s", poGeomTableDefn->GetName(), psFieldName); poGeomFieldInfos[psFieldName].geomTable = poGeomTableDefn; }
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; }