Usi ArcPy per ingrandire la funzione selezionata?


19

Esiste un modo per ingrandire l'estensione di una funzione selezionata usando il modulo ArcPy in ArcGIS Desktop 10.

Risposte:



16

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()

La maggior parte delle funzionalità di scripting che gestisce la gestione, la visualizzazione o l'output di documenti (mxd) utilizzerà il modulo di mappatura ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/...
mindless.panda

3
+1 df.zoomToSelectedFeatures()È come lo faccio. Potresti voler impostare anche la scala df.scale = yourscalehere.
Nathanus,

10

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()

1

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.