RasterClassifiedSymbology (arcpy.mapping)
Резюме
Класс RasterClassifiedSymbology предоставляет доступ к различным свойствам, которые позволяют изменить отображение классифицированного растра в слое.
Обсуждение
Класс RasterClassifiedSymbology предоставляет доступ к ограниченному числу свойств и методов, которые позволяют автоматизировать символы слоя в документе карты (.mxd) или файле слоя (.lyr). Доступны базовые операции, такие как изменение числа классов, изменение граничных значений и надписей класса, а также поля, на котором основаны символы. Для доступа к полному набору свойств и настроек символов слоя, например изменения отдельных символов для отдельных классов, необходимо внести эти изменения в пользовательском интерфейсе ArcMap и сохранить их в файле слоя. Эти пользовательские настройки затем можно применить к существующим слоям с помощью функции UpdateLayer.
Слой может использовать любое число символов, но не все из них можно изменить. Не все слои используют класс RasterClassifiedSymbology, поэтому сначала необходимо проверить, использует ли слой этот класс символов перед тем, как попытаться изменить его свойства. Свойство symbologyType класса Layer предназначено для этой цели. Сначала проверьте, является ли свойство symbologyType для слоя классифицированным растром (if lyr.symbologyType == "RASTER_CLASSIFIED":), затем создайте переменную для класса RasterClassifiedSymbology для этого слоя (lyrSymbolClass = lyr.symbology).
Свойство symbologyType объекта Layer доступно только для чтения. Другими словами, вы не можете изменить символы классифицированного растра на символы растра уникальных значений. Можно изменить только свойства определенного класса символов в слое. Единственный способ изменить тип символов – опубликовать нужный результат в файле слоя и использовать функцию UpdateLayer.
Метод классификации нельзя изменить. Если вы хотите использовать другие методы классификации, вам необходимо заранее создать файлы слоя и использовать их для обновления слоя и последующего изменения свойств, которые можно изменить. Единственным исключением из этого правила является установка classBreakValues. Как и в пользовательском интерфейсе ArcMap, явная установка classBreakValues автоматически задает ручной метод классификации. Так же, как и в пользовательском интерфейсе ArcMap, после выбора ручного метода классификации, параметр numClasses изменить нельзя.
В отличие от пользовательского интерфейса ArcMap, вы можете задать минимальное значение при установке параметра classBreakValues. Первое значение в списке classBreakValues является минимальным; все остальные значения являются граничными значениями класса, как они отображаются в интерфейсе ArcMap. Поэтому в списке 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 |
excludedValues (чтение и запись) | Список строк, содержащий значения или диапазоны значений, которые следует исключить из классификации, разделенные точкой с запятой. Например, 1; 3; 5-7; и 8.5-12.1. Значения будут удалены из классификации, следовательно, не будут отображаться. | String |
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.
Пример кода
Следующий скрипт изменяет символы слоя в текущем документе карты. Скрипт сначала проверяет, имеются ли на слое символы классифицированного растра. Наконец, скрипт изменяет число свойств класса RasterClassifiedSymbology и обновляет изображение.
Поскольку в этим примере используется ключевое слово CURRENT для доступа к документу карты, он должен выполняться из ArcMap. Это потому, что объект MapDocument ссылается на документ карты, который в данный момент загружен в приложение ArcMap. Более подробная информация о доступе к документам карт находится в разделе справки к классу MapDocument.
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Lakes")[0]
lyr = arcpy.mapping.ListLayers(mxd, "lakene.tif", df)[0]
if lyr.symbologyType == "RASTER_CLASSIFIED":
lyr.symbology.classBreakValues = [1, 60, 118, 165, 255]
lyr.symbology.classBreakLabels = ["1 to 60", "61 to 118",
"119 to 165", "166 to 255"]
lyr.symbology.classBreakDescriptions = ["Class A", "Class B",
"Class C", "Class D"]
lyr.symbology.excludedValues = '0'
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd, df, lyr
Следующий скрипт изменяет символы для слоя в документе карты на диске. Сначала он обновляет символы слоя, используя файл слоя на диске, с помощью функции UpdateLayer. Файл слоя содержит пользовательскую цветовую схему, которая применяется к слою. Затем он проверяет, имеются ли на слое символы классифицированного растра. Далее скрипт вызывает метод reclassify. Этот метод обновляет свойства символов на основе актуальных данных об источнике слоя и статистике, а не на основе данных из файла слоя. Наконец, результат экспортируется в файл PDF.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\StudyArea.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Lakes")[0]
lyr = arcpy.mapping.ListLayers(mxd, "lakene.tif", df)[0]
lyrFile = arcpy.mapping.Layer(r"C:\Project\Data\Lakes\lake_blue.lyr")
arcpy.mapping.UpdateLayer(df, lyr, lyrFile, True)
if lyr.symbologyType == "RASTER_CLASSIFIED":
lyr.symbology.reclassify()
arcpy.mapping.ExportToPDF(mxd, r"C:\Project\Output\Lakes.pdf")
del mxd, df, lyr, lyrFile