Obtenir la liste des fonctionnalités sélectionnées dans ArcGIS for Desktop à l'aide du code Python?

20

J'ai une question concernant les sélections dans ArcGIS for Desktop. Supposons que j'ai une couche dans ArcMap et que j'ai sélectionné deux des cinq entités.

Est-il possible d'obtenir une liste de toutes les fonctionnalités sélectionnées en utilisant Python?

Ce serait bien s'il y avait un moyen d'obtenir un (ou tous) attribut (s) spécial (s) des fonctionnalités sélectionnées stockées dans une liste qui peut être écrite dans un fichier txt.

Est-il possible de le faire dans ArcGIS for Desktop?

Sven
la source

Réponses:

33

Chaque fois que vous avez une sélection sur un calque, un objet curseur ne renvoie que les lignes sélectionnées.

for row in arcpy.SearchCursor("name_of_layer_with_selection"):
    print row.field1, row.field2
Jason Scheirer
la source
6
Mais le problème est que si vous obtenez toutes les fonctionnalités, vous ne savez pas si TOUS ou AUCUN ont été sélectionnés.
Matej
2
Cela s'applique-t-il également aux entités sélectionnées dans la classe d'entités?
Jio
13

la fonction Describe renverra également une liste. Je ne suis pas sûr que ce soit plus rapide que la méthode du curseur mais j'ai aimé que ce soit un outil utile. La liste résultante est l'ID d'objet du jeu de sélection.

import arcpy

aa = arcpy.Describe("someFC")
ss = aa.FIDset
tt = ss.split("; ")
Print tt

[u'1363', u'1364', u'1365', u'1367', u'1369', u'1370']
Sam Flarity
la source
Bonne solution aussi! Malheureusement, je ne suis pas en mesure de fixer deux fois le talon vert. Cette solution rend le script également indépendant des différentes versions d'ArcGIS, car dans ArcGIS 10.1 les curseurs sont appelés d'une manière différente que dans ArcGIs 10.0 (ArcGIS 10.1 arcpy.da.SearchCursor, ArcGIS 10.0 arcpy.SearchCursor ...).
Sven
4
Les deux types de curseur sont disponibles dans 10.1. Vous n'avez pas besoin d'utiliser les nouveaux curseurs arcpy.da.
blah238
1
Cette réponse donne un moyen de vérifier la sélection vide, ce qui empêcherait d'appeler par inadvertance un outil sur une classe d'entités entière alors qu'en fait, ce sont zéro entités qui remplissaient vos critères de sélection.
nickbrick
Grande astuce @Sam Flarity, c'est une alternative intéressante (plus rapide?) À l'utilisation d'arcpy.SearchCursor ou arcpy.da.SearchCursor
grego