Kann die Legende in ArcGIS Desktop nur die auf der Karte angezeigten Unterelemente anzeigen?
Kann die Legende in ArcGIS Desktop nur die auf der Karte angezeigten Unterelemente anzeigen?
Antworten:
Legendenbegrenzer
Der Legendenbegrenzer funktioniert nur bei Layern, die "eindeutige Wertkategorien" zum Definieren der Symbologie verwenden. Dieser Legendenstil kann auf der Registerkarte Symbologie im Dialogfeld Layer-Eigenschaften festgelegt werden. Der Legendenbegrenzer schränkt die Symbologie von Layern, die mit einer einzelnen Symbolsymbologie eingerichtet wurden, nicht ein.
Hierfür muss kein zusätzlicher ArcPy geschrieben werden. Verwenden Sie beim Erstellen Ihrer Karten einfach dynamische Legenden (die in ArcGIS 10.1 hinzugefügt wurden).
Mit den Optionen für die Kartenausdehnung können Sie steuern, wie berechtigte Legendenelemente mit der aktuellen Kartenausdehnung interagieren. Wenn das Kontrollkästchen Nur Klassen anzeigen, die in der aktuellen Kartenausdehnung sichtbar sind aktiviert ist, wird eine Legendenelementklasse nur in der Legende angezeigt, wenn sich ein Feature dieser Klasse in der aktuellen Ausdehnung befindet. Wenn sich keine Features dieses Legendenelements in der aktuellen Ausdehnung befinden, wird das gesamte Element aus der Legende entfernt.
Klicken Sie in der Kartenansicht mit der rechten Maustaste auf die Legende, um das Eigenschaftenfenster zu öffnen, und klicken Sie dann auf die Registerkarte "Elemente". Wählen Sie unter "Optionen für Kartenausdehnung" die Option "Nur Klassen anzeigen, die in der aktuellen Kartenausdehnung sichtbar sind".
Es wird aktualisiert, wenn Sie sich auf der Karte bewegen oder Klassen innerhalb des Layers ein- und ausschalten.
Ich denke, dieser Code wird helfen:
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