使用ITopologicalOperator接口的Intersect函数求两个多边形的交集时,不知为何出现一些异常情况。函数正常执行,但是求出来的图形面积为零,获取Envelope的XMax等数据也出错。询问单位前辈之后让我试一下Simplify函数处理一下再求交。以下是修改过后的代码:
//求两个多边形的相交部分面积
public static double getArea(IPolygon geo1, IPolygon geo2)
{
ITopologicalOperator pTopologicalOperator = geo1 as ITopologicalOperator;
pTopologicalOperator.Simplify();
((ITopologicalOperator)geo2).Simplify();
//此处应保持裁剪与被裁剪图层的空间参考一致,否则容易发生异常
if (geo2.SpatialReference != geo1.SpatialReference) //sourceGeometry为被裁剪的图形
{
geo1.Project(geo2.SpatialReference);//此处应保持裁剪与被裁剪图层的空间参考一致,否则容易发生异常
}
IPolygon subGeo = (IPolygon)pTopologicalOperator.Intersect(geo2, esriGeometryDimension.esriGeometry2Dimension);
IArea pArea = (IArea)subGeo;