首页 / 浏览问题 / 组件GIS / 问题详情
二维转三维效率问题
35EXP 2022年05月11日
使用产品:SuperMap iObjects.NET 10.2.1

问题描述:我想要将二维点数据集point2D转为三维点数据集point3D,目前采用的方法是首先新建一个三维点数据集,遍历point2D中的每一条记录,读取到二维点,赋予高程值转为三维点,并添加到三维点集中,完成全部几何点的转换以后,再以SmID为连接字段,调用DatasetVector.AppendFields()方法,将二维点集中的属性数据追加到三维点集中。

但是在DatasetVector.AppendFields()方法添加属性字段信息时,效率特别慢,想问二维转三维时,怎么快速实现属性数据的复制呢?

2 个回答

您好,请问您觉得效率特别慢的时候,大概是操作多少条记录呢?追加多少列字段呢?通过 DatasetVector.AppendFields() 方法操作大概耗时多少呢?

若您觉得 DatasetVector.AppendFields() 方法效率慢的话,建议您可以参考从 DatasetVector 类中的 Recordset 属性批处理操作(BatchEditor 属性),详细使用方法可参考 SuperMap iObjects .NET 安装目录\Help 目录下的帮助文档,检索 “Recordset.BatchEditor”关键字。

希望可以帮到您。
2,253EXP 2022年05月12日
上面思路有两个问题:

1、二维点转三维点,先只写空间数据部分,未写属性部分。

2、SmID是新数据集自增生成的并不具有唯一性,三维点SmID与二维点SmID是不能完全对等关联的,而且append操作属于表的join操作,所以数据记录多,连接操作肯定慢。

改进实现思路:

1、新建三维点数据集的同时就将属性表结构的字段都创建好,属性表结构保持与二维点的一致。

2、遍历二维点的recordset操作时,用批量添加三维点的操作Recordset.BatchEditor接口,二维点转三维点时空间对象和属性一起添加,用recordset.addNew(Geometry geometry,java.util.Map<java.lang.String,java.lang.Object> values) 接口实现。然后用批量提交,减少表的操作。
1,520EXP 2022年05月12日
...