使用ArcObjects添加点线面

本文介绍在AE中进行地物添加的基础操作,包括点、线、面的创建过程及代码实现,帮助开发者掌握基本的数据编辑技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
AE中数据编辑是一个重难点。它包括的东西很多,如地物的添加,地物的修改,地物查询,节点捕捉,地物的符号化等一系列的问题。熟练的使用地物编辑的功能,是开发一个系统必须具备的条件。数据编辑问题解决得好坏直接决定着软件是否操作方便。在这我只是写一些相应的功能函数,至于软件开发中的架构暂不考虑。
1添加地物
什么是地物,这是 GIS的基本概念,在此只说明一点,地物可以表现在地图上,如房子、铁路、水管等等。我们把房子的总称称为一个地物类,在AE中对应一个地物类(IFeatureClass),一个地物类在地图上表示为一个地物层(IFeatureLayer),单独的一栋房子或一条管道我们称为地物(IFeature),Arcgis中一类地物只能放在一个层,通过图层的叠加组成一幅地图。
熟悉面向对象的人都知道,其实上边的地物类和地物的概念就是类和对象的概念。房子、铁路、水管等是一类地物的抽象,而具体的某一房子就是对象了。大家了解这一点,接下来的开发就容易理解一些了。当然,还有一些其他的概念也必须了解一下:如长事务、短事务、编辑空间等。请大家查找一些相关资料,了解这方面的内容。
我们先开始最基本的编辑功能:添加点线面的操作。它包括输入添加点线面和通过鼠标拖动添加点线面。下边讨论一下添加点线面的基本的实现方法:
一、添加点
我们可以有多种方法添加点,但基本的思路一样,只是有少量的接口有变化。下边是通过IFeatureClassCreateFeature()函数添加地物。
IFeatureLayer I = MapTest.Map.get_Layer(0as IFeatureLayer;
            IFeatureClass fc 
= I.FeatureClass;

            IFeatureClassWrite fcw 
= fc as IFeatureClassWrite;

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

            w.StartEditing(
false);
            w.StartEditOperation();
           
            f 
= fc.CreateFeature();
            p 
= new PointClass();
            p.PutCoords(
9300048000);
            f.Shape 
= p;
            fcw.WriteFeature(f);

            w.StopEditOperation();
            w.StopEditing(
true);
 
二、添加线
添加线的方法跟添加点一样,不同的只是地物类型不一样而已,我把代码贴出来,大家跟添加点的方式进行对比。
IFeatureLayer I = MapTest.Map.get_Layer(0as IFeatureLayer;
            IFeatureClass fc 
= I.FeatureClass;

            IFeatureClassWrite fcw 
= fc as IFeatureClassWrite;
            IWorkspaceEdit w 
= (fc as IDataset).Workspace as IWorkspaceEdit;
            IFeature f;
            IPoint p 
= new PointClass();

            w.StartEditing(
false);
            w.StartEditOperation();

            
//可选参数设置
            object Missing = Type.Missing;

            f 
= fc.CreateFeature();
            
//定义一个多义线对象
            IPolyline polyLine = new PolylineClass();
            
//定义一个点的集合
            IPointCollection ptCollect = polyLine as IPointCollection;
            
//定义一系列要添加到多义线上的点对象,并赋初始值
            p.PutCoords(9500048000);
            ptCollect.AddPoint(p, 
ref Missing, ref Missing);
            p.PutCoords(
9300048000);
            ptCollect.AddPoint(p, 
ref Missing, ref Missing);
            f.Shape 
= polyLine;

            fcw.WriteFeature(f);

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

 三添加面

添加面和添加线基本一致,将IPolyLine换成IPolygon就可以了

            IFeatureLayer feaLayer = MapTest.Map.get_Layer(0as IFeatureLayer;
            IFeatureClass fc 
= feaLayer.FeatureClass;

            IFeatureClassWrite fcw 
= fc as IFeatureClassWrite;
            IWorkspaceEdit workspace 
= (fc as IDataset).Workspace as IWorkspaceEdit;
            IFeature f;
            IPoint p 
= new PointClass();

            workspace.StartEditing(
false);
            workspace.StartEditOperation();

            
//可选参数设置
      object Missing = Type.Missing;

            f 
= fc.CreateFeature();
            
//定义一个多边形对象
      IPolygon polygon = new PolygonClass();
            
//定义一个点的集合
      IPointCollection ptCollect = polygon as IPointCollection;
            
//定义一系列要添加到多边形上的点对象,并赋初始值
      p.PutCoords(9000048000);
            ptCollect.AddPoint(p, 
ref Missing, ref Missing);
            p.PutCoords(
9000050000);
            ptCollect.AddPoint(p, 
ref Missing, ref Missing);
            p.PutCoords(
9300050000);
            ptCollect.AddPoint(p, 
ref Missing, ref Missing);

            f.Shape 
= polygon;
            fcw.WriteFeature(f);

            workspace.StopEditOperation();
            workspace.StopEditing(
true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值