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:
|
String |
updateRenderer(renderer_name)
Метод updateRenderer используется для изменения способа отображения слоя.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
renderer_name |
The supported renderers are as follows:
|
String |
Пример кода
Следующий скрипт проходит через каждый векторный слой и тестирует, поддерживает ли его 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
Следующий скрипт демонстрирует, как использовать Доступ к 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'))