Сводка
Класс 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 при щелчке правой кнопкой мыши на символе, отображаемом на вкладке Символы в диалоговом окне Свойства слоя, и выборе Изменить описание. Число описаний в отсортированном списке всегда должно быть на единицу меньше числа classBreakValues. Это происходит из-за того, что список classBreakValues также включает минимальное значение, которое вы не видите в пользовательском интерфейсе. На эти значения влияют изменения почти всех других свойств класса, поэтому рекомендуется задавать их в последнюю очередь. | List |
classBreakLabels (чтение и запись) | Отсортированный список строк, представляющих надписи для каждого граничного значения класса, которые появляются в таблице содержания или пунктов легенды документа карты. Число подписей в отсортированном списке всегда должно быть на единицу меньше числа classBreakValues. Это происходит из-за того, что список classBreakValues также включает минимальное значение, которое вы не видите в пользовательском интерфейсе. На эти значения влияют изменения почти всех других свойств класса, поэтому рекомендуется задавать их в последнюю очередь. | List |
classBreakValues (чтение и запись) | Отсортированный список минимальных и максимальных значений двойной точности, представляющих границы классов. При настройке classBreakValues автоматически задается свойство numClasses, а также метод классификации как manual и обновляются другие свойства, такие как classBreakLabels. В отличие от пользовательского интерфейса ArcMap, у нас имеется возможность задать минимальное значение. Первое значение в отсортированном списке представляет минимальное значение, а остальные значения являются границами классов, которые видны в пользовательском интерфейсе, поэтому в списке classBreakValues всегда будет на один элемент больше, чем в списках classBreakLabels и classBreakDescriptions. Изменение этого значения автоматически настроит остальные свойства символов на основе новой информации. | List |
excludedValues (чтение и запись) | Строка, представляющая значения или диапазоны для исключения из классификации, разделенные точкой с запятой, например, 0.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 ()
Метод reclassify обновляет свойства символов слоя на основе базового источника данных. Это полезно при обновлении символов слоя с помощью функции UpdateLayer, когда символы хранятся в другом слое или файле слоя (.lyr). Этот метод автоматически обновляет свойства символов на основе информации об актуальном источнике данных слоя и его статистики. Информация, хранящаяся в файле слоя, при этом не используется. Этот метод нужно использовать с осторожностью, поскольку потенциально он может переписать свойства условных знаков. Метод reclassify восстановит classBreakValues, classBreakLabels и classBreakDescriptions Это не повлияет на numClasses или нормализацию. Метод reclassify не влияет на классификацию manual.
Пример кода
RasterClassifiedSymbology, пример 1
Следующий скрипт изменяет символы слоя в текущем документе карты. Скрипт сначала проверяет, имеются ли на слое символы классифицированного растра. Наконец, скрипт изменяет число свойств класса 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
RasterClassifiedSymbology, пример 2
Следующий скрипт изменяет символы для слоя в документе карты на диске. Сначала он обновляет символы слоя, используя файл слоя на диске, с помощью функции 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