Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring对象构成,也可以使用多个Ring组成。其中Ring可以分为Outer Ring(外环)和InnerRing(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。如果多边形只有外环,没有内环,很好处理,难得是如何将内环和外环区分开来,并且保证正确的内外环包含关系。
前段时间做MDB数据库的坐标转换功能,由于针对的是地方坐标系,所以无法用7参数构建投影坐标统一转换。我采用的是将featureLayer中的Feature一个一个取出来,将每个点的起始点坐标取出来进行转换,然后再组合回去。现在将多边形部分代码贴出来:
IPolygon4 polygon = pFeature.ShapeCopy as IPolygon4;
IGeometryBag bag = polygon.ExteriorRingBag; //获取多边形的所有外环
IEnumGeometry geo = bag as IEnumGeometry;
geo.Reset();
IRing exRing = geo.Next() as IRing;
while (exRing != null)
{
IGeometryBag bags = polygon.get_InteriorRingBag(exRing); //获取当前外环所包含的内环
IEnumGeometry geos = bags as IEnumGeometry;
geos.Reset();
IRing inRing = geos.Next() as IRing;
while (inRing != null) //先处理内环
{
ISegmentCollection segs = inRing as ISegmentCollection;
ISegmentCollection ring = new Rin