Arcmap Select par attribut avec Python

9

Je voudrais que ce qui suit sélectionne (surligne) la couche "projet" qui coupe la grille, puis tire un enregistrement de la "grille" sélectionnée. Je n'ai pas besoin de sauvegarder le calque.

Remarque: Exécution du script à partir d'ArcMap dans la fenêtre de la console Python.

import arcpy

# Make a layer from the feature class
arcpy.MakeFeatureLayer_management("project","project_lyr")

# Then add a selection to the layer based on location to features in another feature class 
arcpy.SelectLayerByLocation_management("project_lyr","INTERSECT","Grid")

Ce code s'exécute et aucune erreur n'est donnée, mais il ne sélectionne (surligne) aucune fonctionnalité. Une idée pourquoi? Fonctionne également très lentement.

Résultats

Fondamentalement, j'essaie de faire ceci:

entrez la description de l'image ici

Cela fonctionne très rapidement presque instantanément, mais je veux faire de même en utilisant python. J'ai juste besoin d'une valeur de la table de l'entité sélectionnée, je n'ai pas besoin d'une copie de la couche.

Une partie de la solution peut consister à utiliser l' espace de travail en mémoire qui est

L'écriture de données dans l'espace de travail en mémoire est souvent beaucoup plus rapide que l'écriture dans d'autres formats ...

Je ne sais pas comment implémenter l'espace de travail en mémoire

Tristan Forward
la source
Exécutez-vous ce script à partir d'ArcMap (c'est-à-dire dans la console Python)? Ou depuis l'extérieur d'ArcMap (c'est-à-dire dans IDLE ou un autre éditeur Python)? La seule façon dont ArcMap "sélectionne (met en surbrillance) des entités" est depuis ArcMap. Je soupçonne que vous exécutez le script depuis l'extérieur d'ArcMap, car la import arcpycommande prend un certain temps à s'exécuter.
dmahr
J'exécute le script depuis ArcMap dans la fenêtre de la console Python.
Tristan Forward
Si vous l'exécutez à partir d'ArcMap, vous n'avez pas besoin de la arcpy.MakeFeatureLayer()ligne, car il projects'agit déjà d'une couche. Faites-le arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr
grand format de question!
Brad Nesom
Merci @dmahr, fonctionne toujours plus lentement que la sélection intégrée par attribut mais fonctionne.
Tristan Forward

Réponses:

2

Bonne question!

Dmahr a raison, il est plus rapide de simplement sélectionner la couche au lieu de créer une couche d'entités. J'ajouterais également le reste des variables, même si elles sont facultatives.

arcpy.SelectLayerByLocation_management ("project_lyr", "INTERSECT", "Grid", "#", "NEW_SELECTION")

Une autre chose que je trouve, c'est que l'exécution des choses dans la fenêtre python d'ArcMap est toujours plus lente. Je trouve que si vous écrivez le code dans un fichier .py, l'ajoutez en tant que script à la boîte à outils, puis l'exécutez, le traitement ira plus vite.

Cody Brown
la source