Ändern der Symbologie mehrerer Ebenen mit ArcMap / ArcPy?

10

Gibt es eine Möglichkeit, die Symbologie für mehrere Ebenen in ArcMap oder ArcCatalog zu ändern? Ich möchte die Symbologie mehrerer Ebenen gleichzeitig ändern.

Ramakrishna Billakanti
quelle
3
Mit applySymbologyFromLayer können Sie ein wirklich einfaches Skript-Tool erstellen . Sie müssen lediglich die Ebenen per Drag & Drop in das Dialogfeld ziehen.
Roy
Wenn Sie eine Lyr-Datei mit mehreren Ebenen erstellen und hineinziehen (oder über die Schaltfläche Daten hinzufügen hinzufügen), werden alle in der Lyr gespeicherten Symbologie- und Beschriftungseinstellungen angewendet. Beachten Sie, dass Sie es nicht auf vorhandene Ebenen anwenden, sondern sie mit dieser Methode erneut einfügen.
Brad Nesom
@ BradNesom- Vielen Dank für den Vorschlag, aber ich spreche speziell über das Ändern der Symbologie mehrerer Ebenen, die sich bereits im Inhaltsverzeichnis befinden. Grundsätzlich wird eine "Vorlage" der Symbologie von einer (vorhandenen) Ebene im Inhaltsverzeichnis auf viele andere (vorhandene) Ebenen im Inhaltsverzeichnis angewendet.
RyanKDalton
2
Es verwirrt mich, warum diese Funktionalität nicht in ArcMap integriert ist ...
jbaums
Warum nicht einfach alle Ebenen zu einer zusammenführen und dann die Farbe dieser einen Ebene ändern?
Robert

Antworten:

11

Bearbeiten Sie können dieses von ESRI bereitgestellte Skript verwenden, um die vorliegende Aufgabe abzuschließen (gleiche Idee wie unten):

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

in_layer: Die Ebene, auf die die Symbologie angewendet wird.
Feature-Ebene; Rasterebene; TIN-Schicht; Netzwerkanalyse-Schicht

in_symbology_layer: Die Symbologie dieser Ebene wird auf die Eingabeebene angewendet.
Feature-Layer; Rasterebene; TIN-Ebene; Netzwerkanalyseschicht

Oder erweitern Sie dies in Form von Standalone-Skripten (denken Sie an 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)

Im Wesentlichen erstellen Sie eine Symbologieebene (in_symbology_layer), die Sie in Bezug auf Design / Stil beibehalten. Anschließend kopieren Sie diese Ebenensymbologie auf jede Ihrer anderen Ebenen, wie in Ihrem Inhaltsverzeichnis aufgeführt.


Vorherige Antwort

Sie können einen Stil aus einer aktuellen Ebene in Ihrem Inhaltsverzeichnis / Ihrer Ebenenliste verwenden und auf Ihre anderen Ebenen anwenden.

Für jede nachfolgende Ebene (unterhalb der beabsichtigten Stilebene)> Rechtsklick> Eigenschaften> Symbologie> Stil aus einer anderen Ebene importieren

Michael Markieta
quelle
Hallo Michael, danke für die Antwort, aber ich wollte es für mehrere Ebenen gleichzeitig tun.
Ramakrishna Billakanti
Ramakrishna, ich habe meine Antwort mit der Hoffnung bearbeitet, dass Sie über arcpy eine bessere Lösung finden.
Michael Markieta
13

Ich hatte das gleiche Problem und fand eine andere Lösung. Es ist einfach und sehr praktisch, es muss nicht einmal eine * .lyr-Datei erstellt werden.

