我们会有这样的业务操作,合并两个地块或者更多的地块,这种操作要非常细心,如果每个地块精度不一样,恭喜你会造成一个大地块会有很多缝隙,这些缝隙面积甚至小于0.01平方米,这样对于业务需求来说是不正确。那么如何解决这个问题,一开始我稀里糊涂去把这个地块的多部件出来,然后小于0.01我就把他转成顺时针,(逆时针的polygon就是带缝隙的地块),然后再和其他分出来的地块合并,没想到这样操作导致面积差距好大,连其他大的缝隙也给合了。后来想下有个比较简单的操作
1 public IPolygon fillGeometry(IPolygon polgyon) 2 { 3 double unionarea = 0.5; 4 5 IGeometryCollection igeoColl = polgyon as IGeometryCollection; 6 7 try 8 { 9 for (int i = 0; i < igeoColl.GeometryCount; i++) 10 { 11 IGeometry currentGeometry = igeoColl.get_Geometry(i); 12 double area = (currentGeometry as IArea).Area; 13 // 面积小于0 是 带洞的ring (逆时针的polygon)判断是否超过警戒值 去填充 14 if (area < 0) 15 { 16 if (Math.Abs(area) < unionarea) 17 { 18 igeoColl.RemoveGeometries(i, 1); 19 igeoColl.GeometriesChanged(); 20 i--; 21 } 22 } 23 } 24 } 25 catch(Exception e) 26 { 27 return polgyon; 28 } 29 30 return polgyon; 31 32 }