OGRErr OGRShapeLayer::SetFeature( OGRFeature *poFeature ) { if( !bUpdateAccess ) { CPLError( CE_Failure, CPLE_AppDefined, "The SetFeature() operation is not permitted on a read-only shapefile." ); return OGRERR_FAILURE; } bHeaderDirty = TRUE; return SHPWriteOGRFeature( hSHP, hDBF, poFeatureDefn, poFeature ); }
OGRErr OGRShapeLayer::CreateFeature( OGRFeature *poFeature ) { OGRErr eErr; if( !bUpdateAccess ) { CPLError( CE_Failure, CPLE_AppDefined, "The CreateFeature() operation is not permitted on a read-only shapefile." ); return OGRERR_FAILURE; } bHeaderDirty = TRUE; if( CheckForQIX() ) DropSpatialIndex(); poFeature->SetFID( OGRNullFID ); if( nTotalShapeCount == 0 && eRequestedGeomType == wkbUnknown && poFeature->GetGeometryRef() != NULL ) { OGRGeometry *poGeom = poFeature->GetGeometryRef(); int nShapeType; switch( poGeom->getGeometryType() ) { case wkbPoint: nShapeType = SHPT_POINT; eRequestedGeomType = wkbPoint; break; case wkbPoint25D: nShapeType = SHPT_POINTZ; eRequestedGeomType = wkbPoint25D; break; case wkbMultiPoint: nShapeType = SHPT_MULTIPOINT; eRequestedGeomType = wkbMultiPoint; break; case wkbMultiPoint25D: nShapeType = SHPT_MULTIPOINTZ; eRequestedGeomType = wkbMultiPoint25D; break; case wkbLineString: case wkbMultiLineString: nShapeType = SHPT_ARC; eRequestedGeomType = wkbLineString; break; case wkbLineString25D: case wkbMultiLineString25D: nShapeType = SHPT_ARCZ; eRequestedGeomType = wkbLineString25D; break; case wkbPolygon: case wkbMultiPolygon: nShapeType = SHPT_POLYGON; eRequestedGeomType = wkbPolygon; break; case wkbPolygon25D: case wkbMultiPolygon25D: nShapeType = SHPT_POLYGONZ; eRequestedGeomType = wkbPolygon25D; break; default: nShapeType = -1; break; } if( nShapeType != -1 ) { ResetGeomType( nShapeType ); } } eErr = SHPWriteOGRFeature( hSHP, hDBF, poFeatureDefn, poFeature ); if( hSHP != NULL ) nTotalShapeCount = hSHP->nRecords; else nTotalShapeCount = hDBF->nRecords; return eErr; }