Suite

Obtenir toutes les valeurs (ou sélectionnées) d'un seul champ dans une table à l'aide d'ArcPy ?

Obtenir toutes les valeurs (ou sélectionnées) d'un seul champ dans une table à l'aide d'ArcPy ?


Je cherche un moyen d'obtenir toutes les valeurs d'un seul champ dans une table ArcGIS. Les raisons peuvent inclure le collage des valeurs dans un document texte ou une clause SQL where.

Étant donné qu'ArcGIS 10.1 ne semble pas avoir un moyen de le faire (comme un clic droit sur le champ> Copier), j'aimerais voir si je pouvais écrire un script ArcPy pour le faire pour moi. Le code suivant écrira les valeurs dans la fenêtre Python si je lui passe un nom de table et un nom de champ explicites :

import arcpy cur = arcpy.SearchCursor("myTableName") fieldname = "myFieldName" pour la ligne dans cur : print row.getValue(fieldname) del row, cur

Cependant, pour en faire un outil dynamique, j'aimerais déterminer un moyen d'identifier :

  1. la table active (dans la fenêtre de la table), et
  2. la colonne/le champ actif (en surbrillance) dans cette table

à ce stade, je peux modifier dynamiquement le nom de la table et le nom du champ dans le code ci-dessus, en fonction de ce qui est sélectionné.

Des idées?


Ainsi, bien que n'étant pas aussi interactif que ce que je recherchais à l'origine, j'ai repensé mes options et j'ai réalisé que je pouvais simplement créer un outil Python GP qui permet à l'utilisateur de choisir le nom de la table et le nom du champ à partir d'une boîte de dialogue GP standard. J'ai également ajouté une case à cocher booléenne qui permettrait à l'utilisateur de répertorier chaque élément sur une nouvelle ligne ou sous forme de liste Python convertie en chaîne. Vous devrez définir le paramètre de nom de champ pour qu'il soit « obtenu à partir » du paramètre de table dans la boîte de dialogue de configuration des paramètres de l'outil GP.

Comme tout outil GP, il n'affichera que les valeurs de l'ensemble de fonctionnalités actuellement sélectionné, s'il existe un ensemble de sélection.

import arcpy tablename = arcpy.GetParameterAsText(0) fieldname = arcpy.GetParameterAsText(1) asCSV = arcpy.GetParameterAsText(2) #Créer un curseur de recherche des enregistrements sélectionnés cur = arcpy.SearchCursor(tablename) #boucler sur les éléments sélectionnés et imprimer le valeurs if asCSV == "true": csv = [] pour la ligne dans cur: csv.append(row.getValue(fieldname)) #Print to dialog as a CSV-style Python list (string) arcpy.AddMessage(" {0 } de {1} : 
 {2}".format(fieldname,tablename, [item.encode('ascii') for item in csv] )) else : arcpy.AddMessage(" {0} de {1} : ".format(fieldname,tablename)) #Imprime chaque élément sur une nouvelle ligne pour la ligne dans cur : print row.getValue(fieldname) arcpy.AddMessage(" {0}".format(row.getValue(fieldname))) del rangée, cur

Ce n'est pas exactement ce que vous recherchez, mais le pythonaddins module est probablement le plus proche que vous obtiendrez :

lyr = pythonaddins.GetSelectedTOCLayerOrDataFrame()

La mise en garde, bien sûr, est que ce module ne peut être utilisé que dans un complément Python (pas une boîte à outils !).

Je pense que vous devrez examiner ArcObjects et voir si une méthode/fonction peut vous aider.


Voir la vidéo: ArcGIS - Converting a geodatabase to shapefiles