Suite

Utiliser ArcGIS Desktop pour zoomer sur l'entité sélectionnée suivante ?


Comment pourrais-je adapter le code suivant pour me permettre de zoomer sur chaque géométrie sélectionnée l'une après l'autre ?

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0] df.zoomToSelectedFeatures() arcpy.RefreshActiveView()

J'ai un outil de visite (en C#, converti de VB.net, qui a été mis à jour de VB6 qui a été influencé par un outil que j'ai écrit en AML)… de toute façon, la clé est d'utiliser l'Enveloppe de la géométrie dans le cas du polygone, polyligne ou multipoint et recentrez l'étendue de la carte.

Voici un début très basique pour vous :

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0] Enveloppes = [] # stocker les étendues ici # trouver le jeu de sélection SelLayer = arcpy.mapping. ListLayers(mxd,data_frame=df)[0] # premier calque fidSet = arcpy.Describe(SelLayer).FIDSet if len(fidSet) == 0: arcpy.AddMessage("Nothing selected") else: # maintenant curseur dessus un obtenir les géométries # stocker leurs étendues dans une liste avec arcpy.da.SearchCursor(SelLayer,"[email protected]") comme SCur: pour feat dans SCur: # Je vais supposer des enveloppes polygones/polylignes.append(feat[0] .extent) # récupérez l'enveloppe df.extent = Envelopes[0] # first extent arcpy.RefreshActiveView()

Vous devez d'abord vérifier qu'il y a une sélection par rapport à la couche, s'il y a un curseur à travers les enregistrements (rappelez-vous que s'il y a une sélection par rapport à une couche, seuls les enregistrements sélectionnés sont renvoyés) en utilisant [email protected] pour obtenir l'objet de géométrie qui a une étendue en tant que propriété, stockez-les dans une liste, puis appelez la première pour définir l'étendue de la trame de données actuelle (également une propriété).

Notez qu'une fois la liste établie, la sélection peut être modifiée, cela peut ou non être ce que vous voulez. Dans mon cas, je voulais que les étendues restent et puissent être modifiées au fur et à mesure que je parcourais la liste.


Vous pouvez incorporer votre code comme ci-dessus pour inclure les éléments suivants :

  1. Utilisez arcpy.da.searchcursor() faire une liste python de ces fonctionnalités sélectionnées
  2. Parcourez votre liste python à l'aide d'un ID unique pour créer et utiliser une expression SQL vous permettant de sélectionner par attribut, puis zoomez sur les entités sélectionnées.

En jouant, je pense que quelque chose dans ce sens fonctionnera… ce n'est pas testé pour le moment :

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] # À partir de la sélection, créer une couche d'entités (ArcGIS utilise toujours par défaut les entités sélectionnées) LayerList = [] avec arcpy.da.SearchCursor("Layer1", "OBJECTID") comme curseur : pour l'élément dans le curseur : LayerList.append(item) Query = """{0} = {1}""".format("OBJECTID" , item) #print LayerList #print Requête de lignes dans LayerList : arcpy.SelectLayerByAttribute_management("Layer1", "NEW_SELECTION", Query) df.zoomToSelectedFeatures()