使用ArcMap / ArcPy更改多层的符号系统?


10

有没有一种方法可以更改ArcMap或ArcCatalog中多个图层的符号系统。我想一次更改多层的符号系统。


3
您可以使用applySymbologyFromLayer创建一个非常简单的脚本工具。您所要做的就是将图层拖放到对话框中。
罗伊

如果您创建了一个多层的lyr文件并将其拖入(或从添加数据按钮添加),它将应用所有符号系统以及保存在lyr中的标签设置。请注意,您不会将其应用于现有图层,而是使用此方法再次将它们引入。
布拉德·尼索姆

@ BradNesom-感谢您的建议,但我具体是在谈论更改目录中已经存在的多个图层的符号体系。基本上是将符号系统的“模板”从TOC中的一个(现有)层应用到TOC中的许多其他(现有)层。
RyanKDalton 2012年

2
这让我感到困惑,为什么该功能没有内置到ArcMap中……
jbaums 2014年

为什么不将所有图层合并为一层,然后更改该图层的颜色?
罗伯特

Answers:


11

编辑 您可以使用ESRI提供的此脚本来完成手头的任务(如下所示):

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

in_layer:符号体系将应用到的层。
特征层;栅格层;TIN层;网络分析层

in_symbology_layer:此层的符号系统应用于输入层。
特征层;栅格层; TIN层;网络分析层

或以独立脚本的形式扩展此功能(认为是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_symbology_layer)。然后,将目录符号复制到目录中列出的其他每个图层上。


上一个答案

您可以在目录/图层列表的当前图层中使用样式,并将其应用于其他图层。

对于每个后续图层(在您想要的样式图层下方)>右键单击>属性>符号系统>从其他图层导入样式


嗨,迈克尔,谢谢您的回答,但我想同时进行多层处理。
Ramakrishna Billakanti 2012年

罗摩克里希纳,我编辑了我的答案,希望您能通过arcpy找到更好的解决方案。
Michael Markieta 2012年

13

我遇到了同样的问题,并且找到了另一个解决方案。它简单而实用,它甚至不需要创建* .lyr文件。

在ArcGIS ModelBuilder编辑器框中,我设计了以下过程:

  1. 创建一个变量,将数据类型定义为“ layer”。在其属性中设置为“值列表”和“模型参数”。(可选:将对象重命名为“符号层”,以便于识别)。
  2. 创建一个变量,将数据类型定义为“ layer”。在其属性中设置为“模型参数”。(可选:将其重命名为“符号层”)。
  3. 通常在“ C:\ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views”中添加“从图层应用符号系统”工具。(可选:将输出对象重命名为“ Symbolized Layers”)。
  4. 在“从图层应用符号系统”工具的属性中,检查前提条件:“要符号化的图层”和“符号层”。
  5. 将“符号层”连接到将其设置为“输入层”的工具。
  6. 将“符号层”连接到将其设置为输入层的工具。
  7. 保存并关闭模型编辑器窗口。
  8. 打开模型,将出现一个表格。
  9. 从地图项目的目录(TOC)中将要用作符号系统模板的图层拖放到相应的表格字段中。点击“检查值”按钮。
  10. 选择目录的多层,将其拖放到相应的表格字段中。点击“检查值”按钮。
  11. 运行。
  12. 单击F5刷新地图显示。

注意:如果您同时使用不同类型的几何图形的图层,则可能无法使用。如果一次使用相同名称的图层,则效果不佳。我没有尝试使用非矢量层。

模型构建器中的步骤。

运行模型的步骤。

导出到该模型的python的脚本是:

 # 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
至少对于ArcGIS 10.2,第6步应阅读“将“符号层”连接到将其设置为符号层的工具”
jbaums 2014年

我一直在使用Python,并且为运行良好的for循环做了一个不错的选择,但是它没有更新我的符号系统。我确实发现您需要首先打开.mdx文档,设置df,更新符号体系,然后更改符号体系。然后,我看到了使用Model Builder(这是我最初构建Python脚本的方式)的答案2。这很容易且省时,而且我现在保存了一个工具,因此可以对其他数据集执行此操作。
海蒂教堂

1
您可以在工具箱中右键单击它,然后以批处理方式运行,而不是将“来自图层的符号学”工具放到模型构建器中
阿德莱德爵士

8

在@Aaron发出消息之前,我使用来自@Roy的信息来创建自己的解决方案,可以将其合并到ArcToolbox脚本中。见下文:

# 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

我可以将此概念视为工具栏上10.1 Python插件的潜在工具。


4

我想出了一种非常简单的方法,可以使用下面链接的工具箱一次启用多层符号系统。添加此工具箱后,拖放单个符号系统图层,然后将要应用符号系统的所有图层拖放到(目标)。有关匹配地理类型(线,点,多边形)的一般规则可能在此处适用。该工具运行后,将一无所获。刷新显示(F5)-显示将更新为匹配的符号系统。单击图层以查看其属性,然后单击“确定”,TOC符号将更新。

在此处下载工具箱的Zip文件。

如果更容易,请使用以下脚本:

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.