您的位置:首页 > Web前端

IFeature.Shape赋值时出错处理

2013-05-15 09:08 176 查看
问题提出: 在目标要素集新建一个要素,在赋值到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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: