IFeature.Shape赋值时出错处理

来源:互联网 发布:广州易娱网络工作环境 编辑:程序博客网 时间:2024/06/05 15:32
问题提出: 在目标要素集新建一个要素,在赋值到Shape时出现ComException("这个集合中找不到此项目").
伪代码:
IFeature ft = IFeatureClass.CreateFeature();
ft.Shape = IPolyline <- Throw ComException
(包括IFeatureBuffer 的情况,IFeatureBuffer对Shape赋值时也会抛出ComException)
原因:
由于新建的要素缺少要素集中某些内容导致新要素无法写入要素集。 Google查出来的多数人情况是要素集缺少OID字段或SHAPE字段。
但我出现的问题不关着两个字段的事,这两个字段通常都是存在的。我的情况是要素集多出了 Z Value,而通过new IPolyline新建的要素是没有Z Value的,所以导致赋值时出现ComException。
解决方法:
新建要素前先检查要素集是否存在Z value,如果存在,则在新建要素是把Z value写入。

//检查要素集是否存在z value
bool IsFeatureClassExistZ(IFeatureClass fc)
{
    IGeoDataset geoDT = fc as IGeoDataset;
    IZAware zAware = geoDT.Extent as IZAware;
    return zAware.ZAware;
}

//创建要素部分
IPolyline pl = new PolylineClass();
//略过插入点代码
if( 
IsFeatureClassExistZ(featureClass) )
{
    IZAware zAware = pl as IZAware;
    zAware.ZAware = true;
}
IFeature ft = featureClass.CreateFeature();
ft.Shape = pl;
ft.Store();
原创粉丝点击