首页 / 浏览问题 / 组件GIS / 问题详情
如何同时添加对象自带的非系统字段和值?
11EXP 2018年06月29日
如题,A数据集转为记录集后取得某个几何对象,向B数据集的记录集中添加该对象,使用AddNew方法,对象添加成果,但没有A数据集自建的字段和值。采用getFeature方法获取特征要素,再使用getGeometry方法获取几何对象,添加后仍然没有属性字段和值。请问应该如何操作才能获取特征要素,并在添加几何对象时同时添加信息?

1个回答

您好!您要判断两个数据集的字段值是否一致,如果不一致,在后面追加该字段值的属性信息。部分代码如下:

// 获取两个数据集
            DatasetVector dataset_world = workspace.Datasources[0].Datasets["World"] as DatasetVector;
            DatasetVector dataset = workspace.Datasources[0].Datasets["Ocean"] as DatasetVector;

            // 得到“Example”对应的所有记录集以及“World”中 SmID=1 的记录
            Recordset recordset = dataset.GetRecordset(false, CursorType.Dynamic);
            Recordset recordset_world = dataset_world.Query("SmID=2", CursorType.Static);

            // 将记录位置移到第一位
            recordset.MoveFirst();
            string strfieldType;
            
            if (recordset.FieldCount < recordset_world.FieldCount)
            {
                for (int i = 0; i < recordset_world.FieldCount; i++)
                {
                   
                    FieldInfo fieldInfo = new FieldInfo();
                    fieldInfo.Name = recordset_world.GetFieldInfos()[i].Name;
                    fieldInfo.DefaultValue = recordset_world.GetValues()[i].ToString();
                    strfieldType = fieldInfo.Type.ToString ();
                    switch (strfieldType)
                    {
                        case "整型":
                            fieldInfo.Type = FieldType.Int32;
                            break;
                        case "双精度":
                            fieldInfo.Type = FieldType.Double;
                            break;
                        case "单精度":
                            fieldInfo.Type = FieldType.Single;
                            break;
                        case "字符型":
                            fieldInfo.Type = FieldType.Char;
                            break;
                        case "文本型":
                            fieldInfo.Type = FieldType.Text;
                            break;
                    }
                    if (i < recordset.FieldCount)
                    {
                        if (fieldInfo.Name != dataset.FieldInfos[i].Name)
                        {
                            dataset.FieldInfos.Add(fieldInfo);
                        }
                    }
                    else
                    {
                        dataset.FieldInfos.Add(fieldInfo);
                    }
                        
                   
                }
            }
            recordset.MoveFirst();
            // 将“World”中 SmID=1 的记录添加到 recordset 中并提交
            Geometry geometry = recordset_world.GetGeometry();
            recordset.AddNew(geometry);
            recordset.Update();

            // 关闭记录集,释放几何对象、记录集
            recordset.Close();
            geometry.Dispose();
            recordset.Dispose();
            recordset_world.Dispose();
3,352EXP 2018年06月29日
您的这个示例代码只能生成一个二维点,并且只能添加Excel中的一条记录,如果有多条记录,那么就会出现字段信息重复的问题。

你的思路是在新建字段的同时把其它非系统属性信息也添加进去了,如果把新建字段和添加属性信息分开来做,久需要把相应的数据集打开关系两次,这样时间消耗会很大。

我现在有几十万条Excel记录,想达到的效果是:在遍历一条Excel数据时,先读取其坐标信息生成二维点,然后把该条记录的其它信息也对应添加到生成的二维点中,要怎么做呢?
您好!我上面的代码只是为您们提供一个思路,具体的还得您自己思考如何高效完成。如果您有几十万条Excel记录,建议您使用批量更新,谢谢!
...