Modification de la symbologie de plusieurs couches à l'aide d'ArcMap / ArcPy?


10

Existe-t-il un moyen de modifier la symbologie de plusieurs couches dans ArcMap ou ArcCatalog. Je veux changer la symbologie de plusieurs couches à la fois.


3
Vous pouvez créer un outil de script vraiment simple en utilisant applySymbologyFromLayer . Tout ce que vous avez à faire est de glisser-déposer les calques dans la boîte de dialogue.
Roy

Si vous créez un fichier lyr de plusieurs couches et faites-le glisser (ou ajoutez-le à partir du bouton Ajouter des données), il appliquera tous les paramètres de symbologie et d'étiquetage qui sont enregistrés dans le lyr. Notez que vous ne l'appliquez pas aux calques existants mais les réintroduisez avec cette méthode.
Brad Nesom

@ BradNesom - Merci pour la suggestion, mais je parle spécifiquement de modifier la symbologie de plusieurs couches qui sont déjà dans la table des matières. Fondamentalement, appliquer un «modèle» de symbologie d'une couche (existante) dans la table des matières à de nombreuses autres couches (existantes) dans la table des matières.
RyanKDalton

2
Cela me déconcerte pourquoi cette fonctionnalité n'est pas intégrée à ArcMap ...
jbaums

pourquoi ne pas simplement fusionner tous les calques en un, puis changer la couleur de ce calque?
Robert

Réponses:


11

Modifier Vous pouvez utiliser ce script fourni par ESRI pour terminer la tâche à accomplir (même idée que ci-dessous):

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

in_layer: la couche à laquelle la symbologie sera appliquée.
Couche d'entités; couche raster; Couche TIN; Couche d'analyse de réseau

in_symbology_layer: la symbologie de cette couche est appliquée à la couche d'entrée.
Couche de fonctionnalités; Couche raster; Couche TIN; Couche d'analyse de réseau

Ou étendez ceci sous forme de script autonome (pensez 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 substance, vous créez une couche de symbologie (in_symbology_layer) que vous conservez en ce qui concerne la conception / le style. Ensuite, vous copiez la symbologie de ces couches sur chacune de vos autres couches, comme indiqué dans votre table des matières.


Réponse précédente

Vous pouvez utiliser un style d'un calque actuel dans votre table des matières / liste des calques et l'appliquer à vos autres calques.

Pour chaque couche suivante (sous la couche de style souhaitée)> clic droit> propriétés> symbologie> importer le style d'une autre couche


Salut Michael, Merci pour la réponse mais je cherchais à le faire pour plusieurs couches à la fois.
Ramakrishna Billakanti

Ramakrishna, j'ai édité ma réponse dans l'espoir que vous trouviez une meilleure solution via arcpy.
Michael Markieta

13

J'ai eu le même problème et j'ai trouvé une autre solution. C'est simple et vraiment pratique, il n'a même pas besoin de créer un fichier * .lyr.

Dans la boîte de l'éditeur ArcGIS ModelBuilder, j'ai conçu le processus ci-dessous:

  1. Créez une variable, définissant le type de données à «calque». Dans ses propriétés définies comme «une liste de valeurs» et «paramètre de modèle». (Facultatif: renommez l'objet en «Calques à symboliser», pour une identification plus facile).
  2. Créez une variable, définissant le type de données à «calque». Dans ses propriétés définies comme «Paramètres du modèle». (Facultatif: renommez-le «Couche de symbologie»).
  3. Ajoutez l'outil «Appliquer la symbologie à partir de la couche», généralement dans «C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views». (Facultatif: renommez l'objet de sortie en «Couches symbolisées»).
  4. Dans les propriétés de l'outil «Appliquer la symbologie à partir du calque», cochez comme conditions préalables: «Calques à symboliser» et «Couche de symbologie».
  5. Connectez «Calques à symboliser» à l'outil en le définissant comme calque d'entrée.
  6. Connectez «Symbology Layer» à l'outil en le définissant comme Input Layer.
  7. Enregistrez et fermez la fenêtre de l'éditeur de modèle.
  8. En ouvrant le modèle, un tableau apparaîtra.
  9. Faites glisser la couche à utiliser comme modèle de symbologie, depuis la table des matières (TOC) du projet de carte et déposez-la dans le champ de table respectif. Cliquez sur le bouton «vérifier les valeurs».
  10. Sélectionnez plusieurs couches de la table des matières, faites-les glisser et déposez-les dans le champ de table respectif. Cliquez sur le bouton «vérifier les valeurs».
  11. Exécuter.
  12. Cliquez sur F5 pour actualiser l'affichage de la carte.

Remarques: Cela ne fonctionnera probablement pas si vous utilisez en même temps des couches de différents types de géométries. Cela ne fonctionne pas bien si vous utilisez simultanément des calques portant le même nom. Je n'ai pas essayé avec des couches non vectorielles.

Étapes dans le générateur de modèles.

Étapes lors de l'exécution du modèle.

Le script exporté en python du modèle est:

 # 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
Au moins pour ArcGIS 10.2, l'étape 6 doit lire "Connecter" Couche de symbologie "à l'outil en la définissant comme Couche de symbologie "
jbaums

J'avais utilisé Python et fait une belle boucle for qui fonctionnait bien, mais cela n'a pas mis à jour ma symbologie. J'ai trouvé que vous devez d'abord ouvrir le document .mdx, définir le df, mettre à jour la symbologie, puis modifier la symbologie. J'ai ensuite vu la réponse 2, en utilisant Model Builder (c'est ainsi que j'ai initialement construit mon script Python). C'était BEAUCOUP plus facile et moins gourmand en temps, et j'ai maintenant un outil enregistré pour pouvoir le faire pour d'autres jeux de données.
Heidi Church

1
Plutôt que de placer l'outil 'Symbologie à partir de la couche' dans Model Builder, vous pouvez simplement cliquer dessus avec le bouton droit dans la boîte à outils et exécuter en tant que lot
Sir Adelaide

8

Juste avant le message de @Aaron, j'ai utilisé les informations de @Roy pour créer ma propre solution que je pouvais incorporer dans un script ArcToolbox. Voir ci-dessous:

# 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

Je pourrais voir ce concept comme un outil potentiel pour un complément Python 10.1 dans la barre d'outils.


4

J'ai trouvé un moyen assez simple d'activer la symbologie à plusieurs couches à la fois en utilisant la boîte à outils liée ci-dessous. Après avoir ajouté cette boîte à outils, faites glisser et déposez la couche de symbologie unique, puis faites glisser et déposez toutes les couches auxquelles vous souhaitez appliquer la symbologie (cibles). Les règles générales sur la correspondance du type géographique (lignes, points, polys) s'appliquent probablement ici. Une fois l'outil exécuté, il apparaîtra comme rien ne s'est passé. Actualisez votre affichage (F5) - l'affichage sera mis à jour avec la symbologie correspondante. Cliquez sur un calque pour afficher ses propriétés et cliquez sur "OK" et le symbole TOC sera mis à jour.

Téléchargez le fichier Zip de la boîte à outils ici.

Voici le script si c'est plus simple:

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.