Lidar com camadas de anotação com arcpy


10

Desejo acessar as camadas de anotação usando o arcpy (o objetivo é verificar algumas seqüências de texto nas anotações de texto). Por anotação, quero dizer anotações de ferramentas de desenho , não rótulos dinâmicos. Essas camadas de anotação estão sob uma camada de grupos com o nome 'Padrão'.

A documentação da Esri fala da anotação de desenho como sendo camadas:

Existem essencialmente três categorias de camadas em um documento de mapa: camadas de recurso, camadas de grupo e camadas de varredura. As propriedades isFeatureLayer, isGroupLayer e isRasterLayer permitem identificar ou isolar a maioria dos tipos de camada, mas nem todos. Existem algumas camadas e conjuntos de dados especializados que não se enquadram em uma dessas três categorias: subclasses de anotação, recursos de dimensão, conjuntos de dados de rede, conjuntos de dados de terreno, conjuntos de dados de topologia e assim por diante. Nesses casos, pode ser necessário testar outras propriedades para isolar uma camada de interesse antes de fazer algo.

Uma coisa a ter em atenção é como o ArcGIS lida com anotações de desenho , duas configurações médias são possíveis:

O ArcGIS suporta totalmente dois tipos de anotação: banco de dados geográficos e documento de mapa

No meu caso, é um documento de mapa.


À luz de toda essa documentação, parece que as anotações de desenho são meras camadas; portanto, um código simples como este deve estar funcionando:

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

Mas o problema é que as anotações não parecem obtidas via dataframe (o que é estranho, considerando que cada uma das minhas camadas de anotação está associada a uma camada de recurso).


Alguma classe arcpy específica para acessar anotações (uma comparável à IAnnotationFeature2 do ArcObject SDK)? Alguma solução alternativa?

Obrigado !


Você conseguiu modificar seu grupo de anotações de documentos de mapa por meio de comptypes e ArcObjects? Alguma indicação para mais informações? Muito Obrigado!!
Hélène

Respostas:


3

O ArcPy não expõe todos os ArcObjects. Pelo que sei, essa é uma das muitas interfaces que não são expostas no ArcPy. Somente elementos de layout de página são expostos no arcpy: ListLayoutElements (arcpy.mapping)

Se você precisar fazer isso, sua única opção é ArcObjects. Se você deseja usar o Python, consulte Como acesso o ArcObjects a partir do Python?

Caso contrário, você pode procurar ou criar uma idéia do ArcGIS sobre isso (a única idéia existente relevante que encontrei foi essa ).


Oi, eu estava esperando essa resposta, mas obrigado e +1 pelos links, isso pode ajudar.
Akheloes 13/03

@Akheloes Você conseguiu modificar o seu grupo de anotações de documentos de mapa por meio de comptypes e ArcObjects?
Hélène

0

Estou adicionando uma resposta caso outras pessoas se deparem com isso. As anotações SÃO acessíveis via arcpy e podem ser tratadas como camadas. O código não funcionou porque falta um índice, NÃO porque as anotações não estão acessíveis. Essas funções retornam uma lista de cada vez, por isso mesmo se você estiver usando um wildcard (neste caso " Layers " e " current_annotation_layer "), você ainda precisa especificar o índice para recuperá-lo e atribuí-lo a um objeto ( df & LYR respectivamente )

O código deve ser:

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

Aqui está um exemplo que usei o arcpy para acessar minha camada de anotação. Para o meu mapa, queria que a anotação fosse movida para baixo de uma máscara com 20% de transparência, se estivesse fora da minha área de interesse.

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.