Pergunta

Tendo problemas para converter uma ilayer em um ipolgon.

Estou desenvolvendo uma barra de ferramentas para o ARCMAP e pego uma camada via código do índice da mesa lateral. A camada é um polígono, mas o código não o converte em um ipolgon.

Alguém pode me ajudar? Este é o código que estou usando para tentar convertê -lo em um ipolygon ...

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

Eu posso fazer isso:

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

E isso funciona, apenas não convertendo em um iploygon ..

Foi útil?

Solução

Se você deseja acessar as geometrias contidas em uma camada de shapefile, é necessário obter a classe de recursos da camada. Esta é uma propriedade da interface ifeatureLayer, então você terá que lançar sua camada (que é uma ilayer) primeiro:

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

Se você tem uma classe de recurso, pode obter recursos por índice (lento) ou definir um cursor na classe de recursos (isso é rápido e da maneira preferida quando você deseja lidar com muitos recursos. Pesquise o ifeatureCursor; os documentos de ESRi usualy vêm com bons trechos de código).

Se a sua classe de recursos contiver apenas um recurso, ou se você deseja apenas um recurso, poderá usar o método getFeature:

IFeature MyFeature = FClass.GetFeature(0);

Agora você está quase lá. A geometria de um recurso está escondida em sua propriedade de forma:

IPolygon MyPoly = MyFeature.Shape as IPolygon;

O elenco extra é necessário porque a propriedade Shape é um ipolgon, que é uma igeometria mais específica.

Outras dicas

A ilayer será composta de vários polígonos. Pense em uma camada como uma tabela SQL e um recurso como uma linha nessa tabela. O ipolygon se referirá à geometria que compõe um recurso individual. Pode ser necessário lançar essa ilayer como algo como um iFeatureLayer para obter acesso às propriedades/métodos certos para acessar os recursos individuais da sua camada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top