AE开发 合并Feature(IPolygon)

 

       在对已经存在的Feature进行合并创建新的Feature时,应使用ITopologicalOperator.Union()方法,将两个Feature的Geometry联合在一起。

       ITopologicalOperator.Union()方法官方说明:     http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/Union_Method/002m000003w2000000/

       示例代码:

 1  private bool MerageCadastre(IFeature feat1, IFeature feat2, out string message)
 2         {
 3             IFeatureLayer currentLayer = m_engineEditLayers.TargetLayer as IFeatureLayer;
 4             message = "";
 5             try
 6             {
 7                 object missing = System.Type.Missing;
 8                 object obj3 = System.Type.Missing;
 9                 IPolygon MeragePolygon = (feat1.ShapeCopy as ITopologicalOperator).Union(feat2.ShapeCopy) as IPolygon;
10                  IFeature MerageFeaure = currentLayer.FeatureClass.CreateFeature();
11                 MerageFeaure.Shape = MeragePolygon;
12               feat1.Shape.SetEmpty();
13                 feat2.Shape.SetEmpty();
14                 feat1.Store();
15                 feat2.Store();
16                 MerageFeaure.Store();
17                 CadastreEditCommon.AddItemToUndoStack(mylist, true, EditOperationType.MergeCadastre, currentLayer.FeatureClass);
18                 return true;
19 
20             }
21             catch (Exception exception)
22             {
23                 message = exception.ToString();
24                 return false;
25             }
26         }
View Code

 

       之前采用的则是新建IPolygon的方法。

 1    private bool MerageCadastre(IFeature feat1, IFeature feat2, out string message)
 2         {
 3             IFeatureLayer currentLayer = m_engineEditLayers.TargetLayer as IFeatureLayer;
 4             message = "";
 5             try
 6             {
 7                 object missing = System.Type.Missing;
 8                 object obj3 = System.Type.Missing;
 9                 IPolygon MeragePolygon = new PolygonClass();
10                 IPolygon geo1 = feat1.ShapeCopy as IPolygon;
11                 IPolygon geo2 = feat2.ShapeCopy as IPolygon;
12                 for (int i = 0; i < (geo1 as IGeometryCollection).GeometryCount; i++)
13                 {
14                     (MeragePolygon as IGeometryCollection).AddGeometry((geo1 as IGeometryCollection).get_Geometry(i), ref missing, ref obj3);
15                 }
16                 for (int i = 0; i < (geo2 as IGeometryCollection).GeometryCount; i++)
17                 {
18                     (MeragePolygon as IGeometryCollection).AddGeometry((geo2 as IGeometryCollection).get_Geometry(i), ref missing, ref obj3);
19                 }
20                  IFeature MerageFeaure = currentLayer.FeatureClass.CreateFeature();
21                 MerageFeaure.Shape = MeragePolygon;
22                 feat1.Shape.SetEmpty();
23                 feat2.Shape.SetEmpty();
24                 feat1.Store();
25                 feat2.Store();
26                 MerageFeaure.Store();
27                 CadastreEditCommon.AddItemToUndoStack(mylist, true, EditOperationType.MergeCadastre, currentLayer.FeatureClass);
28                 return true;
29 
30             }
31             catch (Exception exception)
32             {
33                 message = exception.ToString();
34                 return false;
35             }
36         }
View Code

        一般情况下新建IPolygon方法能够满足需求,但在对已经存在的Feature进行拆分后再合并保存时,会出现当前编辑图层不显示的情况。
        初步判断是对应的Feature的Geometry 未能成功保存。造成了整个图层无法显示的问题。

转载于:https://www.cnblogs.com/xiaolin670/p/4362758.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值