À l'aide d'ArcGIS Desktop, existe-t-il un moyen pour la légende de n'afficher que les sous-éléments affichés sur la carte?
À l'aide d'ArcGIS Desktop, existe-t-il un moyen pour la légende de n'afficher que les sous-éléments affichés sur la carte?
Réponses:
Limiteur de légende
Le Limiteur de légende ne fonctionne que sur les couches qui utilisent des "catégories de valeurs uniques" pour définir la symbologie. Ce style de légende peut être configuré dans l'onglet Symbologie de la boîte de dialogue Propriétés de la couche. Legend Limiter ne limitera pas la symbologie des couches configurées avec une symbologie à symbole unique.
Il n'est pas nécessaire d'écrire un ArcPy supplémentaire pour cela. Utilisez simplement des légendes dynamiques (qui ont été ajoutées dans ArcGIS 10.1) lorsque vous créez vos cartes.
Les options de l'étendue de la carte vous permettent de contrôler la façon dont les éléments de légende éligibles interagissent avec l'étendue de la carte actuelle. Si la case Afficher uniquement les classes visibles dans l'étendue de carte actuelle est cochée, une classe d'élément de légende n'apparaîtra dans la légende que si une entité de cette classe se trouve dans l'étendue actuelle. Si aucune entité de cet élément de légende ne se trouve dans l'étendue actuelle, l'élément entier sera supprimé de la légende.
Dans la vue de la carte, cliquez avec le bouton droit sur la légende pour ouvrir la fenêtre Propriétés, puis cliquez sur l'onglet "Éléments". Sous "Options de l'étendue de la carte", sélectionnez "Afficher uniquement les classes qui sont visibles dans l'étendue de la carte actuelle".
Il s'actualisera au fur et à mesure que vous vous déplacerez sur la carte ou basculerez entre les classes on / off dans la couche.
je pense que ce code aidera:
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