通过线构造面(C# + ArcGIS Engine 9.2)

生成面之前的截图:


生成为面之后的截图:


从线生成面的方法代码:

///   <summary>
///  通过线创建面
///   </summary>
///   <param name="pPolyline"> 线 </param>
///   <returns> </returns>
IPolygon ConstructPolygonFromPolyline(IPolyline pPolyline)
{
    IGeometryCollection pPolygonGeoCol 
=   new  PolygonClass();

    
if  ((pPolyline  !=   null &&  ( ! pPolyline.IsEmpty))
    {
        IGeometryCollection pPolylineGeoCol 
=  pPolyline  as  IGeometryCollection;
        ISegmentCollection pSegCol 
=   new  RingClass();
        ISegment pSegment 
=   null ;
        
object  missing  =  Type.Missing;

        
for  ( int  i  =   0 ; i  <  pPolylineGeoCol.GeometryCount; i ++ )
        {
            ISegmentCollection pPolylineSegCol 
=  pPolylineGeoCol.get_Geometry(i)  as  ISegmentCollection;
            
for  ( int  j  =   0 ; j  <  pPolylineSegCol.SegmentCount; j ++ )
            {
                pSegment 
=  pPolylineSegCol.get_Segment(j);
                pSegCol.AddSegment(pSegment, 
ref  missing,  ref  missing);
            }
            pPolygonGeoCol.AddGeometry(pSegCol 
as  IGeometry,  ref  missing,  ref  missing);
        }
    }
    
return  pPolygonGeoCol  as  IPolygon;
}

调用示例:
ILayer pLayer  =  axMapControl1.get_Layer( 1 );
IFeatureLayer pFeatureLayer 
=  pLayer  as  IFeatureLayer;
IFeatureClass pFeatureClass 
=  pFeatureLayer.FeatureClass;
if  (pFeatureClass.ShapeType  ==  esriGeometryType.esriGeometryPolyline)
{
    IFeatureCursor pFeatureCursor 
=  pFeatureClass.Search( null false );
    IFeature pFeature 
=  pFeatureCursor.NextFeature();

    ILayer pTargetLayer 
=  axMapControl1.get_Layer( 2 );
    IFeatureLayer pTargetFeatureLayer 
=  pTargetLayer  as  IFeatureLayer;
    IFeatureClass pTargetFeatureClass 
=  pTargetFeatureLayer.FeatureClass;
    
if  (pTargetFeatureClass.ShapeType  ==  esriGeometryType.esriGeometryPolygon)
    {
        IPolygon pPolygon 
=   null ;
        
while  (pFeature  !=   null )
        {
            IPolyline pPolyline 
=  pFeature.Shape  as  IPolyline;
            pPolygon 
=  ConstructPolygonFromPolyline(pPolyline);
            
if  ((pPolygon  !=   null &&  ( ! pPolygon.IsEmpty))
            {
                
if  ( ! pPolygon.IsClosed)
                {
                    pPolygon.Close();
                }
                IFeature pNewFeature 
=  pTargetFeatureClass.CreateFeature();
                pNewFeature.Shape 
=  pPolygon;
                pNewFeature.Store();
                pFeature.Delete();
            }
            pFeature 
=  pFeatureCursor.NextFeature();
        }
    }
}
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, 
null null );

转载于:https://www.cnblogs.com/GISCafe/archive/2008/05/28/1209435.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值