¿Usa ArcPy para hacer zoom a la entidad seleccionada?

19

¿Hay alguna manera de hacer zoom en la extensión de una entidad seleccionada usando el módulo ArcPy en ArcGIS Desktop 10.

Zachary
fuente

Respuestas:

6

Yo diría que sí. La clase de capa tiene un método getSelectedExtent y el Dataframe tiene una propiedad de extensión. Aunque no lo he intentado.

Kirk Kuykendall
fuente
16

Tengo un código que funciona. Lo encontré aquí en el sitio web de ESRI. Añádalo como un script a un modelo, luego conecte la salida de una herramienta de selección por atributo. Hace exactamente lo que quiero.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
Zachary
fuente
La mayoría de las funciones de secuencias de comandos que manejan la gestión, visualización o salida de documentos (mxd) usarán el módulo de mapeo ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/...
mindless.panda
3
+1 df.zoomToSelectedFeatures()Es como lo hago. Es posible que desee establecer escala con df.scale = yourscaleheretambién.
Nathanus
10

Como ya has supuesto,

df.zoomToSelectedFeatures()

cambiará la extensión del marco de datos a todas las entidades seleccionadas en el marco del mapa. Si está interesado en acercarse a un conjunto de selección para una capa específica, utilice lyr.getSelectedExtent(). También ajusto el factor de escala del mapa para que mi código se vea así:

df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()

o esto:

df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Erik Anderson
fuente
1

Entonces, para agregar a esto, he estado necesitando hacer un seguimiento de la extensión más amplia en múltiples capas sin características seleccionadas. El siguiente código rastreará la extensión más lejana en cada dirección. extensión_objeto se mantiene constante en todas las llamadas a la función y debe inicializarse en una de las capas que está incluyendo. El argumento "capa" para track_extent es un objeto arcpy.Mapping.Layer. Cuando esté listo para guardar su mapa, simplemente configure la extensión de su marco de datos a través de algo como 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
nicksan
fuente