Respostas:
Eu diria que sim. A classe de camada possui um método getSelectedExtent e o Dataframe possui uma propriedade de extensão. Ainda não tentei.
Eu tenho um pedaço de código que funciona. Encontrei aqui no site da ESRI. Inclua-o como um script em um modelo e conecte a saída de uma ferramenta de seleção por atributo a ele. Faz exatamente o que eu quero.
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()
é como eu faço isso. Você também pode definir a escala df.scale = yourscalehere
.
Como você já supôs,
df.zoomToSelectedFeatures()
alterará as extensões do quadro de dados para todos os recursos selecionados no quadro de mapa. Se você estiver interessado apenas em ampliar um conjunto de seleção para uma camada específica, use lyr.getSelectedExtent()
. Também ajusto o fator de escala do mapa para que meu código fique assim:
df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()
ou isto:
df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Então, para adicionar isso, eu precisava acompanhar a extensão mais ampla em várias camadas sem os recursos selecionados. O código a seguir rastreará a maior extensão em cada direção. extension_object permanece constante em todas as chamadas para a função e deve ser inicializado em uma das camadas que você está incluindo. O argumento "layer" para track_extent é um objeto arcpy.Mapping.Layer. Quando você estiver pronto para salvar seu mapa, basta definir a extensão do seu quadro de dados atravé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