Краткая информация
Класс UniqueValueRenderer представляет собой метод отображения с помощью уникальных значений.
Обсуждение
Если вы измените текущий метод визуализации на UniqueValueRenderer, то сначала надо будет указать соответствующее значение свойства fields. Это множественное свойство, поскольку вы можете создать набор уникальных значений на основе нескольких полей. Поэтому свойство fields занимает целый список, даже если используется только одно поле. После того, как вы примените fields, программа визуализации автоматически сгенерирует все уникальные значения. Если по каким-либо причинам в слой добавляются новые значения, то вам будет необходимо заново настроить способ отображения, чтобы все значения были добавлены заново. Вы можете сделать это, изменив свойство fields, или же использовать метод addValues.
Вам необходимо разобраться, как способ отображения управляет уникальными значениями, чтобы вы могли выполнять навигацию по структуре класса для изменения отдельных элементов и их значений. Свойство groups возвращает список объектов ItemGroup. Каждый объект ItemGroup представляет категорию items, каждый из которых имеет собственный heading. По умолчанию имеется один ItemGroup. Свойство items возвращает список объектов Item. Когда у вас есть item, можно изменить такие свойства, как label и description. Вы также можете изменить symbol для каждого элемента. Причина, по которой свойство values имеет множественное число и возвращает список, заключается в том, что вы также можете группировать элементы в ItemGroup. Поэтому у каждого item может быть несколько значений.
Далее приведен способ, которым можно обрисовать структуру класса:
- groups - возвращает список объектов ItemGroup
- heading
- items - возвращает список объектов Item
- description
- label
- symbol
- values
Вы можете также добавлять значения из способа отображения. Каждое уникальное значение в действительности является item в модели объектов, и каждый элемент связан в ItemGroup. Для работы с addValues или removeValues потребуется словарь Python. Ключом словаря является название заголовка группы, а его значением – список значений на основе свойства fields. Есть также метод listMissingValues, который позволяет определить, какие значения в текущий момент отсутствуют в методе отображения. Значения будут отсутствовать только, если вы преднамеренно вызвали removeValues, так как по умолчанию этот способ отображения автоматически создаёт все уникальные значения, когда свойство fields задано.
Если ваша цель – создать новую группу заголовков для организации ваших элементов уникальных значений, то вам следует сначала вызвать removeValues, чтобы удалить элементы, а затем использовать addValues для создания новой группы с новой надписью heading.
Свойства
| Свойство | Описание | Тип данных |
| colorRamp (чтение и запись) | Предоставляет доступ к объекту ColorRamp. | ColorRamp |
| defaultSymbol (чтение и запись) | Символ, который может быть использован в качестве шаблона для обновления всех символов в каждом классе. | Symbol |
| fields (чтение и запись) | Список из одного или более полей, используемых методом отображения для определения уникального набора значений. | List |
| groups (чтение и запись) | Список объектов ItemGroup, содержащих уникальные значения. Если значения не были добавлены в метод отображения, количество элементов в группе может быть нулевым. | List |
| type (только чтение) | Возвращает строку, которая отображает тип способа отображения. | String |
| useDefaultSymbol (чтение и запись) | Логический параметр, управляющий отображением недобавленных значений. Если имеет значение True, то объекты отображаются. | Boolean |
Обзор метода
| Метод | Описание |
| addValues (values_or_items) | addValues предоставляет механизм для добавления отсутствующих значений в способе отображения уникальные значения. |
| listMissingValues () | listMissingValues предоставляет механизм для идентификации отсутствующих значений в способе отображения уникальные значения. |
| removeValues (values_or_items) | removeValues предоставляет механизм для удаления значений в способе отображения уникальные значения. |
Методы
addValues (values_or_items)
| Параметр | Описание | Тип данных |
values_or_items | Словарь, основанный на ключе, который содержит соответствие названия заголовка группы и значения, представленного как список значений в строке или как список элементов для добавления в группу. Например: addValues({"group name" : ["str1", "str2", "str3"]}) или addValues({"group name" : missingVals[0].items}) (Значение по умолчанию — None) | Dictionary |
Перед выполнением addValues рекомендуется сначала проверить пропускает ли способ отображения какие-либо значения при использовании способа listMissingValues. Если значения, которые вы добавили не корректны, они просто будут игнорироваться. Важно сбросить символы слоя с обновленной информацией перед продолжением обработки других элементов в способе отображения.
listMissingValues ()
| Тип данных | Описание |
| ItemGroup | ItemGroup обеспечивает доступ к информации уровня групп для UniqueValueRenderer. |
Каждый ItemGroup имеет heading и связанный набор объектов item, которые представляют уникальные значения. Если вы желаете добавить отсутствующие элементы из множества групп элементов назад в способ отображения, вам потребуется вызвать addValues несколько раз, по одному для каждой группы заголовка, в которую вы хотите добавить значения.
removeValues (values_or_items)
| Параметр | Описание | Тип данных |
values_or_items | Словарь, основанный на ключе, который содержит соответствие названия заголовка группы и значения, представленного как список значений в строке или как список элементов для добавления в группу. Например: removeValues({"group name" : ["str1", "str2", "str3"]}) (Значение по умолчанию — None) | Dictionary |
После выполнения removeValues вы можете подтвердить, будут ли значения удаляться с помощью метода listMissingValues. Важно сбросить символы слоя с обновленной информацией перед продолжением обработки других элементов в способе отображения.
Пример кода
Следующий скрипт сначала изменяет метод отображения на UniqueValueRenderer. Далее, для свойства fields он задаёт использовать отдельное поле, которое называется Percent. Затем он перебирает каждый Item в каждой ItemGroup и задает цвет RGB как красный и значение alpha, или прозрачность, соответствующее значению Percent каждого из объектов. И наконец он надписывает все значения, снова задает символы для слоя и сохраняет выходные данные.
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\UniqueValue.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('PercentCover*')[0]
sym = l.symbology
sym.updateRenderer('UniqueValueRenderer')
sym.renderer.fields = ['Percent']
for grp in sym.renderer.groups:
for itm in grp.items:
transVal = itm.values[0][0] #Grab the first "percent" value in the list of potential values
itm.symbol.color = {'RGB': [255, 0, 0, int(transVal)]}
itm.label = str(transVal) + '%'
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')Следующий скрипт сначала иллюстрирует два способа удаления и добавления значений в заголовок новой группы. Сначала он удаляет четыре названия штатов и затем добавляет те же элементы в новый заголовок группы Pacific Coast. Далее он использует removeValues, чтобы удалить шесть штатов Новая Англия, и затем применяет addValues, в зависимости от того, что возвратит метод listMissingValues. [0] в списке – это первая и единственная группа элементов, которая возвращается.
import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\UniqueValue.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('State_Polygons_Default')[0]
sym = l.symbology
sym.renderer.removeValues({"STATE_NAME" : ["Alaska", "California", "Oregon", "Washington"]})
l.symbology = sym
sym.renderer.addValues({"Pacific Coast" : ["Alaska", "California", "Oregon", "Washington"]})
l.symbology = sym
sym.renderer.removeValues({"STATE_NAME" : ["Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", "Vermont"]})
l.symbology = sym
missList = sym.renderer.listMissingValues()
sym.renderer.addValues({"New England" : missList[0].items})
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')