如何在ArcObjects中将ILayer转换为IPolygon

时间:2010-05-17 15:53:15

标签: c# esri arcobjects arcmap

无法将Ilayer转换为IPolygon。

我正在为ArcMap开发一个工具栏,我通过旁边的目录中的代码获取一个图层。 Layer是一个Polygon,但代码不会将其转换为IPolygon。

任何人都可以帮助我吗?这是我用来尝试将其转换为IPolygon的代码......

 IPolygon poly = m_document.Maps.get_Item(0).get_Layer(0) as IPolygon;

我可以这样做:

 ILayer layer = m_document.Maps.get_Item(0).get_Layer(0) as ILayer;

这样可行,只是不将其转换为IPloygon ..

2 个答案:

答案 0 :(得分:5)

如果要访问shapefile图层中包含的几何图形,则必须获取图层的要素类。这是IFeatureLayer接口的属性,因此您必须首先转换图层(这是一个ILayer):

IFeatureLayer FLayer = layer as IFeatureLayer;
IFeatureClass FClass = FLayer.FeatureClass;

如果您有要素类,则可以通过索引(慢速)或通过在要素类上定义光标来获取要素(当您要处理大量要素时,这是快速且首选的方式。搜索IFeatureCursor; ESRI docs通常带有很好的代码片段。)

如果要素类仅包含一个要素,或者只需要一个要素,则可以使用GetFeature方法:

IFeature MyFeature = FClass.GetFeature(0);

现在你快到了。要素的几何体隐藏在其Shape属性中:

IPolygon MyPoly = MyFeature.Shape as IPolygon;

需要额外的强制转换,因为Shape属性是一个IPolygon,这是一个更具体的IGeometry。

答案 1 :(得分:1)

ILayer将由多个多边形组成。可以将图层视为sql表,将某个功能视为该表中的行。 IPolygon将引用构成单个特征的几何体。您可能需要将ILayer强制转换为IFeatureLayer,以访问正确的属性/方法以访问图层中的各个要素。