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); }