Modifica della simbologia di più livelli usando ArcMap / ArcPy?


10

Esiste un modo per modificare la simbologia per più livelli in ArcMap o ArcCatalog. Voglio cambiare la simbologia di più livelli contemporaneamente.


3
È possibile creare uno strumento di script davvero semplice usando applySymbologyFromLayer . Tutto quello che dovresti fare è trascinare e rilasciare i livelli nella finestra di dialogo.
Roy

Se si crea un file lyr di più livelli e lo si trascina (o lo si aggiunge dal pulsante Aggiungi dati), verranno applicate tutte le simbologie e le impostazioni di etichettatura salvate nel lyr. Nota che non lo applichi ai livelli esistenti ma li ricolleghi con questo metodo.
Brad Nesom,

@ BradNesom- Grazie per il suggerimento ma sto specificatamente parlando di alterare la simbologia di più livelli che sono già nel sommario. Fondamentalmente applicare un "modello" di simbologia da uno strato (esistente) nel sommario a molti altri livelli (esistenti) nel sommario.
RyanKDalton,

2
Mi sorprende il motivo per cui questa funzionalità non è integrata in ArcMap ...
jbaums

perché non unire tutti i livelli in uno solo e quindi cambiare il colore di quello strato?
Robert,

Risposte:


11

Modifica È possibile utilizzare questo script fornito da ESRI per completare l'attività a portata di mano (stessa idea di seguito):

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

in_layer: il livello a cui verrà applicata la simbologia.
Livello funzionalità; Livello raster; TIN Layer; Network Analysis Layer

in_symbology_layer: la simbologia di questo livello viene applicata al livello di input.
Livello caratteristica; Strato raster; strato TIN; Livello di analisi della rete

Oppure estendi questo sotto forma di script autonomo (pensa 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)

In sostanza, si crea un livello di simbologia (in_symbology_layer) che si mantiene rispetto a design / stile. Quindi copi la simbologia dei livelli su ciascuno degli altri livelli come elencato nel sommario.


Risposta precedente

È possibile utilizzare uno stile da un livello corrente nel sommario / elenco dei livelli e applicarlo agli altri livelli.

Per ogni livello successivo (sotto il livello di stile desiderato)> fare clic con il tasto destro> proprietà> simbologia> importa stile da un altro livello


Ciao Michael, grazie per la risposta ma stavo cercando di farlo per più livelli contemporaneamente.
Ramakrishna Billakanti,

Ramakrishna, ho modificato la mia risposta nella speranza di trovare una soluzione migliore tramite arcpy.
Michael Markieta,

13

Ho avuto lo stesso problema e ho trovato un'altra soluzione. È semplice e molto pratico, non ha nemmeno bisogno della creazione di un file * .lyr.

Nella casella dell'editor ArcGIS ModelBuilder, ho progettato il processo seguente:

  1. Crea una variabile, definendo il tipo di dati su 'layer'. Nelle sue proprietà impostato come "un elenco di valori" e "Parametro modello". (Opzionale: rinominare l'oggetto in "Livelli da simbolizzare", per una più facile identificazione).
  2. Crea una variabile, definendo il tipo di dati su 'layer'. Nelle sue proprietà impostato come "Parametro modello". (Facoltativo: rinominalo in "Livello simbologia").
  3. Aggiungi lo strumento "Applica simbologia dal livello", di solito in "C: \ Programmi \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views". (Opzionale: Rinomina l'oggetto di output in "Livelli simbolizzati").
  4. In Proprietà dello strumento 'Applica simbologia dal livello' controlla come Prerequisiti: "Livelli da simboleggiare" e "Livello simbologia".
  5. Collegare "Livelli da simbolizzare" all'impostazione dello strumento come Input Layer.
  6. Collegare "Symbology Layer" allo strumento impostandolo come Input Layer.
  7. Salvare e chiudere la finestra dell'editor del modello.
  8. Aprendo il modello, apparirà una tabella.
  9. Trascina il livello da utilizzare come modello di simbologia, dal sommario (TOC) del progetto della mappa e rilascialo nel rispettivo campo della tabella. Fai clic sul pulsante "Verifica valori".
  10. Selezionare più livelli del sommario, trascinarli e rilasciarli nel rispettivo campo della tabella. Fai clic sul pulsante "Verifica valori".
  11. Eseguirlo.
  12. Fai clic su F5 per aggiornare la visualizzazione della mappa.

Note: Probabilmente non funzionerà se si utilizzano contemporaneamente strati di diversi tipi di geometrie. Non funziona bene se si utilizzano contemporaneamente layer con lo stesso nome. Non ho provato con livelli non vettoriali.

Passaggi nel generatore di modelli.

Passaggi durante l'esecuzione del modello.

Lo script esportato su Python del modello è:

 # 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)

1
Almeno per ArcGIS 10.2, il passaggio 6 dovrebbe leggere "Connetti" Symbology Layer "allo strumento impostandolo come
Symbology

Avevo usato Python e creato un bel ciclo per il ciclo che funzionava bene, tuttavia non ha aggiornato la mia simbologia. Ho scoperto che è necessario prima aprire il documento .mdx, impostare df, aggiornare la simbologia, quindi modificare la simbologia. Ho quindi visto la risposta 2, usando Model Builder (che è come ho originariamente creato il mio script Python). Questo è stato MOLTO più facile e meno dispendioso in termini di tempo, inoltre ora ho uno strumento salvato in modo da poterlo fare per altri set di dati.
Heidi Church,

1
Invece di inserire lo strumento "Simbologia dal livello" in Model Builder, puoi semplicemente fare clic con il pulsante destro del mouse su di esso nella Casella degli strumenti ed eseguire come batch
Sir Adelaide,

8

Appena prima del messaggio di @Aaron, ho usato le informazioni di @Roy per creare la mia soluzione che avrei potuto incorporare nello script di ArcToolbox. Vedi sotto:

# 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

Ho potuto vedere questo concetto come un potenziale strumento per un componente aggiuntivo 10.1 Python sulla barra degli strumenti.


4

Ho escogitato un modo abbastanza semplice per abilitare contemporaneamente la simbologia a più livelli utilizzando la casella degli strumenti collegata di seguito. Dopo aver aggiunto questa casella degli strumenti, trascinare e rilasciare il singolo livello di simbologia, quindi trascinare tutti i livelli a cui si desidera applicare la simbologia (destinazioni). Regole generali sulla corrispondenza del tipo geografico (linee, punti, polis) probabilmente si applicano qui. Una volta eseguito lo strumento, apparirà come se nulla fosse successo. Aggiorna il display (F5): il display si aggiornerà con la simbologia corrispondente. Fare clic su un livello per visualizzarne le proprietà e fare clic su "OK" e il simbolo TOC verrà aggiornato.

Scarica qui il file zip per la casella degli strumenti.

Ecco lo script se è più semplice:

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.