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