Question

Ayant du mal à convertir un Ilayer à un IPolygon.

Je développe une barre d'outils pour ArcMap et je prends une couche via le code de la table des matières de côté. La couche est un Polygon, mais le code ne sera pas le convertir en un IPolygon.

aide quelqu'un peut me sortir? Voici le code que je utilise pour essayer de le convertir en un IPolygon ...

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

Je peux faire ceci:

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

Et cela fonctionne, tout simplement pas le convertir en un IPloygon ..

Était-ce utile?

La solution

Si vous voulez accéder aux géométries contenues dans une couche de shapefile, vous devez obtenir la classe d'entités de la couche. Ceci est une propriété de l'interface IFeatureLayer, de sorte que vous devrez jeter votre couche (qui est un ILayer) d'abord:

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

Si vous avez une classe d'entités, vous pouvez obtenir des fonctionnalités par index (lent) ou en définissant un curseur sur la classe d'entités (ce qui est rapide et la manière préférée lorsque vous voulez beaucoup de poignées de caractéristiques Recherche de IFeatureCursor;. Esri docs viennent usualy avec de bons extraits de code).

Si votre classe d'entités ne contient qu'une seule fonction, ou si vous voulez qu'une seule fonction, vous pouvez utiliser la méthode GetFeature:

IFeature MyFeature = FClass.GetFeature(0);

Maintenant, vous y êtes presque. est niché La géométrie d'une caractéristique loin dans sa propriété forme:

IPolygon MyPoly = MyFeature.Shape as IPolygon;

La distribution supplémentaire est nécessaire parce que la propriété de forme est un IPolygon, qui est un IGeometry plus spécifique.

Autres conseils

Le ILayer sera composé de plusieurs polygones. Penser à une couche comme une table SQL et une fonction comme une ligne dans la table. Le IPolygon fera référence à la géométrie qui fait une caractéristique individuelle. Vous devrez peut-être casting qui ILayer quelque chose comme un IFeatureLayer pour avoir accès aux bonnes propriétés / méthodes pour accéder aux fonctions individuelles dans votre couche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top