Im ArcGIS ModelBuilder-Editor habe ich den folgenden Prozess entworfen:

  1. Erstellen Sie eine Variable und definieren Sie den Datentyp für 'Layer'. In seinen Eigenschaften als "Liste der Werte" und "Modellparameter" festgelegt. (Optional: Benennen Sie das Objekt zur einfacheren Identifizierung in „Zu symbolisierende Ebenen“ um.)
  2. Erstellen Sie eine Variable und definieren Sie den Datentyp für 'Layer'. In seinen Eigenschaften als "Modellparameter" festgelegt. (Optional: Benennen Sie es in "Symbology Layer" um.)
  3. Fügen Sie das Tool "Symbologie aus Ebene anwenden" hinzu, normalerweise unter "C: \ Programme \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Ebenen und Tabellenansichten". (Optional: Benennen Sie das Ausgabeobjekt in „Symbolisierte Ebenen“ um.)
  4. Aktivieren Sie in den Eigenschaften des Tools "Symbologie aus Ebene anwenden" die folgenden Voraussetzungen: "Zu symbolisierende Ebenen" und "Symbologieebene".
  5. Verbinden Sie "Ebenen zum Symbolisieren" mit dem Werkzeug, das es als Eingabeebene einstellt.
  6. Verbinden Sie "Symbology Layer" mit dem Tool, das es als Input Layer festlegt.
  7. Speichern und schließen Sie das Modelleditorfenster.
  8. Beim Öffnen des Modells wird eine Tabelle angezeigt.
  9. Ziehen Sie den Layer, der als Symbologievorlage verwendet werden soll, aus dem Inhaltsverzeichnis (TOC) des Kartenprojekts und legen Sie ihn im entsprechenden Tabellenfeld ab. Klicken Sie auf die Schaltfläche "Werte prüfen".
  10. Wählen Sie mehrere Ebenen des Inhaltsverzeichnisses aus und ziehen Sie sie in das entsprechende Tabellenfeld. Klicken Sie auf die Schaltfläche "Werte prüfen".
  11. Starte es.
  12. Klicken Sie auf F5, um die Kartenanzeige zu aktualisieren.

Hinweise: Es funktioniert wahrscheinlich nicht, wenn Sie gleichzeitig Ebenen mit unterschiedlichen Geometrietypen verwenden. Es funktioniert nicht gut, wenn Sie gleichnamige Ebenen gleichzeitig verwenden. Ich habe es nicht mit Nicht-Vektor-Ebenen versucht.

Schritte im Modellbauer.

Schritte beim Ausführen des Modells.

Das in Python exportierte Skript des Modells lautet:

 # 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
quelle
1
Zumindest für ArcGIS 10.2 sollte in Schritt 6 "Connect" Symbology Layer "mit dem Tool " Symbology Layer "verbunden sein
jbaums
Ich hatte Python verwendet und eine schöne for-Schleife erstellt, die einwandfrei lief, aber meine Symbologie nicht aktualisierte. Ich habe festgestellt, dass Sie zuerst das MDX-Dokument öffnen, die DF festlegen, die Symbologie aktualisieren und dann die Symbologie ändern müssen. Ich habe dann Antwort 2 mit Model Builder gesehen (so habe ich ursprünglich mein Python-Skript erstellt). Dies war viel einfacher und weniger zeitintensiv. Außerdem habe ich jetzt ein Tool gespeichert, damit ich dies für andere Datensätze tun kann.
Heidi Church
1
Anstatt das Tool "Symbologie aus Ebene" in Model Builder einzufügen, können Sie es einfach mit der rechten Maustaste in der Toolbox anklicken und als Batch
Sir Adelaide
8

Kurz vor der Nachricht von @Aaron habe ich die Informationen von @Roy verwendet, um meine eigene Lösung zu erstellen, die ich in ein ArcToolbox-Skript integrieren kann. Siehe unten:

# 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

Ich könnte dieses Konzept als potenzielles Werkzeug für ein 10.1 Python-Add-In in der Symbolleiste sehen.

RyanKDalton
quelle
4

Ich habe eine ziemlich einfache Möglichkeit gefunden, die Symbologie mehrerer Ebenen gleichzeitig mithilfe der unten verlinkten Toolbox zu aktivieren. Nachdem Sie diese Toolbox hinzugefügt haben, ziehen Sie die einzelne Symbologieebene per Drag & Drop und ziehen Sie dann alle Ebenen, auf die Sie die Symbologie anwenden möchten, per Drag & Drop (Ziele). Hier gelten wahrscheinlich allgemeine Regeln zum Abgleichen des Geotyps (Linien, Punkte, Polys). Sobald das Tool ausgeführt wurde, wird angezeigt, dass nichts passiert ist. Aktualisieren Sie Ihre Anzeige (F5) - Die Anzeige wird mit der passenden Symbologie aktualisiert. Klicken Sie auf eine Ebene, um deren Eigenschaften anzuzeigen, und klicken Sie auf "OK". Das Inhaltsverzeichnissymbol wird aktualisiert.

Laden Sie hier die Zip-Datei für die Toolbox herunter.

Hier ist das Skript, wenn das einfacher ist:

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
quelle