UniqueValuesSymbology (arcpy.mapping)

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

Класс UniqueValueSymbology предоставляет доступ к различным свойствам, которые позволяют изменить отображение слоя с использованием уникальных значений.

Обсуждение

Класс UniqueValuesSymbology предоставляет доступ к ограниченному числу свойств и методов, которые позволяют автоматизировать символы слоя в документе карты (.mxd) или файле слоя (.lyr). Доступны базовые операции, такие как изменение значений и надписей класса, а также поля, на котором основаны символы. Для доступа к полному набору свойств и настроек символов слоя, например изменения отдельных символов для отдельных классов, необходимо внести эти изменения в пользовательском интерфейсе ArcMap и сохранить их в файле слоя. Эти пользовательские настройки затем можно применить к существующим слоям с помощью функции UpdateLayer.

Слой может использовать любое число символов, но не все из них можно изменить. Не все слои используют класс UniqueValuesSymbology, поэтому сначала необходимо проверить, использует ли слой этот класс символов перед тем, как попытаться изменить его свойства. Свойство symbologyType класса Layer предназначено для этой цели. Сначала проверьте, является ли свойство symbololgyType для слоя уникальными значениями (if lyr.symbologyType == "UNIQUE_VALUES":), затем создайте переменную для класса UniqueValuesSymbology для этого слоя (lyrSymbolClass = lyr.symbology).

Свойство symbologyType объекта Layer доступно только для чтения. Другими словами, вы не можете изменить символы уникальных значений на градуированные цвета или градуированные символы. Можно изменить только свойства определенного класса символов в слое. Единственный способ изменить тип символов – опубликовать нужный результат в файле слоя и использовать функцию UpdateLayer.

Значение valueField используется для изменения поля, на котором основаны уникальные значения. После определения нового поля имеет смысл незамедлительно вызывать метод addAllValues, чтобы весь обновленный список классов был создан автоматически. По аналогии с пользовательским интерфейсом вызов addAllValues приведет к автоматической сортировке классов по возрастанию. Если необходимо изменить последовательность, воспользуйтесь свойствами classValues и classLabels.

Метод addAllValues также полезен в ситуациях, когда данные постоянно обновляются. Слои, представленные уникальными значениями в документе карты, не обновляются динамически при изменении данных. Метод addAllValues предоставляет механизм автоматизации этого процесса.

Если вы изменяете символы в окне Python и указываете ссылку на документ с помощью ключевого слова CURRENT, вы можете не сразу увидеть изменения в приложении ArcMap. Чтобы обновить документ карты, используйте функции RefreshActiveView и RefreshTOC.

Свойства

СвойствоОбъяснениеТип данных
classDescriptions
(чтение и запись)

Список строк или чисел, представляющих описания каждого уникального значения, которое может отображаться на легенде документа карты. Доступ к этим значениям осуществляется только в пользовательском интерфейсе ArcMap путем щелчка правой кнопкой мыши символа, расположенного на закладке Символы (Symbology) диалогового окна Свойства слоя (Layer Properties), и последующего выбора опции Изменить описание (Edit Description). Список classDescriptions должен иметь то же количество элементов и располагаться в том же порядке, что и свойство classValues.

List
classLabels
(чтение и запись)

Список строк или чисел, представляющих надписи для каждого уникального значения, которое отображается в таблице содержания или элементах легенды документа карты. Список classDescriptions должен иметь то же количество элементов и располагаться в том же порядке, что и свойство classValues. Если это свойство не задано, его значения не будут отличаться от значений classValues.

List
classValues
(чтение и запись)

Список строк или чисел, представляющих границы классов. Изменение этого свойства приведет к автоматическому изменению других свойств символов уникальных значений на основе новой информации. Рекомендуется всегда задавать это значение до определения значений classDescriptions и classLabels.

List
showOtherValues
(чтение и запись)

Определение для этого параметра значения True приведет к отображению символа для всех значений, которые не соответствуют текущему списку classValues.

Boolean
valueField
(чтение и запись)

Строка, представляющая допустимое имя поля набора данных, используемая для символов уникальных значений слоя. Изменение этого значения приведет к автоматическому изменению других свойств символов на основе новой информации.

String

Обзор метода

МетодОбъяснение
addAllValues ()

Добавляет все уникальные значения в символы.

Методы

addAllValues ()

Метод addAllValues обновляет символику слоя так, что все значения отображаются в уникальном значении символики. Этот метод используется, когда уникальные значения добавляются в слой после создания символики в ArcMap. Вызов метода addAllValues вставит эти новые значения в список существующих значений.

Пример кода

1-ый пример использования UniqueValuesSymbology

Следующий скрипт меняет valueField, на котором основываются символы уникальных значений. Затем addAllValues используется для обновления списка классов.

import arcpy
mxd = arcpy.mapping.MapDocument("current")
lyr = arcpy.mapping.ListLayers(mxd, "Population")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
  lyr.symbology.valueField = "SUB_REGION"
  lyr.symbology.addAllValues()
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd
2-ой пример использования UniqueValuesSymbology

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

import arcpy
mxd = arcpy.mapping.MapDocument("current")
lyr = arcpy.mapping.ListLayers(mxd, "Population")[0]
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", "\"POP2000\" > 20000000")
stateList = []
rows = arcpy.da.SearchCursor(lyr, ["STATE_NAME"])
for row in rows:
  stateList.append(row[0])

if lyr.symbologyType == "UNIQUE_VALUES":
  lyr.symbology.classValues = stateList
  lyr.symbology.showOtherValues = False

arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd
5/10/2014