如何在ArcObjects中将ILayer转换为IPolygon

Spo*_*com 1 c# arcobjects esri arcmap

无法将Ilayer转换为IPolygon.

我正在为ArcMap开发一个工具栏,我通过侧面目录中的代码获取一个图层.图层是多边形,但代码不会将其转换为IPolygon.

谁能帮我吗?这是我用来尝试将其转换为IPolygon的代码...

 IPolygon poly = m_document.Maps.get_Item(0).get_Layer(0) as IPolygon;
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

 ILayer layer = m_document.Maps.get_Item(0).get_Layer(0) as ILayer;
Run Code Online (Sandbox Code Playgroud)

这是有效的,只是不将它转换为IPloygon ..

cfe*_*ern 5

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

IFeatureLayer FLayer = layer as IFeatureLayer;
IFeatureClass FClass = FLayer.FeatureClass;
Run Code Online (Sandbox Code Playgroud)

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

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

IFeature MyFeature = FClass.GetFeature(0);
Run Code Online (Sandbox Code Playgroud)

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

IPolygon MyPoly = MyFeature.Shape as IPolygon;
Run Code Online (Sandbox Code Playgroud)

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