创建要素的两种方法(多要素)

          在创建要素并保存为.shp文件的时候,一般采用的是FeatureClass的createFeature方法,具体代码如下:      

public static void CreateFeature(IFeatureClass featureClass, IPolyline polyline)
{
    // 创建feature
    IFeature feature = featureClass.CreateFeature();
    //设置shape
    feature.Shape = polyline;
    // 对属性字段赋值
    int contractorFieldIndex = featureClass.FindField("字段名");
    feature.set_Value(contractorFieldIndex, "字段值");
    // 重要一步,保存
    feature.Store();
}
     但是在实际开发当中,遇到一次要处理很多条数据,用上述方法循环保存速度及其慢,而且会莫名其妙的出错(没找到原因,可能是内存占用过多吧),查了官方API,发现有提供专门用于创建多条要素的方法,具体代码如下:
     
public static void InsertFeaturesUsingCursor(IFeatureClass featureClass, List <
    IGeometry > geometryList)
{
    //using中声明的对象,在using语句块结束后会自动释放。C#有垃圾处理,但不可控。comReleaser对象用于
    using(ComReleaser comReleaser = new ComReleaser())
    {
        // 创建feature buffer.
        IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
        comReleaser.ManageLifetime(featureBuffer);

        // 创建 insert cursor.
        IFeatureCursor insertCursor = featureClass.Insert(true);
        comReleaser.ManageLifetime(insertCursor);

        // 字段赋值
        int typeFieldIndex = featureClass.FindField("字段名");
        featureBuffer.set_Value(typeFieldIndex, "字段值");
        foreach (IGeometry geometry in geometryList)
        {
            // 设置shape
            featureBuffer.Shape = geometry;
            //使用cursor插入到featureBuffer
            insertCursor.InsertFeature(featureBuffer);
        }

        // 清空insertCursor
        insertCursor.Flush();
    }
}
  用下面的方法创建要素,速度提升不少。但是出现了新的问题,当list中只有一个Geometry时,有时候会出错,还没弄清楚原因。权益之计暂时是根据要素数量采用不同的方法,看后期能不能发现问题所在。

详情请参考官方文档:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Creating_features/00010000049v000000/

你可能感兴趣的:(ArcGis二次开发项目经验)