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

来源:互联网 发布:淘宝的降价通知 编辑:程序博客网 时间:2024/06/04 10:10

          在创建要素并保存为.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/

0 0
原创粉丝点击