zoukankan      html  css  js  c++  java
  • arcengine 矢量要素编辑(转载)

    一、添加点
    我们可以有多种方法添加点,但基本的思路一样,只是有少量的接口有变化。下边是通过FeatrueClass的CreateFeature()函数添加地物。
    public void AddPointByStore()
    {
    //得到要添加地物的图层
    IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
    //定义一个地物类,把要编辑的图层转化为定义的地物类
    IFeatureClass fc = l.FeatureClass ;
    //先定义一个编辑的工作空间,然后把转化为数据集,最后转化为编辑工作空间,
    IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;
    IFeature f ;
    IPoint p;

    //开始事务操作
    w.StartEditing (false);
    //开始编辑
    w.StartEditOperation() ;

    for (int i = 0 ; i< 100 ; i++ )
    {
    //创建一个地物
    f= fc.CreateFeature();
    p = new PointClass();
    //设置点的坐标
    p.PutCoords (i,i);
    //确定图形类型
    f.Shape = p;
    //保存地物
    f.Store();

    }

    //结束编辑
    w.StopEditOperation();
    //结束事务操作
    w.StopEditing(true);
    }


    上边的代码能添加点地物,但不能作为最终的代码使用,细心的人会看到。这段代码只是把第一层加进来,然后在第一层上边添加点地物,如果第一层不是点层,该怎么办,那就要判断了。怎么判断我们以后再说。通过上边的代码,我们已经清楚地了解到,编辑地物的基本框架,这也是我们所说的事务,如果想操作能返回和重做,就必须把代码写在IWorkspaceEdit的StartEditing()和StopEditing()函数之间,把相关的操作写在IWorkspaceEdit的StartEditOperation()和StopEditOperation()之间。并且操作是利用IWorkspaceEdit接口完成的,所以要仔细理会IWorkspaceEdit接口的用处,如何工作空间都可以转化为IWorkspaceEdit的对象,当转化为IWorkspaceEdit定义的对象后,我们定义一个IFeature的对象,然后利用IFeatureClass的CreateFeature()函数创建一个地物,并赋值给定义的IFeature对象。接着设置IFeature对象的一些属性,如:坐标值,坐标系,地物类型等,最后是调用IFeature对象的Store()保存添加的地物。


    上边的方法可以添加点地物,接着看看下边的代码。看有什么不同:

    public void AddPointByWrite()
    {
    IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
    IFeatureClass fc = l.FeatureClass ;
    IFeatureClassWrite fr = fc as IFeatureClassWrite ;
    IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;
    IFeature f ;
    IPoint p;

    w.StartEditing (true);
    w.StartEditOperation() ;

    for (int i = 0 ; i< 100 ; i++ )
    {
    f= fc.CreateFeature();
    p = new PointClass();
    p.PutCoords (i,i);
    f.Shape = p;
    fr.WriteFeature (f);
    }

    w.StopEditOperation();
    w.StopEditing(true);

    }


    代码中用红色标记的两行就是不同的代码,其实他就是保存方式的不同而已。在这利用了IFeatureClassWrite 接口来保存数据。再看看下边的代码:
    public void AddPointByBuffer()
    {
    IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
    IFeatureClass fc = l.FeatureClass ;
    IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;

    w.StartEditing (true);
    w.StartEditOperation() ;

    IPoint p;
    IFeatureBuffer f;
    IFeatureCursor cur = fc.Insert(true);

    for (int i = 0 ; i< 100 ; i++ )
    {
    f= fc.CreateFeatureBuffer();
    p = new PointClass();
    p.PutCoords (i,i);
    f.Shape = p;
    cur.InsertFeature (f);
    }

    w.StopEditOperation();
    w.StopEditing(true);
    }
    其实不同的地方就两句代码,红色表示的。在这没有再定义地物接口了(IFeature),而是使用IFeatureBuffer 接口,保存的时候是使用InsertFeature()保存,这对大数据量处理的非常有好处。他是先把要添加的保存到缓冲区里。最后一次性保存。

    二、添加线
    添加线的方法跟添加点一样,不同的只是地物类型不一样而已,我把代码贴出来,大家跟添加点的方式进行对比。这样便于记忆。也有利于理解。

    public void AddLineByWrite()
    {
    IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
    IFeatureClass fc = l.FeatureClass ;
    IFeatureClassWrite fr = fc as IFeatureClassWrite ;

    IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;
    IFeature f ;

    //可选参数的设置
    object Missing = Type.Missing;
    IPoint p=new PointClass();

    w.StartEditing (true);
    w.StartEditOperation() ;

    for (int i = 0 ; i< 100 ; i++ )
    {
    f = fc.CreateFeature();
    //定义一个多义线对象
    IPolyline PlyLine=new PolylineClass();
    //定义一个点的集合
    IPointCollection ptclo = PlyLine as IPointCollection;
    //定义一系列要添加到多义线上的点对象,并赋初始值
    for(int j=0;j<4;j++)
    {
    p.PutCoords(j,j);
    ptclo.AddPoint(p,ref Missing,ref Missing);
    }
    f.Shape = PlyLine;
    fr.WriteFeature (f);
    }

    w.StopEditOperation();
    w.StopEditing(true);

    }

    至于添加线的其他两种方法,通过修改添加点的代码,就可以得到。可以自己想想然后测试,这样便于记忆和理解

    转载自:http://hi.baidu.com/%C4%FE%CE%A8%CA%C7%C4%FE%CE%A8/blog/item/4ca9adec669bd0dbb3fb953c.html

  • 相关阅读:
    HDU1372,BFS象棋马走日
    看完一本小的算法书一个总结吧
    最小生成树Prim
    Junit单元测试的简单使用(主要是在spring框架下的项目)
    并查集
    最新最实用的公式技巧大汇总!
    这款Office密码破解工具,无坚不摧!
    有了它,友谊的船说不翻就不翻!
    Word公式装逼技巧,你绝对不会!
    为什么MathType窗口变灰色
  • 原文地址:https://www.cnblogs.com/wuhenke/p/2518306.html
Copyright © 2011-2022 走看看