ArcEngine以点坐标在指定图层上添加面要素

private void buttonAddOneArea_Click(object sender, EventArgs e)
        {   
            // 定义4个点 
            IPoint pPt1 = new PointClass();
            pPt1.SpatialReference = axMapControl1.SpatialReference;// 设置点的参考系  
            pPt1.PutCoords(0, 0);//设置点的坐标

            IPoint pPt2 = new PointClass();
            pPt2.SpatialReference = axMapControl1.SpatialReference;
            pPt2.PutCoords(50, 0);

            IPoint pPt3 = new PointClass();
            pPt3.PutCoords(50, 50);
            pPt3.SpatialReference = axMapControl1.SpatialReference;

            IPoint pPt4 = new PointClass();
            pPt4.SpatialReference = axMapControl1.SpatialReference;
            pPt4.PutCoords(0, 50);

            // 由点 构造 连续坐标集
            ISegmentCollection pSegColl = new RingClass();
            object Missing1 = Type.Missing;
            object Missing2 = Type.Missing;

            ILine pLine;
            pLine = new LineClass();
            pLine.PutCoords(pPt1, pPt2);    //点pPt1、pPt2……pPt4等的位置不一样,出来的图形效果是不一样的            
            pSegColl.AddSegment(pLine as ISegment, ref Missing1, ref Missing2);

            pLine = new LineClass();
            pLine.PutCoords(pPt2, pPt3);
            pSegColl.AddSegment(pLine as ISegment, ref Missing1, ref Missing2);

            pLine = new LineClass();
            pLine.PutCoords(pPt3, pPt4);
            pSegColl.AddSegment(pLine as ISegment, ref Missing1, ref Missing2);

            // 转化为 闭合线
            IRing pRing;
            pRing = pSegColl as IRing;
            pRing.Close();

            // 由闭合线 构造 多边形
            IGeometryCollection pPolygon = new PolygonClass();
            pPolygon.AddGeometry(pRing, ref Missing1, ref Missing2);
            ISimpleFillSymbol pSimpleFillSym = new SimpleFillSymbolClass();    //填充样式以及颜色
            pSimpleFillSym.Style = esriSimpleFillStyle.esriSFSSolid;
            pSimpleFillSym.Color = GetRGB(250, 50, 100);
            IFillShapeElement pPolygonEle = new PolygonElementClass();
            pPolygonEle.Symbol = pSimpleFillSym;
            IElement pEle = pPolygonEle as IElement;
            pEle.Geometry = (IGeometry)pPolygon;

            //获取图层
            ILayer pLayer = GetLayerByName("MapsSheet");           

            // 多边形添加进图层
            IFeatureLayer pFeatureLyr = pLayer as IFeatureLayer;        //将ILayer转换为IFeaturelayer,为了对图层上的要素进行编辑  
            IFeatureClass pFeatCls = pFeatureLyr.FeatureClass;          //定义一个要素集合,并获取图层的要素集合  
            IFeatureClassWrite fr = (IFeatureClassWrite)pFeatCls;       //定义一个实现新增要素的接口实例,并该实例作用于当前图层的要素集  
                                    
            IFeature f = pFeatCls.CreateFeature();      //实例化IFeature对象, 这样IFeature对象就具有当前图层上要素的字段信息  
            f.Shape = (IGeometry)pPolygon;              //设置IFeature对象的形状属性 
            //f.set_Value(2, "house1");                 //设置IFeature对象的索引是3的字段值  
            f.Store();                                  //保存IFeature对象

            IWorkspaceEdit w =
                (pFeatCls as IDataset).Workspace as IWorkspaceEdit;     //定义一个工作编辑工作空间,用于开启前图层的编辑状态  
                                                                        //定义一个IFeature实例,用于添加到当前图层上  
            w.StartEditing(true);           //开启编辑状态  
            w.StartEditOperation();         //开启编辑操作  

            fr.WriteFeature(f);//将IFeature对象,添加到当前图层上  

            w.StopEditOperation();//停止编辑操作  
            w.StopEditing(true);//关闭编辑状态,并保存修改  

            axMapControl1.ActiveView.Refresh();
        }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starhuhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值