Usando o ArcPy para ampliar o recurso selecionado?


19

Existe uma maneira de aumentar o zoom na extensão de um recurso selecionado usando o módulo ArcPy no ArcGIS Desktop 10.

Respostas:



16

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

A maioria das funcionalidades de script que lida com gerenciamento, exibição ou saída de documentos (mxd) vai usar o módulo de mapeamento ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/…
mindless.panda

3
+1 df.zoomToSelectedFeatures()é como eu faço isso. Você também pode definir a escala df.scale = yourscalehere.
Nathanus 29/03

10

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

1

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.