Alterando a simbologia de várias camadas usando o ArcMap / ArcPy?

10

Existe uma maneira de alterar a simbologia para várias camadas no ArcMap ou ArcCatalog. Eu quero mudar a simbologia de várias camadas ao mesmo tempo.

Ramakrishna Billakanti
fonte
3
Você poderia criar uma ferramenta de script realmente simples usando applySymbologyFromLayer . Tudo o que você precisa fazer é arrastar e soltar as camadas na caixa de diálogo.
Roy Roy
Se você criar um arquivo lyr de várias camadas e arrastá-lo (ou adicioná-lo a partir do botão adicionar dados), aplicará toda a simbologia e configurações de rotulagem salvas no lyr. Observe que você não o aplica a camadas existentes, mas as traz novamente com esse método.
Brad Nesom
@ BradNesom- Obrigado pela sugestão, mas estou falando especificamente sobre a alteração da simbologia de várias camadas que já estão no sumário. Aplicando basicamente um "Modelo" de simbologia de uma camada (existente) no TOC para muitas outras camadas (existentes) no TOC.
achou?
2
Confunde-me porque esta funcionalidade não está incorporada no ArcMap ...
jbaums
por que não mesclar todas as camadas em uma e depois mudar a cor dessa camada?
Robert

Respostas:

11

Editar Você pode usar este script fornecido pela ESRI para concluir a tarefa em questão (mesma ideia que abaixo):

import arcpy
arcpy.ApplySymbologyFromLayer_management("in_layer", "in_symbology_layer")

in_layer: a camada à qual a simbologia será aplicada.
Camada de recursos; Camada de varredura; Camada TIN; Camada de análise de rede

in_symbology_layer: a simbologia desta camada é aplicada à camada de entrada.
Camada de recursos; Camada de varredura; Camada TIN; Camada de análise de rede

Ou estenda isso na forma de script independente (pense em IDLE):

import arcpy
from arcpy import env

# Set the current workspace
env.workspace = "path/to/workspace"

# Set layer to apply symbology to
inputLayers = ["in_layer_first.lyr","in_layer_second.lyr","in_layer_third.lyr"]

# Set layer that output symbology will be based on
symbologyLayer = "in_symbology_layer.lyr"

# Apply the symbology from the symbology layer to the input layer
for layer in inputLayers:
    arcpy.ApplySymbologyFromLayer_management (layer, symbologyLayer)

Em essência, você cria uma camada de simbologia (camada_de_simologia) que mantém em relação ao design / estilo. Em seguida, copie essa simbologia de camadas para cada uma das outras camadas, conforme listado no seu índice.


Resposta Anterior

Você pode usar um estilo de uma camada atual em sua lista de índice / camada e aplicá-lo a outras camadas.

Para cada camada subsequente (abaixo da camada de estilo pretendida)> clique com o botão direito do mouse> propriedades> simbologia> importar estilo de outra camada

Michael Markieta
fonte
Oi Michael, Obrigado pela resposta, mas eu estava olhando para fazê-lo para várias camadas ao mesmo tempo.
Ramakrishna Billakanti
Ramakrishna, editei minha resposta com a esperança de encontrar uma solução melhor via arcpy.
Michael Markieta 17/01/12
13

Eu tive o mesmo problema e encontrei outra solução. É simples e realmente prático, nem precisa da criação de um arquivo * .lyr.

Na caixa do editor do ArcGIS ModelBuilder, projetei o processo abaixo:

  1. Crie uma variável, definindo o tipo de dados para 'camada'. Nas propriedades definidas como "uma lista de valores" e "Parâmetro do modelo". (Opcional: renomeie o objeto como "Camadas para simbolizar", para uma identificação mais fácil).
  2. Crie uma variável, definindo o tipo de dados para 'camada'. Nas propriedades definidas como "Parâmetro do modelo". (Opcional: renomeie para "Camada de simbologia").
  3. Adicione a ferramenta “Aplicar simbologia da camada”, geralmente em 'C: \ Arquivos de programas \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Ferramentas de gerenciamento de dados.tbx \ Camadas e tabelas'. (Opcional: renomeie o objeto de saída para "Camadas simbolizadas").
  4. Em Propriedades da ferramenta 'Aplicar simbologia da camada', marque como Condições prévias: “Camadas para simbolizar” e “Camada de simbologia”.
  5. Conecte “Camadas para simbolizar” à ferramenta que a define como Camada de entrada.
  6. Conecte “Camada de simbologia” à ferramenta que a define como Camada de entrada.
  7. Salve e feche a janela do editor de modelos.
  8. Abrindo o modelo, uma tabela aparecerá.
  9. Arraste a camada a ser usada como modelo da simbologia, no sumário (TOC) do projeto do mapa e solte-o no respectivo campo da tabela. Clique no botão 'verificar valores'.
  10. Selecione várias camadas do sumário, arraste e solte-as no respectivo campo da tabela. Clique no botão 'verificar valores'.
  11. Executá-lo.
  12. Clique em F5 para atualizar a exibição do mapa.

