AE intersect、clip的实现

        /// <summary>
        /// rectangle/envelop 裁剪线
        /// </summary>
        /// <param name="pPolyLine"></param>
        /// <param name="pEnvelop"></param>
        /// <returns></returns>
        public static IPolyline GetClippedPolyline(IPolyline pPolyLine,IEnvelope pEnvelop)
        {
            ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            IGeographicCoordinateSystem gcsSys = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980);
            pPolyLine.SpatialReference = gcsSys;
            pEnvelop.SpatialReference = gcsSys;
            ITopologicalOperator2 pTopOper = pPolyLine as ITopologicalOperator2;
            IGeometry pGeoafter=new PolylineClass();
            pTopOper.QueryClipped(pEnvelop, pGeoafter);
            return pGeoafter as IPolyline;
        }

 备注:intersect和Clip功能一般使用 ITopologicalOperator实现.

         Clip,Intersect等分析,要求各要素有空间参考SpatialReference,否则会出现System.Runtime.InteropServices.COMException错误

        ITopologicalOperator接口能够直接被Point,Polyline,Polygon等要素实现。但不能被TIN实现。

       即  ITopologicalOperator pTopOper=pTin as ITopologicalOperator 获得的pTopOper是Null

 

     /// <summary>
        /// 获取多边形和矿层表面的  相交多边形
        /// </summary>
        /// <param name="pPolygon">传入的多边形</param>
        /// <param name="pTinsurface">矿层表面</param>
        /// <returns></returns>
        public static IPolygon GetIntersectedRegion(IPolygon pPolygon,ITinSurface pTinsurface)
        {
            /*进行Clip和Intersect分析之前,featrue必须设置空间参考,否则出现
             *System.Runtime.InteropServices.COMException
             */
            ISpatialReferenceFactory pSpaRefFactory = new SpatialReferenceEnvironmentClass();
            IProjectedCoordinateSystem pcsSys = pSpaRefFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_Zone_39);
            IPolygon resultPolygon = new PolygonClass();
          
            ITopologicalOperator pTopoOper = pPolygon as ITopologicalOperator;
            IPolygon pTinPolygon = GetProjectedPolygonFromTin(pTinsurface);
            pPolygon.SpatialReference = pcsSys;
            pTinPolygon.SpatialReference = pcsSys;

            IGeometry otherGeometry = pTinPolygon as IGeometry;
            resultPolygon =pTopoOper.Intersect(otherGeometry, esriGeometryDimension.esriGeometry1Dimension) as IPolygon;
            return resultPolygon;
        }

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值