LabelClass (arcpy.mapping)

Резюме

Обеспечивает доступ к свойствам класса надписи слоя.

Обсуждение

Объект LabelClass является очень важным для управления свойствами, такими как выражения надписи или SQL-запросы, которые связаны с индивидуальными классами надписи слоя.

Доступ к этим параметрам является важным, если слои карты перенаправляются в новую рабочую область. Может потребоваться обновление SQL-запроса классов надписи с точки зрения синтаксиса, если запрос выполняется для новой базы данных. Например, в персональных базах геоданных имена полей заключаются в квадратные скобки, а в файловых базах геоданных они заключаются в двойные кавычки. Помимо имен полей, может потребоваться изменение других SQL-свойств (групповых символов, других специальных символов, операторов и т.д.). Если не обновить SQL-запрос, рисование слоев может завершиться ошибкой. Дополнительные сведения об этих особых случаях см. в разделе Обновление и исправление источников данных в arcpy.mapping.

Выражение надписи использует обработчики VBScript, JScript или Python. Синтаксис и/или специальные символы для обработчиков не должны меняться (например, VBScript всегда использует квадратные скобки), но они должны учитывать возможное изменение имен полей. Площадь и периметр – часто используемые поля в выражении, имена которых могут меняться от одного источника данных к другому.

Не все слои поддерживают свойство labelClasses, так что может быть полезным заранее проверить метод the supports, например, layer.supports("SHOWLABELS") или layer.supports("LABELCLASSES"). Если слой поддерживает надписи, он также будет поддерживать свойство labelClasses, так что оба проверять нет необходимости.

Свойство labelClasses возвращает список объектов LabelClass. Для указания конкретного объекта LabelClass, необходимо пройти по всем элементами списка в цикле или указать номер индекса.

Свойства

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

Дает возможность получать или задавать имя для отдельного класса надписей слоя.

String
expression
(чтение и запись)

Дает возможность получать или задавать выражение для отдельного класса надписей слоя. Оно может быть простым и представлять собой одно поле или сложным и включать выражение VBScript, JScript или Python.

String
SQLQuery
(чтение и запись)

Дает возможность получать или задавать SQL-запрос для отдельного класса надписей слоя. Это бывает полезным, когда необходимо ограничить число надписей для определенных объектов.

String
showClassLabels
(чтение и запись)

Дает возможность получать или задавать видимость отдельных классов надписей.

Boolean

Пример кода

Пример 1 для LabelClass

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

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.supports("LABELCLASSES"):
        if lyr.showLabels:
            print "Layer name: " + lyr.name
            for lblClass in lyr.labelClasses:
                if lblClass.showClassLabels:
                    print "    Class Name:  " + lblClass.className
                    print "    Expression:  " + lblClass.expression
                    print "    SQL Query:   " + lblClass.SQLQuery
del mxd
Пример 2 для LabelClass

Следующий скрипт изменяет SQL-запрос, который ранее указывал на личную базу геоданных, однако теперь его слой указывает на файловую базу геоданных. Квадратные скобки изменяются на двойные кавычки, а групповой символ будет изменен со звездочки (*) на процент (%). Сохраняется новая карта вывода, исходный документ карты остается без изменений.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.supports("LABELCLASSES"):
        for lblClass in lyr.labelClasses:
            lblClass.SQLQuery = lblClass.SQLQuery.replace("[", "\"")
            lblClass.SQLQuery = lblClass.SQLQuery.replace("]", "\"")
            lblClass.SQLQuery = lblClass.SQLQuery.replace("*", "%")
mxd.saveACopy("c:/project/project2.mxd")
del mxd
9/11/2013