////// rectangle/envelop 裁剪线 /// /// /// ///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
////// 获取多边形和矿层表面的 相交多边形 /// /// 传入的多边形 /// 矿层表面 ///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; }