AE中多Ring的Geometry坐标变换

在ArcGIS Engine中,Polygon要素是由Ring对象构成的(http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//002m000002mm000000),每个Ring在AE中读取最后会多出一个点,在坐标转换中处理这个点会导致图形变形。有一种解决方案(http://blog.csdn.net/chiangbt/article/details/2475172)用IPolygon -> IRing -> IPolygon进行重新生成。我采取记录各Ring末尾点坐标的方式进行处理。

IGeometryCollection pGeometryCollection = pFeature.Shape as IGeometryCollection;

// 数组lastPoints保存每个ring最后一点的位置
int[] lastPoints = new int[pGeometryCollection.GeometryCount];

// 首先获得每个ring的点数量
for (int i = 0; i < pGeometryCollection.GeometryCount; i++)
{
    IRing pRing = pGeometryCollection.get_Geometry(i) as IRing;
    IPointCollection pPointCollection = pRing as IPointCollection;
    lastPoints[i] = pPointCollection.PointCount;
}

// 点数减一才是索引
lastPoints[0] -= 1;

// 累加,得到每个ring的最后一点在整个Polygon中的位置
for (int i = 1; i < pGeometryCollection.GeometryCount; i++)
{
    lastPoints[i] += lastPoints[i - 1];
}

IPointCollection pPointCol = pGeometryCollection as IPointCollection;
for (int i = 0; i < pPointCol.PointCount; i++)
{
    // 如果是环的最后一点,则不处理
    if (Array.IndexOf(lastPoints, i) != -1)
    { continue; }
    
    // 处理坐标
    
    pPointCol.UpdatePoint(i, pPoint);
}
posted @ 2012-12-02 01:30  meantobe  阅读(1017)  评论(0编辑  收藏  举报