版本
ArcGis 10.1,C#
ArcEngine中添加要素的方式有两种
一种使用IFeatureClass.CreateFeature和IFeature.Store方法实现
一种使用IFeatureClass.CreateFeatureBuffer的insert cursor来实现
插入大量数据时用insert cursor的效率高于CreateFeature和Store方法。
使用CreateFeature和Store创建要素
public static CreateFeature(IFeatureClass featureClass, IPolyline polyline)
{
// Build the feature.
IFeature feature = featureClass.CreateFeature();
feature.Shape = polyline;
// Apply the appropriate subtype to the feature.
ISubtypes subtypes = (ISubtypes)featureClass;
IRowSubtypes rowSubtypes = (IRowSubtypes)feature;
if (subtypes.HasSubtype)
{
// In this example, the value of 3 represents the polymer vinyl chloride (PVC) subtype.
rowSubtypes.SubtypeCode = 3;
}
// Initialize any default values the feature has.
rowSubtypes.InitDefaultValues();
// Update the value on a string field that indicates who installed the feature.
int contractorFieldIndex = featureClass.FindField("CONTRACTOR");
feature.set_Value(contractorFieldIndex, "K Johnston");
// Commit the new feature to the geodatabase.
feature.Store();
}
使用insert cursor创建要素
public static void InsertFeaturesUsingCursor(IFeatureClass featureClass, List <
IGeometry > geometryList)
{
using(ComReleaser comReleaser = new ComReleaser())
{
// Create a feature buffer.
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
comReleaser.ManageLifetime(featureBuffer);
// Create an insert cursor.
IFeatureCursor insertCursor = featureClass.Insert(true);
comReleaser.ManageLifetime(insertCursor);
// All of the features to be created are classified as Primary Highways.
int typeFieldIndex = featureClass.FindField("TYPE");
featureBuffer.set_Value(typeFieldIndex, "Primary Highway");
foreach (IGeometry geometry in geometryList)
{
// Set the feature buffer's shape and insert it.
featureBuffer.Shape = geometry;
insertCursor.InsertFeature(featureBuffer);
}
// Flush the buffer to the geodatabase.
insertCursor.Flush();
}
}
网友评论