Suite

Utiliser ArcPy pour zoomer sur l'entité sélectionnée ?


Existe-t-il un moyen de zoomer sur l'étendue d'une entité sélectionnée à l'aide du module ArcPy dans ArcGIS Desktop 10.


Je dirais oui. La classe de couche a une méthode getSelectedExtent et le Dataframe a une propriété d'étendue. Je ne l'ai pas essayé cependant.


J'ai un bout de code qui fonctionne. Je l'ai trouvé ici sur le site d'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()

Comme vous l'avez déjà deviné,

df.zoomToSelectedFeatures()

changera l'étendue du bloc de données en tous les entités sélectionnées dans la fenêtre cartographique. Si vous souhaitez simplement zoomer sur un jeu de sélection pour un calque spécifique, utilisezlyr.getSelectedExtent(). J'ajuste également le facteur d'échelle de la carte afin 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:1000 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 entité 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é sur l'une des couches que vous incluez. L'argument "layer" de track_extent est un objet arcpy.Mapping.Layer. Lorsque vous êtes prêt à enregistrer votre carte, définissez simplement l'étendue de votre cadre de données via quelque chose comme data_frame.extent = extend_object

extend_object = initial_layer.getExtent() def track_extent(extent_object,layer): l_properties = layer.getExtent() # chacun de ces éléments dit essentiellement que si ce calque est plus éloigné dans une direction que le paramètre actuel, modifiez le paramètre si l_properties.XMin < extend_object.XMin : extent_object.XMin = l_properties.XMin si l_properties.YMin < extent_object.YMin : extent_object.YMin = l_properties.YMin si l_properties.XMax > extend_object.XMax : extend_object.XMax = l_properties.XMax si l_properties_object. .YMax : étendue_objet.YMax = l_properties.YMax


Voir la vidéo: GIS Python: Count shape files and Select by Location 2 Real world ArcPy examples (Octobre 2021).