首页 / 浏览问题 / 组件GIS / 问题详情
如何从udb的三维数据集中提取三维属性并保存成属性数据集?
11EXP 2020年01月13日

iObjects9D.net开发,程序要实现以下手动操作:数据集浏览属性表,提取三维模型属性,保存为属性数据集,如下图所示。请问有无提取三维模型属性接口和保存属性表为属性集的接口?多谢

1个回答

您好,这个是新建一个属性表数据集,然后遍历三维数据集里的recordset传值进去的
2,432EXP 2020年01月13日
怎么提取三维属性:高程?
有相关例子么?
你好,例子是没有的,高程这些其实是获取recordset里的几何对象geometry,把它as Geomodel3D,获取Geomodel3D里的Z值

我新建数据集,新增属性,没报错,还没添加成功,属性字段就默认的两个,好奇怪!没保存?

范例有关于字段管理和修改字段的 安装目录\SampleCode\Data\FieldInfoManage\FieldInfoManage.csproj, 安装目录\SampleCode\Data\RecordsetManage\RecordsetManage.csproj 把你的所有步骤拆开做一下

新增字段放一个button,修改值放一个button,分别点击,看哪步没获取到,对照范例修改
放到button里确实可以了!但是有些字段不能添加,提示这个:{"不能添加以“sm”开头的字段\r\n参数名: fieldInfo.Name"},还有系统字段的值SmID,SmUserID这些值我怎么拷贝到新的数据集中?
按照你说的把添加属性放在一个button中执行,确实添加新属性成功了,但是随后再另一个button中修改属性值,缺返回false:

            Object[] o2 = recordset.GetValues();
            bool isSuc1 = recordset.SetFieldValue("图层名称", "测试修改图层名称");
            //刷新记录集
            recordset.Update();

            //对新字段赋值
            bool isSuc2 = recordset.SetFieldValue("新字段_yf2", "图层名称_YF");
            //刷新记录集
            recordset.Update();
你这个recordset重新获取一下试试呢
对于有数据的数据集能修改成功了! 但我新建的空数据集,再添加好属性后,准备给对应的属性内容赋值时,一致报错:System.ArgumentException:“Exception of type 'System.ArgumentException' was thrown.
Parameter name: name”;是不是由于空数据集添加数据,直接赋值有问题?

具体代码:

            //将已有的数据集内容复制到新建的数据集中
            Recordset newrecordset = newDatasetVector.GetRecordset(false, CursorType.Dynamic);//新建的空数据集
            newrecordset.MoveFirst();
            srcRecordset.MoveFirst();//之前已经有的数据集记录
            for (int i = 0; i < srcRecordset.RecordCount; i++)
            {
                FieldInfos fieldInfos = srcRecordset.GetFieldInfos();
                for (int j = 0; j < fieldInfos.Count; j++)
                {

                    if (fieldInfos[j].IsSystemField)
                        continue;

                    string fieldName = fieldInfos[j].Name;
                    Object content = srcRecordset.GetFieldValue(fieldName);
                    string aimFiledName = fieldName;
                    if (fieldName.StartsWith("Sm") && fieldName != "SmID" && fieldName != "SmUserID")
                    {

                        aimFiledName = "x" + aimFiledName;

                    }
                    newrecordset.Edit();
                    bool isSuc=newrecordset.SetFieldValue(aimFiledName, content);
                    newrecordset.Update();
                }

                newrecordset.MoveNext();
                srcRecordset.MoveNext();

            }

            newrecordset.Update();
必须要有对象才能赋值,空的肯定没法赋值呀
怎么给对象赋值?我只会添加所有属性字段,正在找赋值的方法。多谢
就是添加几何对象,Recordset.AddNew
...