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;
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM