/***
思路:以源图层、目标图层的对应Feature,源图层、目标图层字段列表及字段地图列表为参数,逐一对每个Feature相应的字段进行赋值
步骤:
1.遍历目标图层与源图层所要进行属性拷贝的字段列表
2.通过字段名称查找源图层与目标图层中属性表中对应的字段索引
3.通过源图层索引查找该源图层的某个Feature中某个特定字段的值
4.将源图层某个Feature对应的字段值,通过更新图层索引赋值给更新图层Feature对应字段
*/
QgsFeature attributecopyclass::copyattributes(QgsFeature srcFeature,QgsFields *srcFields, QgsFeature targetFeature,QgsFields *targetFields,QMap<QString,QString> *fieldMap)
{
if(!targetFeature.isValid()||!srcFeature.isValid())return false;
int fieldSize = srcFeature.fields()->size();
if(fieldMap->size()>=1)
fieldSize = fieldMap->size();
targetFeature.initAttributes(fieldSize);
for(int i=0;i<fieldMap->count()/2;i++)
{
QString targetFld = fieldMap->value(QString::number(2*i+1));
QString srcField=fieldMap->value(QString::number(2*i));
if(targetFld.isNull()||targetFld.isEmpty())continue;
int srcFldIndx ;
int targetFldIndx;
QgsField targetField;
QVariant val;
srcFldIndx = srcFields->fieldNameIndex(srcField);
targetField = targetFields->field(targetFld);
targetFldIndx = targetFields->fieldNameIndex(targetField.name());
if(srcField.isNull()||srcField.isEmpty())
{
targetFeature.setAttribute(targetFldIndx,"");
}
else
{
val = srcFeature.attribute(srcFldIndx);
targetFeature.setAttribute(targetFldIndx,val);
}
}
return targetFeature;
}