20 votos

¿Utilizar ArcPy para hacer zoom en la característica seleccionada?

¿Existe una forma de ampliar la extensión de una característica seleccionada utilizando el módulo ArcPy en ArcGIS Desktop 10?

18voto

Justin Standard Puntos 15312

Tengo un trozo de código que funciona. Lo he encontrado aquí en el sitio web de ESRI. Añádelo como un script a un modelo, y luego conéctale la salida de una herramienta de selección por atributos. Hace exactamente lo que quiero.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()

0 votos

La mayor parte de la funcionalidad de scripting que maneja la gestión, visualización o salida de documentos (mxd) va a utilizar el módulo de mapeo de ArcPy. help.arcgis.com/es/arcgisdesktop/10.0/help/index.html#/

3 votos

+1 df.zoomToSelectedFeatures() Es como lo hago yo. Es posible que desee establecer la escala con df.scale = yourscalehere también.

12voto

dertoni Puntos 256

Como ya has supuesto,

df.zoomToSelectedFeatures()

cambiará las extensiones del marco de datos a todo características seleccionadas en el marco del mapa. Si lo que le interesa es sólo hacer zoom en un conjunto de selección para una capa específica, utilice lyr.getSelectedExtent() . También ajusto el factor de escala del mapa por lo que mi código o bien se ve 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()

7voto

saint_groceon Puntos 2696

Yo diría que sí. El clase de capa tiene un método getSelectedExtent, y el Marco de datos tiene una propiedad de extensión. Sin embargo, no lo he probado.

1voto

rAndy Puntos 327

Así que, para añadir a esto, he estado necesitando hacer un seguimiento de la extensión más amplia a través de múltiples capas sin características seleccionadas. El siguiente código rastreará la extensión más lejana en cada dirección. extent_object se mantiene constante a través de todas las llamadas a la función y debe ser inicializado a una de las capas que está incluyendo. El argumento "layer" para track_extent es un objeto arcpy.Mapping.Layer. Cuando estés listo para guardar tu mapa, simplemente establece la extensión de tu marco de datos mediante algo como data_frame.extent = extent_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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X