2010-05-17 3 views
1

Vous rencontrez des problèmes lors de la conversion d'un ILayer en IPolygon.Comment faire pour convertir ILayer en IPolygon dans ArcObjects

Je suis en train de développer une barre d'outils pour ArcMap et je récupère une couche via le code de la table des matières. Le calque est un polygone, mais le code ne le convertira pas en IPolygon.

Quelqu'un peut-il m'aider? 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 le faire:

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

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

Répondre

5

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

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 (c'est rapide et le moyen préféré lorsque vous voulez gérer beaucoup de fonctionnalités.) Rechercher IFeatureCursor, les docs ESRI viennent généralement avec de bons extraits de code).

Si votre classe d'entités ne contient qu'une seule fonction, ou si vous voulez une seule fonctionnalité, 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; 

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

+0

C'était tout !!! Merci beaucoup! –

1

L'ILayer sera composée de plusieurs polygones. Considérez une couche comme une table SQL et une fonctionnalité comme une ligne dans cette table. L'IPolygon fera référence à la géométrie qui constitue une entité individuelle. Vous devrez peut-être lancer ILayer comme quelque chose comme un IFeatureLayer pour avoir accès aux bonnes propriétés/méthodes pour accéder aux fonctionnalités individuelles au sein de votre couche.

+0

Makes Sense ... Mais comment extraire l'IPolygon de l'IFeatureClass ou du Layer? La chose la plus proche que je peux obtenir est AreaOfInterest et qui est convertie en IEnvelope ... J'ai essayé de créer une nouvelle classe IPolygon, mais la fonctionnalité IEnvelope est en lecture seule .... –

+1

Oui, vous ne pouvez pas instancier les interfaces directement. Fondamentalement, à partir de IFeatureLayer, vous pouvez accéder à la propriété FeatureClass. De la FeatureClass, vous pouvez appeler la méthode GetFeatures(), qui renvoie un curseur qui vous permet de parcourir toutes les fonctionnalités de la FeatureClass. Vous devriez pouvoir accéder à la géométrie associée à chaque entité. Un exemple (en VB) peut être trouvé ici: http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeoDatabase/IFeatureClass_GetFeatures.htm – smencer

Questions connexes