ArcGIS Engine中,主要有两个方法用于要素的添加:
- Using IFeatureClass.CreateFeature followed by IFeature.Store
- Using IFeatureClass.CreateFeatureBuffer with an insert cursor
批量插入feature,如果用feature.store()方法,在图层中一个个地插入要素,较之同时使用insert cursor与feature buffer方法,会慢很多。
因为后者触发的事件和复杂行为比较少(比如说没有引发因拓扑关系产生的行为)。
1)利用Insert Cursors和featureBuffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "B Pierce");
for (int ic = 0; ic < 99; ic++)
{
featureBuffer.Shape = geometry;
featureOID = featureCursor.InsertFeature(featureBuffer);
}
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "K Johnston");
for (int ic = 0; ic < 99; ic++)
{
featureBuffer.Shape = geometry
featureOID = featureCursor.InsertFeature(featureBuffer);
}
featureCursor.Flush();
2)直接进行数据插入(Feature.Store方法)
IFeature newLineFeature = LineFeaClass.CreateFeature();
newLineFeature.Shape = pFeature.Shape;
int ii = newLineFeature.Fields.FindField(AreaZonalName);
if (ii > 0)
{
newLineFeature.set_Value(ii, this.AnalysAreaComboBox.Text.Trim());
}
newLineFeature.Store();
注:最好将编辑操作对象中,如下:
IDataset dataset = (IDataset)featureClass;
IWorkspace workspace = dataset.Workspace;
// Cast the workspace to the IWorkspaceEdit interface.
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
// Start an edit session and edit operation.
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
//在这里编写添加要素的代码。。。。。。。。。。。
// Stop editing.
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);