首页 / 浏览问题 / 组件GIS / 问题详情
组件开发时属性转二维点方法和效率问题
216EXP 2018年07月07日

你好,我在做组件开发时,需要实现属性转二维点的同时并把属性表中的属性赋给相应的点此功能。目前我的实现方法分为两个步骤:第一步,从属性读取坐标信息(经纬度信息X,Y),然后直接用点对象的构造函数GeoPoint 构造函数 (Double, Double)来传入X,Y的坐标,构造点对象,并创建一个类型是Point的Datasetvector,然后获取它的Recordset,使用Recordset.Addnew方法即可将点对象加进点数据集。第二步:遍历该Point的Datasetvector的Recordset,并新建非系统字段(除"Sm"开头以外的字段)。

我遇到的问题是:

第一,效率问题,我的测试数据(Excel)中有3000条记录,40个字段。我用Desktop桌面完成属性转点大约需要8秒钟,但是我用我以上方法完成此功能需要将近4分钟,效率相差如此之大,我想请问下原因在哪里?

第二:以上两步我想一步实现,就是在创建每个GeoPoint的同时并且把非系统属性赋给该GeoPoint,能否一步实现?我在官网文档上看到AddNew的第二个重载方法,即AddNew(Geometry,Dictionary<Sting,Object>),把非系统属性字段信息存储到Dictionary中,但是其效果和AddNew(Geometry)函数是一样的,只能创建图层,其非系统属性信息没有加进去。请问这是什么原因?

AddNew(Geometry)
AddNew(Geometry, Dictionary<(Of <(String, Object>)>))
相关的答案: 组件开发属性转点

1个回答

您好!

(1)如果您是一个一个记录集的添加,它的效率肯定慢,建议您使用批量更新,Recordset.BatchEditor editor=recordset.Batch;具体参考iObjects.NET的帮助文档。

(2)想把非系统属性信息添加进记录集,首先要判断字段类型,再添加该字段信息,主要代码dataset.FieldInfos.Add(fieldInfo);具体可参考http://qa.supermap.com/33611

3,362EXP 2018年07月09日
您提的第二点建议只是把属性表中的一条数据拷贝过去了,这种思路是在生成geometry的同时把一条非系统属性信息拷贝进去了,如果拷贝多条非系统属性字段信息呢?那应该怎么办?

您好!recordset1.AddNew(geometry,Dictionary<String, Object> values);是可以添加非系统属性信息的。

...