Risposte:
Direi di si. La classe layer ha un metodo getSelectedExtent e Dataframe ha una proprietà extension . Non l'ho provato però.
Ho un pezzo di codice che funziona. L'ho trovato qui sul sito web dell'ESRI. Aggiungilo come script a un modello, quindi collega l'output di uno strumento di selezione per attributo. Fa esattamente quello che voglio.
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()
È come lo faccio. Potresti voler impostare anche la scala df.scale = yourscalehere
.
Come hai già ipotizzato,
df.zoomToSelectedFeatures()
cambierà l'estensione del frame di dati con tutte le funzionalità selezionate nel frame della mappa. Se ti interessa solo lo zoom su un set di selezione per un livello specifico, utilizza lyr.getSelectedExtent()
. Inoltre aggiusto il fattore di scala della mappa in modo che il mio codice sia simile al seguente:
df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()
o questo:
df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Quindi, per aggiungere a questo, ho avuto bisogno di tenere traccia della massima estensione su più livelli senza funzionalità selezionate. Il seguente codice seguirà l'estensione più lontana in ciascuna direzione. ext_object rimane costante per tutte le chiamate alla funzione e deve essere inizializzato su uno dei layer inclusi. L'argomento "layer" di track_extent è un oggetto arcpy.Mapping.Layer. Quando sei pronto per salvare la tua mappa, imposta l'estensione del tuo frame di dati tramite qualcosa come data_frame.extent = extension_object
extent_object = initial_layer.getExtent()
def track_extent(extent_object,layer):
l_properties = layer.getExtent()
# each of these essentially says that if this layer is further out to one direction than the current setting, change the setting
if l_properties.XMin < extent_object.XMin:
extent_object.XMin = l_properties.XMin
if l_properties.YMin < extent_object.YMin:
extent_object.YMin = l_properties.YMin
if l_properties.XMax > extent_object.XMax:
extent_object.XMax = l_properties.XMax
if l_properties.YMax > extent_object.YMax:
extent_object.YMax = l_properties.YMax