Notas: Provavelmente não funcionará se você usar ao mesmo tempo camadas de diferentes tipos de geometrias. Não funciona bem se você usar camadas de uma só vez com o mesmo nome. Eu não tentei com camadas não vetoriais.

Etapas no construtor de modelos.

Etapas ao executar o modelo.

O script exportado para python do modelo é:

 # Import arcpy module
import arcpy

# Script arguments
Layers_to_symbolize = arcpy.GetParameterAsText(0)

Symbology_Layer = arcpy.GetParameterAsText(1)

# Local variables:
Symbolized_Layers = Layers_to_symbolize

# Process: Apply Symbology From Layer
arcpy.ApplySymbologyFromLayer_management(Layers_to_symbolize, Symbology_Layer)
danalif
fonte
1
Pelo menos para ArcGIS 10.2, etapa 6 deve ler "Connect‘Simbologia Layer’para a ferramenta de defini-lo como Simbologia Camada "
jbaums
Eu estava usando Python e fiz um loop for agradável que funcionou bem, mas não atualizou minha simbologia. Descobri que você precisa primeiro abrir o documento .mdx, definir o df, atualizar a simbologia e alterar a simbologia. Eu vi a resposta 2, usando o Model Builder (que é como eu construí meu script Python). Isso foi MUITO mais fácil e menos demorado, e agora tenho uma ferramenta salva para que eu possa fazer isso com outros conjuntos de dados.
Heidi Church
1
Em vez de colocar o 'Simbologia da Camada' ferramenta em Model Builder, você pode simplesmente clique direito sobre ele na caixa de ferramentas e executado como Batch
Sir Adelaide
8

Antes da mensagem de @Aaron, usei as informações do @Roy para criar minha própria solução que eu poderia incorporar no script do ArcToolbox. Ver abaixo:

# Import modules
import arcpy

#Get the current Map Document
mxd = arcpy.mapping.MapDocument("CURRENT")

# Script arguments
Template_Layer = arcpy.GetParameterAsText(0)
LayerList = arcpy.GetParameterAsText(1)
Layers_to_Symbolize = LayerList.split(";")

# Process: Apply Symbology From Layer
for UpdateLayer in Layers_to_Symbolize:
    arcpy.AddMessage("Updating: " + UpdateLayer)
    arcpy.ApplySymbologyFromLayer_management(UpdateLayer,Template_Layer)

# Refresh the Table of Contents to reflect the change
arcpy.RefreshTOC()

#Delete the MXD from memory
del mxd

Eu pude ver esse conceito como uma ferramenta potencial para um Suplemento Python 10.1 na barra de ferramentas.

RyanKDalton
fonte
4

Eu vim com uma maneira bastante simples de ativar a simbologia de múltiplas camadas de uma só vez, usando a caixa de ferramentas vinculada abaixo. Depois de adicionar esta caixa de ferramentas, arraste e solte a camada de simbologia única e arraste e solte todas as camadas às quais deseja aplicar a simbologia (destinos). As regras gerais sobre correspondência do tipo geográfico (linhas, pontos, polys) provavelmente se aplicam aqui. Depois que a ferramenta for executada, ela aparecerá como nada aconteceu. Atualize sua tela (F5) - a tela será atualizada com a simbologia correspondente. Clique em uma camada para ver suas propriedades e clique em "OK" e o símbolo do sumário será atualizado.

Faça o download do arquivo Zip da caixa de ferramentas aqui.

Aqui está o script, se isso for mais fácil:

import arcpy

# Script arguments
Target_Layers = arcpy.GetParameterAsText(0)
if Target_Layers == '#' or not Target_Layers:
Target_Layers = "LayersToBeChanged" # provide a default value if unspecified

Symbology_Layer = arcpy.GetParameterAsText(1)
if Symbology_Layer == '#' or not Symbology_Layer:
Symbology_Layer = "SymbologyLayer" # provide a default value if unspecified

# Local variables:
Output_Symbology = Symbology_Layer

# Process: Apply Symbology From Layer (3)
arcpy.ApplySymbologyFromLayer_management(Target_Layers, Symbology_Layer)
user21466
fonte