Respuestas:
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.
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()
df.zoomToSelectedFeatures()
Es como lo hago. Es posible que desee establecer escala con df.scale = yourscalehere
también.
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()
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