addItem
Краткая информация
Класс LegendElement обеспечивает доступ к свойствам и методам для управления элементами легенды в компоновке.
Обсуждение
Объект LegendElement — это особый тип элемента компоновки MapSurroundElement. Он также имеет связь с объектом MapFrame, но обладает дополнительными свойствами, специфичными для легенд, включая доступ к объектам LegendItem. Метод listElements для объекта Layout возвращает список Python объектов элементов компоновки страницы. Чтобы получить список только объектов LegendElement, используйте константу LEGEND_ELEMENT для параметра element_type. Значение wildcard также может быть использовано для дальнейшей тонкой настройки поиска на основе значения name элемента. Присвойте каждому элементу компоновки страницы уникальное имя, чтобы на него можно было легко ссылаться.
Вы можете создавать легенды, используя метод createMapSurroundElement для объекта Layout с параметром map_surround_type равным LEGEND.Можно указать существующее значение StyleItem во время создания, чтобы управлять отображением элемента в компоновке.
По умолчанию слои, добавленные к объекту Map, автоматически добавляются к объекту LegendElement. Это позволяет создать компоновку с пустой картой и легендой и динамически обновлять эти элементы при добавлении в карту новых слоев. Существует несколько свойств, которые начинаются с 'sync', они позволяют управлять тем, как элементы добавляются в легенду. Можно также использовать свойства fittingStrategy и columnCount для управления оформлением легенды.
Значения elementPositionX и elementPositionY базируются на положении якорной точки элемента, которое установлено на вкладке Формат. Если вы хотите, чтобы объект LegendElement увеличивался вниз при добавлении слоев, установите положение якоря в верхнем левом углу. Положение можно изменить, используя метод setAnchor.
Свойство items возвращает список классов LegendItem, которые можно изменять по отдельности для настройки содержания легенды. Класс LegendElement также предоставляет методы AddItem, MoveItem и RemoveItem, позволяющие управлять элементами в легенде. Классы LegendElement и LegendItem обеспечивают доступ только к общим свойствам. Детализированный доступ может быть предоставлен с помощью Доступа Python CIM.
Синтаксис
addItem()
Свойства
| Имя | Объяснение | Тип данных |
|---|---|---|
|
anchor (Только для чтения) |
Возвращает одно из следующих строковых значений, которые описывают текущую позицию якоря. Чтобы изменить значение, используйте метод
|
String |
|
columnCount (Чтение / Запись) |
Число заданных столбцов в легенде. Это свойство применяется, только если для |
Long |
|
elementHeight (Чтение / Запись) |
Высота элемента в единицах страницы. |
Double |
|
elementPositionX (Чтение / Запись) |
x-положение позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы. |
Double |
|
elementPositionY (Чтение / Запись) |
y-положение позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы. |
Double |
|
elementRotation (Чтение / Запись) |
Поворачивает элемент относительно положения якоря. Положительное значение поворачивает против часовой стрелки, а отрицательное – по часовой. |
Double |
|
elementWidth (Чтение / Запись) |
Ширина элемента в единицах страницы. |
Double |
|
fittingStrategy (Чтение / Запись) |
Строка, которая содержит корректный метод стратегии подгонки. Корректными значениями являются следующие:
|
String |
|
items (Только для чтения) |
Возвращает список связанных классов LegendItem. Это свойство нельзя установить вручную, но вы можете итерировать элементы легенды и модифицировать их свойства. |
List |
|
isOverflowing (Только для чтения) |
Возвращает |
Boolean |
|
locked (Чтение / Запись) |
Если установлено значение |
Boolean |
|
longName (Только для чтения) |
Полное имя элемента, включая информацию о группе, если она существует. Например, элемент с именем ' |
String |
|
mapFrame (Чтение / Запись) |
Ссылка на связанный MapFrame. |
MapFrame |
|
name (Чтение / Запись) |
Имя элемента. Важно, чтобы все элементы имели уникальное имя, благодаря чему на них было бы легко ссылаться по имени. |
String |
|
parentGroupElement (Только для чтения) |
Если элемент находится в группе, возвращаемым значением будет |
GroupElement |
|
showTitle (Чтение / Запись) |
Булево значение, определяющее, будет ли заголовок отображаться в легенде. |
Boolean |
|
syncLayerOrder (Чтение / Запись) |
Булево значение, определяющее, будут ли элементы легенды в том же порядке, что и слои на карте. |
Boolean |
|
syncLayerVisibility (Чтение / Запись) |
Булево значение, определяющее, будет ли элемент автоматически виден в легенде, если он виден на карте. |
Boolean |
|
syncNewLayer (Чтение / Запись) |
Булево значение, определяющее, будет ли элемент автоматически добавлен в легенду, если он добавлен к карте. |
Boolean |
|
syncReferenceScale (Чтение / Запись) |
Булево значение, определяющее, должны ли символы соответствовать масштабу символов на карте, если задан базовый масштаб. |
Boolean |
|
title (Чтение / Запись) |
Текстовая строка, представляющая заголовок легенды. |
String |
|
type (Только для чтения) |
Возвращает значение |
String |
|
visible (Чтение / Запись) |
Возвращает |
Boolean |
Методы
addItem(layer, {add_position})
Позволяет добавить Слой в легенду, используя базовые свойства размещения.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
layer |
Ссылка на объект Layer, представляющий слой, добавленный в легенду как LegendItem. |
Layer |
|
add_position (Дополнительный) |
Константа, определяющая место добавленного слоя в легенде.
(Значение по умолчанию — TOP) |
String |
Возвращаемое значение
| Тип данных | Объяснение |
|---|---|
|
LegendItem |
Объект LegendItem. |
applyStyleItem(style_item)
Применяет StyleItem к LegendElement.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
style_item |
A reference to a |
StyleItem |
getDefinition(cim_version)
Возвращает определение CIM элемента легенды.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
cim_version |
A string that represents the major version of the CIM that will be used.
|
String |
Возвращаемое значение
| Тип данных | Объяснение |
|---|---|
|
Object |
Возвращает определение CIM для значения |
moveItem(reference_item, move_item, {move_position})
Позволяет разместить элемент легенды в конкретном месте в легенде.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
reference_item |
Объект LegendItem, представляющий существующей элемент легенды и определяет местоположение, в которое |
LegendItem |
|
move_item |
Ссылка на объект LegendItem, представляющий слой, выбираемый для перемещения. |
Layer |
|
move_position (Дополнительный) |
Константа, которая определяет размещение перемещаемого слоя по отношению к базовому слою.
(Значение по умолчанию — BEFORE) |
String |
removeItem(remove_item)
Позволяет удалить элемент легенды из легенды.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
remove_item |
Ссылка на объект LegendItem, представляющий элемент, выбираемый для удаления. |
LegendItem |
setAnchor(anchor)
Метод setAnchor, управляющий положением якоря для LegendElement.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
anchor |
A string that specifies the location of the anchor position.
|
String |
setDefinition(definition_object)
Задает определение CIM элемента легенды.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
definition_object |
A modified CIM definition object originally retrieved using |
Object |
Пример кода
Следующий скрипт добавляет новую легенду в компоновку и обновляет несколько свойств. Перед добавлением файла слоя он отключает синхронизацию слоев, чтобы цветовая карта ландшафта не отображалась. После добавления слоя синхронизация слоев снова включается.
import arcpy
p = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite_Trails.aprx')
#Create a new legend and set legend properties
lyt = p.listLayouts('Main Attractions')[0]
mf = lyt.listElements('MapFrame_Element', 'Yose*')[0]
legSi = p.listStyleItems('ArcGIS 2D', 'LEGEND', key='*Legend 3*' )[0]
leg = lyt.createMapSurroundElement(arcpy.Point(0.75,3.5), 'LEGEND', mf, legSi, 'New Legend Element')
leg.elementWidth = 7
leg.elementHeight = 3
leg.fittingStrategy = 'AdjustFontSize'
leg.columnCount = 5
leg.title = 'Yosemite National Park'
#Add a layer file but first turn of legend layer synchronization
leg.syncNewLayer = False
lyr = arcpy.mp.LayerFile(r'C:\Projects\YosemiteNP\LayerFiles\Terrain.lyrx')
m = p.listMaps('Yosemite National Park')[0]
m.addLayer(lyr, 'BOTTOM')
leg.syncNewLayer = True
p.saveACopy(r"C:\Projects\YosemiteNP\Yosemite_Trails_OUT.aprx")
Следующий скрипт устанавливает для fittingStrategy значение ManualColumns а для columnCount — значение 4. Затем скрипт создает словарь, включающий имя элемента легенды и столбцы, в которые он будет помещен. Наконец, скрипт итерирует все элементы легенды и помещает их в соответствующий столбец на основе значений словаря.
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(os.path.join(relpath, 'NewMexicoGeology', 'NewMexicoGeology.aprx'))
lyt = p.listLayouts('Layout')[0]
leg = lyt.listElements('LEGEND_ELEMENT')[0]
#Change Title and fitting strategy to (4) Manual Columns
leg.fittingStrategy = 'ManualColumns'
leg.columnCount = 4
#Dictionary of item name and column pairs
legDict = {'Cretaceous' : 1,
'Mississippian' : 1,
'Tertiary' : 2,
'Silurian' : 2,
'Ordovician' : 2,
'Quaternary' : 3,
'Jurassic' : 3,
'Devonian' : 3,
'Permian': 4,
'Proterozoic' : 4,
'Other' : 4 }
#Place each legend item into the appropriate column based on name
for legItm in leg.items:
legItm.column = legDict[legItm.name]
p.saveACopy(os.path.join(relpath, 'NewMexicoGeology', 'NewMexicoGeology_OUT.aprx'))
Следующий скрипт использует доступ Python CIM для изменения символов заголовка легенды и ширины патча (образца). Он также использует CIM для изменения формы патча для каждого класса в уникальном средстве отображения значений.
p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('Layout')[0]
leg = lyt.listElements('LEGEND_ELEMENT')[0]
#Use Legend poperties to display and modify title text
leg.showTitle = True
leg.title = "Legend CIM Changes"
#CIM modifications to Title font properties and patch width
lyt_cim = lyt.getDefinition('V3')
for elm in lyt_cim.elements:
if elm.name == "Legend":
leg_cim = lyt_cim.elements[1]
leg_cim.titleSymbol.symbol.height = 30
leg_cim.titleSymbol.symbol.horizontalAlignment = 'Center'
leg_cim.titleSymbol.symbol.fontStyleName = 'Bold'
leg_cim.titleSymbol.symbol.symbol.symbolLayers[0].color.values = [255,0,0,100]
for itm in reversed(elm.items): #Done in reversed order
itm.patchWidth = 50
lyt.setDefinition(lyt_cim)
#CIM modification to layer patch shape (it affects legend items)
m = p.listMaps('Overview Map')[0]
for itm in leg.items:
lyr = m.listLayers(itm.name)[0]
if lyr.symbology.renderer.type == 'UniqueValueRenderer':
lyr_cim = lyr.getDefinition('V3')
for grp in lyr_cim.renderer.groups: #Iterate through each group
for cls in grp.classes: #Iterate through each class
cls.patch = "AreaNaturalPoly" #Called Natural area in app
lyr.setDefinition(lyr_cim)