Краткая информация
С помощью класса Symbology вы можете получить доступ к способу отображения слоя или палитре растрового слоя.
Обсуждение
Типичный рабочий процесс: сослаться на symbology векторного слоя, выполнить изменения и затем применить эти изменения обратно к слою.
Важно сначала убедиться, что ваш слой поддерживает способ отображения или палитру, а также знать его тип перед выполнением обновлений. Сборку функции hasattr можно использовать для этой цели.
Следующие типы растяжки в настоящий момент поддерживаются в arcpy.mp: SimpleRenderer, GraduatedColorsRenderer, GraduatedSymbolsRenderer, UnclassedColorsRenderer и UniqueValueRenderer.
Поддерживаются следующие цветовые схемы: RasterClassifyColorizer, RasterStretchColorizer и RasterUniqueValueColorizer.
Примечание:
Поддерживаемые растяжки и цветовые схемы отражают только основные свойства. Дополнительные свойства доступны при использовании CIM. Посмотрите раздел справки Python CIM Access с дополнительной информацией и примерами кодов.Свойства
Свойство | Описание | Тип данных |
colorizer (только чтение) | Получает объект палитры для растрового слоя. Поддерживаются следующие типы: RasterClassifyColorizer и RasterUniqueValueColorizer. | Object |
renderer (только чтение) | Получает объект способа отображения для векторного слоя. Поддерживаемые типы включают: GraduatedColorsRenderer, GraduatedSymbolsRenderer, SimpleRenderer или UniqueValueRenderer. | Object |
Обзор метода
Метод | Описание |
updateColorizer (colorizer_name) | Метод updateColorizer используется для изменения палитры растрового слоя. |
updateRenderer (renderer_name) | Метод updateRenderer используется для изменения способа отображения слоя. |
Методы
updateColorizer (colorizer_name)
Параметр | Описание | Тип данных |
colorizer_name | The supported renderers are as follows:
| String |
Вы можете обновить поддерживаемую палитру только на поддерживаемую палитру. Например, вы можете обновить палитру классифицированного растра на палитру уникальных значений растра или наоборот, но вы не можете обновить назначение отдельных цветов, так как в текущий момент это не поддерживается.
updateRenderer (renderer_name)
Параметр | Описание | Тип данных |
renderer_name | The supported renderers are as follows:
| String |
Способ отображения SimpleRenderer такой же, как способ отображения с помощью единого символа, который вы видите в приложении. Это имя используется для поддержки согласованности с .NET API.
Пример кода
Следующий скрипт проходит через каждый векторный слой и тестирует, поддерживает ли его 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")
В следующем скрипте сначала тестируется, поддерживают ли символы слоя свойство 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')
В следующем скрипте показано, как использовать доступ 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