Usando ArcGIS Desktop, c'è un modo per la legenda, per mostrare solo gli elementi secondari che vengono visualizzati sulla mappa?
Usando ArcGIS Desktop, c'è un modo per la legenda, per mostrare solo gli elementi secondari che vengono visualizzati sulla mappa?
Risposte:
Legend Limiter
Legend Limiter funziona solo su layer che utilizzano "categorie di valori univoci" per definire la simbologia. Questo stile di legenda può essere impostato nella scheda Simbologia della finestra di dialogo Proprietà livello. Legend Limiter non limiterà la simbologia dei livelli impostati con la simbologia a singolo simbolo.
Non è necessario scrivere alcun ArcPy aggiuntivo per questo. Usa semplicemente le legende dinamiche (che sono state aggiunte ad ArcGIS 10.1) quando crei le tue mappe.
Le Opzioni estensione mappa consentono di controllare il modo in cui gli elementi della legenda idonei interagiscono con l'estensione della mappa corrente. Se la casella di controllo Mostra solo le classi che sono visibili nell'estensione corrente della mappa è selezionata, una classe di elementi della legenda apparirà nella legenda solo se una caratteristica di quella classe è nell'estensione corrente. Se nessuna funzionalità di quell'elemento legenda è nella misura corrente, l'intero elemento verrà rimosso dalla legenda.
Nella vista della mappa, fai clic con il pulsante destro del mouse sulla legenda per aprire la finestra Proprietà, quindi fai clic sulla scheda "Elementi". In "Opzioni estensione mappa", seleziona "Mostra solo le classi che sono visibili nell'estensione corrente della mappa".
Si aggiorna mentre ti sposti sulla mappa o attiva / disattiva le classi all'interno del livello.
penso che questo codice aiuterà:
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