Réponses:
Je dirais oui. La classe de couches a une méthode getSelectedExtent et le Dataframe a une propriété d'extension. Je n'ai pas encore essayé.
J'ai un morceau de code qui fonctionne. Je l'ai trouvé ici sur le site Web de l'ESRI. Ajoutez-le en tant que script à un modèle, puis connectez-y la sortie d'un outil de sélection par attribut. Il fait exactement ce que je veux.
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()C'est comme ça que je le fais. Vous pouvez également définir l'échelle avec df.scale = yourscalehere.
Comme vous l'avez déjà supposé,
df.zoomToSelectedFeatures()
changera l'étendue du bloc de données à toutes les entités sélectionnées dans le bloc de carte. Si vous souhaitez simplement zoomer sur un jeu de sélection pour un calque spécifique, utilisez lyr.getSelectedExtent(). J'ajuste également le facteur d'échelle de la carte pour que mon code ressemble à ceci:
df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()
ou ca:
df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Donc, pour ajouter à cela, j'ai eu besoin de garder une trace de l'étendue la plus large sur plusieurs couches sans aucune fonctionnalité sélectionnée. Le code suivant suivra l'étendue la plus éloignée dans chaque direction. extend_object reste constant dans tous les appels à la fonction et doit être initialisé à l'une des couches que vous incluez. L'argument "couche" à track_extent est un objet arcpy.Mapping.Layer. Lorsque vous êtes prêt à enregistrer votre carte, définissez simplement l'étendue de votre dataframe via quelque chose comme data_frame.extent = extend_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