GraduatedSymbolsSymbology (arcpy.mapping)
Резюме
Класс GraduatedSymbolsSymbology обеспечивает доступ к различным свойствам, позволяющим изменить вид градуированных символов слоя.
Обсуждение
Класс GraduatedSymbolsSymbology предоставляет доступ к ограниченному числу свойств и методов, которые позволяют автоматизировать символы слоя в документе карты (.mxd) или файле слоя (.lyr). Доступны базовые операции, такие как изменение числа классов, изменение граничных значений и надписей класса, а также поля, на котором основаны символы. Для доступа к полному набору свойств и настроек символов слоя, например изменения отдельных символов для отдельных классов, необходимо внести эти изменения в пользовательском интерфейсе ArcMap и сохранить их в файле слоя. Эти пользовательские настройки затем можно применить к существующим слоям с помощью функции UpdateLayer.
В слое может использоваться любое количество символов, но не все из них можно изменить. Не все слои используют класс GraduatedSymbolsSymbology, поэтому сначала необходимо проверить, использует ли слой этот класс символов перед тем, как попытаться изменить его свойства. Свойство symbologyType класса Layer предназначено для этой цели. Сначала проверьте, указаны ли в свойстве symbologyType для слоя градуированные символы (if lyr.symbologyType == "GRADUATED_SYMBOLS":), затем создайте ссылку на переменную для класса GraduatedSymbolsSymbology для этого слоя (lyrSymbolClass = lyr.symbology).
Свойство symbologyType объекта Layer доступно только для чтения. Другими словами, вы не можете изменить градуированные символы на градуированные цвета или уникальные значения. Можно изменить только свойства определенного класса символов в слое. Единственный способ изменить тип символов – опубликовать нужный результат в файле слоя и использовать функцию UpdateLayer.
Метод классификации нельзя изменить. Если вы хотите использовать другие методы классификации, вам необходимо заранее создать файлы слоя и использовать их для обновления слоя и последующего изменения свойств, которые можно изменить. Единственным исключением из этого правила является установка classBreakValues. Как и в пользовательском интерфейсе ArcMap, явная установка classBreakValues автоматически задает ручной метод классификации. Опять же, как и в пользовательском интерфейсе ArcMap, после установки ручного метода классификации, параметр numClasses изменить нельзя.
В отличие от пользовательского интерфейса ArcMap вы можете задать минимальное значение при установке параметра classBreakValues. Первое значение в списке classBreakValues является минимальным. Все другие значения являются граничными значениями класса, показанными в пользовательском интерфейсе ArcMap. Поэтому в списке classBreakValues всегда будет на одно значение больше, чем в списках classBreakLabels и classBreakDescriptions.
Списки classBreakValues, classBreakLabels и classBreakDescriptions всегда должны сортироваться от наименьшего значения до наибольшего. Это также справедливо для слоев, которые были созданы с обратной сортировкой.
При установке одного параметра часто другие параметры изменяются автоматически. Например, если задать параметры numClasses, normalization и valueField, свойства classBreakValues, classBreakLabels и classBreakDescriptions будут автоматически изменены на основе текущего метода классификации. Поэтому порядок изменения свойств имеет большое значение.
Метод reclassify обновляет свойства символов слоя на основе базового источника данных. Это полезно при обновлении символов слоя с помощью функции UpdateLayer, когда символы хранятся в другом слое или файле слоя (.lyr). Допустим, например, что вы хотите обновить свойства цветов символов слоя в документе карты, символы которого хранятся в файле слоя. У слоя в документе карты и файла слоя разные источники данных. Минимальные и максимальные значения, а также ограничения класса в файле слоя могут отличаться от слоя в документе карты. При обновлении символов слоя в документе карты, символы которого хранятся в файле слоя, может привести к нежелательным последствиям (например, граничные значения класса будут совпадать со статистикой источника данных файла слоя в отличие от статистики источника данных слоя документа карты). Но если после функции UpdateLayer использовать метод reclassify(), конечный результат будет аналогичен использованию свойств цветов из символов файла слоя, но другие характеристики будут зависеть от базового источника данных слоя документа карты.
Если вы изменяете символы в окне Python и указываете ссылку на документ с помощью ключевого слова CURRENT, вы можете не сразу увидеть изменения в приложении ArcMap. Чтобы обновить документ карты, попробуйте использовать функции RefreshActiveView и RefreshTOC.
Свойства
Свойство | Объяснение | Тип данных |
classBreakDescriptions (чтение и запись) |
Отсортированный список строк, представляющих описания всех граничных значений классов, которые могут присутствовать в легенде документа карты. Доступ к этим значениям осуществляется только в пользовательском интерфейсе ArcMap путем щелчка правой кнопкой мыши символа, расположенного на закладке Символы (Symbology) диалогового окна Свойства слоя (Layer Properties), и последующего выбора опции Изменить описание (Edit Description). Число описаний в сортированном списке должно всегда быть на единицу меньше числа classBreakValues. Это связано с тем, что список classBreakValues содержит также минимальное значение, которое не показывается в пользовательском интерфейсе. Эти значения зависят практически от всех остальных свойств класса, поэтому лучше всего задавать их в последнюю очередь. | List |
classBreakLabels (чтение и запись) |
Отсортированный список строк, представляющих надписи для каждого граничного значения класса, отображаемые в таблице содержания и легенде документа карты. Число надписей в отсортированном списке должно всегда быть на единицу меньше, чем число classBreakValues. Это связано с тем, что список classBreakValues содержит также минимальное значение, которое не показывается в пользовательском интерфейсе. Эти значения зависят практически от всех остальных свойств класса, поэтому лучше всего задавать их в последнюю очередь. | List |
classBreakValues (чтение и запись) |
Отсортированный список чисел двойной точности, который включает минимальные и максимальные значения, представляющие границы классов. При задании classBreakValues, он автоматически задает свойство numClasses и метод классификации manual, а также обновляет другие свойства, такие как classBreakLabels. В отличие от пользовательского интерфейса ArcMap, здесь можно задать минимальное значение. Первое значение в списке представляет минимальное значение, а остальные значения являются границами классов, которые отображаются в пользовательском интерфейсе; поэтому число значений в списке classBreakValues всегда на единицу больше, чем в списках classBreakLabels и classBreakDescriptions. Изменение этого значения приведет к автоматическому изменению других свойств символов на основе новой информации. | List |
normalization (чтение и запись) |
Строка, представляющая имя поля набора данных, использующегося для нормализации. Изменение этого значения приведет к автоматическому изменению других свойств символов на основе новой информации. Поле нормализации можно удалить, задав значение None (например, lyr.symbology.normalization = None). | String |
numClasses (чтение и запись) |
Длинное целое число, представляющее число классов, которое будет использоваться в текущем методе классификации. Изменение этого значения приведет к изменению других свойств символа, таких как classBreakValues и classBreakLabels. Это значение не может быть задано, ели используется метод классификации manual; поэтому, numClasses не следует вызывать после свойства classBreakValues, поскольку оно автоматически задаст метод классификации manual. Изменение этого значения приведет к автоматическому изменению других свойств символов на основе новой информации. | Long |
valueField (чтение и запись) |
Строка, представляющая имя поля набора данных, используемого для символов классификации слоя. Изменение этого значения приведет к автоматическому изменению других свойств символов на основе новой информации. | String |
Обзор метода
Метод | Объяснение |
reclassify () |
Сбрасывает символы слоя согласно источнику данных слоя и статистике. |
Методы
Метод reclassify обновляет свойства символов слоя на основе базового источника данных. Это полезно при обновлении символов слоя с помощью функции UpdateLayer, когда символы хранятся в другом слое или файле слоя (.lyr). Этот метод автоматически обновляет свойства символов на основе информации об актуальном источнике данных слоя и его статистики. Информация, хранящаяся в файле слоя, при этом не используется. Этот метод нужно использовать с осторожностью, поскольку потенциально он может переписать свойства условных знаков. Метод reclassify восстановит classBreakValues, classBreakLabels и classBreakDescriptions Это не повлияет на numClasses или нормализацию. Метод reclassify не влияет на классификацию manual.
Пример кода
Приведенный ниже скрипт изменяет символы для всех слоев в документе карты. Он обрабатывает каждый слой, меняет поле значения, число классов и сохраняет документ карты.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.symbologyType == "GRADUATED_SYMBOLS":
lyr.symbology.valueField = "POP2007"
lyr.symbology.numClasses = 5
del mxd
Следующий скрипт изменяет символы для слоя в документе карты. Сначала он обновляет символы слоя, используя файл слоя на диске, с помощью функции UpdateLayer. Затем скрипт проверяет, используются ли в слое градуированные символы. Наконец, скрипт меняет ряд свойств класса GraduatedSymbolsSymbology и экспортирует полученный результат в PDF.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Census")[0]
lyr = arcpy.mapping.ListLayers(mxd, "StatePopulation", df)[0]
lyrFile = arcpy.mapping.Layer(r"C:\Project\LYRs\Population.lyr")
arcpy.mapping.UpdateLayer(df, lyr, lyrFile, True)
if lyr.symbologyType == "GRADUATED_SYMBOLS":
lyr.symbology.valueField = "POP2000"
lyr.symbology.classBreakValues = [250000, 999999, 4999999, 9999999, 35000000]
lyr.symbology.classBreakLabels = ["250,000 to 999,999", "1,000,000 to 4,999,999",
"5,000,000 to 9,999,999", "10,000,000 to 35,000,000"]
arcpy.mapping.ExportToPDF(mxd, r"C:\Project\Output\StatePopulation.pdf")
del mxd, lyrFile