Используя ArcGIS Desktop, есть ли у легенды способ отображать только те подпункты, которые отображаются на карте?
Используя ArcGIS Desktop, есть ли у легенды способ отображать только те подпункты, которые отображаются на карте?
Ответы:
Legend Limiter
Ограничитель легенды работает только со слоями, которые используют «категории уникальных значений» для определения символов. Этот стиль легенды можно настроить на вкладке «Символы» диалогового окна «Свойства слоя». Ограничитель легенды не ограничивает символику слоев, созданных с помощью символики с одним символом.
Для этого не нужно писать никаких дополнительных ArcPy. Просто используйте динамические легенды (которые были добавлены в ArcGIS 10.1), когда вы создаете свои карты.
Параметры экстента карты позволяют контролировать взаимодействие элементов легенды с текущим экстентом карты. Если установлен флажок Только показывать классы, видимые в текущем экстенте карты , класс элементов легенды будет отображаться в легенде только в том случае, если элемент этого класса находится в текущем экстенте. Если в текущем экстенте отсутствуют элементы из этого элемента легенды, весь элемент будет удален из легенды.
В представлении карты щелкните правой кнопкой мыши на легенде, чтобы открыть окно свойств, а затем перейдите на вкладку «Элементы». В разделе «Параметры экстента карты» выберите «Показывать только классы, видимые в текущем экстенте карты».
Он будет обновляться по мере перемещения по карте или включения / выключения классов в слое.
я думаю, что этот код поможет:
import arcpy
import arcpy.mapping
import os
import sys
from arcpy import env
import string
env.workspace = r"C:\Project"
for mxdname in arcpy.ListFiles("*.mxd"):
print mxdname
mxd = arcpy.mapping.MapDocument(r"C:\Project\\" + mxdname)
legend = arcpy.mapping.ListLayoutElements(mxd,"LEGEND_ELEMENT")[0]
for lyr in legend.listLegendItemLayers():
legend.updateItem(lyr, use_visible_extent = True)
print 'updateItem'
mxd.save()
del mxd