¿Cambiando la simbología de varias capas usando ArcMap / ArcPy?

10

¿Hay alguna manera de cambiar la simbología de varias capas en ArcMap o ArcCatalog? Quiero cambiar la simbología de varias capas a la vez.

Ramakrishna Billakanti
fuente
3
Podrías crear una herramienta de script realmente simple usando applySymbologyFromLayer . Todo lo que tendría que hacer es arrastrar y soltar las capas en el cuadro de diálogo.
Roy
Si crea un archivo lyr de varias capas y lo arrastra (o lo agrega desde el botón Agregar datos) aplicará toda la simbología y la configuración de etiquetado que se guardan en el lyr. Tenga en cuenta que no lo aplica a las capas existentes, sino que las vuelve a incorporar con este método.
Brad Nesom el
@ BradNesom- Gracias por la sugerencia, pero estoy hablando específicamente de alterar la simbología de varias capas que ya están en el TOC. Básicamente, aplicando una "Plantilla" de simbología de una capa (existente) en el TOC a muchas otras capas (existentes) en el TOC.
RyanKDalton
2
Me desconcierta por qué esta funcionalidad no está integrada en ArcMap ...
jbaums
¿Por qué no fusionar todas las capas en una sola y luego cambiar el color de esa capa?
Robert

Respuestas:

11

Editar Puede usar este script proporcionado por ESRI para completar la tarea en cuestión (la misma idea que a continuación):

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

in_layer: la capa a la que se aplicará la simbología.
Capa de funciones; Capa de trama; Capa TIN; Capa de análisis de red

in_symbology_layer: la simbología de esta capa se aplica a la capa de entrada.
Capa de funciones; Capa de trama; Capa de TIN; Capa de análisis de red

O extienda esto en forma de secuencias de comandos independientes (piense 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)

En esencia, crea una capa de simbología (in_symbology_layer) que mantiene con respecto al diseño / estilo. Luego copie la simbología de esas capas en cada una de sus otras capas como se enumera en su tabla de contenido.


Respuesta anterior

Puede usar un estilo de una capa actual en su tabla de contenido / lista de capas y aplicarlo a sus otras capas.

Para cada capa posterior (debajo de la capa de estilo deseada)> haga clic con el botón derecho> propiedades> simbología> importar estilo desde otra capa

Michael Markieta
fuente
Hola Michael, gracias por la respuesta, pero estaba buscando hacerlo para varias capas a la vez.
Ramakrishna Billakanti
Ramakrishna, he editado mi respuesta con la esperanza de que encuentres una mejor solución a través de arcpy.
Michael Markieta
13

Tuve el mismo problema y encontré otra solución. Es simple y realmente práctico, ni siquiera necesita la creación de un archivo * .lyr.

En el cuadro de editor de ArcGIS ModelBuilder, diseñé el siguiente proceso:

  1. Cree una variable, definiendo el tipo de datos a 'capa'. En sus propiedades se establece como "una lista de valores" y "Parámetro modelo". (Opcional: cambie el nombre del objeto a "Capas para simbolizar", para una identificación más fácil).
  2. Cree una variable, definiendo el tipo de datos a 'capa'. En sus propiedades se establece como "Parámetro modelo". (Opcional: cámbiele el nombre a "Capa de simbología").
  3. Agregue la herramienta "Aplicar simbología desde la capa", generalmente en 'C: \ Archivos de programa \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views'. (Opcional: cambie el nombre del objeto de salida a "Capas simbolizadas").
  4. En Propiedades de la herramienta 'Aplicar simbología desde capa' marque como Condiciones previas: "Capas para simbolizar" y "Capa de simbología".
  5. Conecte "Capas para simbolizar" a la herramienta configurándola como Capa de entrada.
  6. Conecte "Capa de simbología" a la herramienta configurándola como Capa de entrada.
  7. Guarde y cierre la ventana del editor de modelos.
  8. Al abrir el modelo, aparecerá una tabla.
  9. Arrastre la capa que se utilizará como plantilla de simbología, desde la tabla de contenido (TOC) del proyecto de mapa y suéltela en el campo de la tabla correspondiente. Haga clic en el botón 'verificar valores'.
  10. Seleccione varias capas de la tabla de contenido, arrástrelas y suéltelas en el campo de tabla correspondiente. Haga clic en el botón 'verificar valores'.
  11. Ejecutarlo.
  12. Haga clic en F5 para actualizar la visualización del mapa.

Notas: Probablemente no funcionará si usa al mismo tiempo capas de diferentes tipos de geometrías. No funciona bien si usa de una vez capas con el mismo nombre. No probé con capas que no son vectores.

Pasos en el generador de modelos.

Pasos al ejecutar el modelo.

El script exportado a python del modelo es:

 # 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
fuente
1
Al menos para ArcGIS 10.2, el paso 6 debería leer "Conectar" Capa de simbología "a la herramienta configurándola como Capa de simbología "
jbaums
Había estado usando Python e hice un buen ciclo for que funcionó bien, sin embargo, no actualizó mi simbología. Descubrí que primero debe abrir el documento .mdx, configurar el df, actualizar la simbología y luego cambiar la simbología. Luego vi la respuesta 2, usando Model Builder (que es como originalmente construí mi script Python). Esto fue MUCHO más fácil y menos intensivo en tiempo, además ahora tengo una herramienta guardada para poder hacer esto para otros conjuntos de datos.
Iglesia Heidi
1
En lugar de poner la herramienta 'Simbología de la capa' en Model Builder, puede hacer clic derecho sobre ella en la Caja de herramientas y ejecutarla como Batch
Sir Adelaide
8

Justo antes del mensaje de @Aaron, utilicé la información de @Roy para crear mi propia solución que podría incorporar al script de ArcToolbox. Vea abajo:

# 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

Podría ver este concepto como una herramienta potencial para un complemento de Python 10.1 en la barra de herramientas.

RyanKDalton
fuente
4

Se me ocurrió una forma bastante simple de habilitar la simbología de múltiples capas a la vez usando la caja de herramientas vinculada a continuación. Después de agregar esta caja de herramientas, arrastre y suelte la capa de simbología única y luego arrastre y suelte todas las capas a las que desea aplicar la simbología (objetivos). Las reglas generales sobre el tipo geográfico coincidente (líneas, puntos, polis) probablemente se apliquen aquí. Una vez que la herramienta se haya ejecutado, aparecerá como si nada hubiera pasado. Actualice su pantalla (F5): la pantalla se actualizará con la simbología correspondiente. Haga clic en una capa para ver sus propiedades y haga clic en "Aceptar" y el símbolo TOC se actualizará.

Descargue el archivo Zip de la caja de herramientas aquí.

Aquí está el script si eso es más 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)
usuario21466
fuente