基于开源C++的QGIS二次开发学习(一)——属性拷贝
2017-08-26 13:37
435 查看
//拷贝属性字段 /*** 思路:以源图层、目标图层的对应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); /*QList<QString> srcFieldsList = fieldMap->keys();*/ //1,循环用户配置的字段信息 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; }
相关文章推荐
- QGis二次开发基础 -- 属性识别工具的实现
- 基于jpress二次开发的H5商城(已开源)
- shopnc b2b2c 新版多用户商城系统源码基于33hao,全开源可二次开发,带测试数据
- MYSQL的简单封装,学习基于托管的C++开发
- 搭建基于SSM的分布式电子商城的框架开源方便大家二次开发(已解决跨域问题)
- 【C/C++开发】值得学习的C语言开源项目
- QGis二次开发基础 -- 根据属性查询要素
- php开源项目学习二次开发的计划
- 基于开源项目二次开发之版本控制实践
- QGis二次开发基础 -- 矢量图层属性图表显示
- 基于Skyline的TerraExplorer6.1.1如何通过二次开发实现矢量图层的空间查询和属性查询
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
- QGis二次开发基础 -- 属性表格
- 基于jpress二次开发的H5商城(已开源)
- 推荐一个开源基于JavaScript和Openlayers开发的webgis二次开发控件,并赠送电子和卫星影像地图
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
- 开源资源列表 用于二次开发和学习使用
- Ajax - JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子
- 基于反射技术实现 Bean 属性拷贝 copyProperties
- 基于.Net的mapinfo二次开发