Skip to main content

updateColorizer

Краткая информация

С помощью класса Symbology вы можете получить доступ к способу отображения слоя или палитре растрового слоя.

Обсуждение

Типичный рабочий процесс: сослаться на symbology векторного слоя, выполнить изменения и затем применить эти изменения обратно к слою.

Важно сначала убедиться, что ваш слой поддерживает способ отображения или палитру, а также знать его тип перед выполнением обновлений. Для этой цели может быть использована встроенная функция hasattr.

Только следующие способы отображения векторного слоя поддерживаются на текущий момент в arcpy.mp: SimpleRenderer, GraduatedColorsRenderer, GraduatedSymbolsRenderer, UnclassedColorsRenderer и UniqueValueRenderer. Поддерживаются следующие палитры для растров: RasterClassifyColorizer, RasterStretchColorizer и RasterUniqueValueColorizer.

Поддерживаемые способы отображения и палитры предоставляют только базовый набор свойств. Дополнительные свойства доступны при использовании CIM. Для класса Layer доступны методы getSymbologyDefinition и setSymbologyDefinition. Эти методы могут быть использованы для обновления неподдерживаемых способов отображения или палитр arcpy.mp путем прямого внесения изменений в CIM либо замены условных обозначений, на которые есть ссылка из другого слоя в Map или LayerFile. Третий и четвертый примеры кода ниже демонстрируют эти рабочие процессы.

Синтаксис

updateColorizer()

Свойства

Имя Объяснение Тип данных

colorizer

(Только для чтения)

Получает объект палитры для растрового слоя. Поддерживаются следующие типы: RasterClassifyColorizer и RasterUniqueValueColorizer.

Object

renderer

(Только для чтения)

Получает объект способа отображения для векторного слоя. Поддерживаемые типы включают: GraduatedColorsRenderer, GraduatedSymbolsRenderer, SimpleRenderer или UniqueValueRenderer.

Object

Методы

updateColorizer(colorizer_name)

Метод updateColorizer используется для изменения палитры растрового слоя.

Имя Объяснение Тип данных

colorizer_name

The supported renderers are as follows:

  • RasterClassifyColorizer—A raster classify colorizer.

  • RasterStretchColorizer—A raster stretch colorizer.

  • RasterUniqueValueColorizer—A raster unique value colorizer.

String

updateRenderer(renderer_name)

Метод updateRenderer используется для изменения способа отображения слоя.

Имя Объяснение Тип данных

renderer_name

The supported renderers are as follows:

  • GraduatedColorsRenderer—A graduated colors renderer

  • GraduatedSymbolsRenderer—A graduated symbols renderer

  • SimpleRenderer—A single symbol renderer

  • UnclassedColorsRenderer—An unclassed colors renderer

  • UniqueValueRenderer—A unique value renderer

String

Пример кода

Пример символов 1

Следующий скрипт проходит через каждый векторный слой и тестирует, поддерживает ли его symbology свойство renderer, используя функцию hasattr. Затем, если способ отображения type является SimpleRenderer, он изменит его на GraduatedColorsRenderer с помощью метода updateRenderer, затем установит его значение breakCount равным 6. Наконец, он применит условные обозначения обратно к слою перед сохранением результатов.

import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(relpath + r'\\Symbol.aprx')
m = p.listMaps('Map')[0]

for lyr in m.listLayers():
  if lyr.isFeatureLayer:
    sym = lyr.symbology
    if hasattr(sym, 'renderer'):
      if sym.renderer.type == 'SimpleRenderer':
        sym.updateRenderer('GraduatedColorsRenderer')
        sym.renderer.breakCount = 6

        lyr.symbology = sym

p.saveACopy(relpath + r"\\SavedOutput.aprx")
Пример символов 2

В следующем скрипте сначала тестируется, поддерживают ли символы слоя свойство colorizer, затем подтверждается, что способ отображения – RasterClassifyColorizer. Далее изменяются classificationField и breakCount. Наконец, ColorRamp меняется на цветовую схему с именем Голубой в фиолетовый.

import arcpy
import os
import sys

relpath = os.path.dirname(sys.argv[0])

p = arcpy.mp.ArcGISProject(relpath + r'\\RasterClassify.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('Raster1')[0]
sym = l.symbology

if hasattr(sym, 'colorizer'):
    if sym.colorizer.type == 'RasterClassifyColorizer':
        sym.colorizer.classificationField = 'Value'
        sym.colorizer.breakCount = 7
        sym.colorizer.colorRamp = p.listColorRamps('Cyan to Purple')[0]
        l.symbology = sym

p.saveACopy(relpath + r'\\SavedOutput.aprx')
Symbology, пример 3

В следующем скрипте показано, как использовать доступ Python CIM для модификации дополнительных настроек символов, не представленных в arcpy.mp API. Скрипт добавляет эффект пунктира к контуру символа слоя для полигональных символов. Сначала скрипт получает определение слоя CIM. Затем он получает первый символ слоя, который является символом контура. Если эффект в слое отсутствует, он создает его, а затем модифицирует, добавляя эффект пунктира. Наконец, изменения CIM возвращаются обратно в слой. Дополнительную информацию по CIM см. в разделе справки Python CIM Access.

p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Symbology')[0]
l = m.listLayers('States_SingleSymbol')[0]

l_cim = l.getDefinition('V2')         #Get the Layer's CIM definition

#Symbol Level 1 (Solid Stroke)
symLvl1 = l_cim.renderer.symbol.symbol.symbolLayers[0]

#If a dashed effect does not exist, create one
if len(symLvl1.effects) == 0:
  newDash = arcpy.cim.CreateCIMObjectFromClassName('CIMGeometricEffectDashes', 'V2')
  newDash.dashTemplate = [5, 5]
  symLvl1.effects = [newDash]
#If a dashed effects does exist, modify it
else:
  dash = symLvl1.effects[0]
  dash.dashTemplate = [10, 10]

l.setDefinition(l_cim)                #Set the Layer's CIM definition
Symbology, пример 4

Следующий скрипт демонстрирует, как использовать Доступ к CIM в Python для применения неподдерживаемого способа отображения. Способ отображения круговой диаграммы из файла слоя применяется к способу отображения Единый символ на карте с помощью методов getSymbologyDefinition и setSymbologyDefinition.

import os
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Renderers')[0]

relpath = p.homeFolder

#Reference the two layers
l1 = m.listLayers('Counties_SingleSymbol')[0]
l2 = arcpy.mp.LayerFile(os.path.join(relpath, "LYRXs", "Counties_PieChart_MalesFemales.lyrx")).listLayers()[0]

#Set single symbol to Pie chart (from LYRX)
l1.setSymbologyDefinition(l2.getSymbologyDefinition('V3'))