Arcmap Seleccione por Atributo con Python


9

Me gustaría que lo siguiente seleccione (resalte) la capa "proyecto" que se cruza con la cuadrícula, y luego extraiga un registro de la "Cuadrícula" seleccionada. No necesito guardar la capa.

Nota: Ejecutar el script desde ArcMap en la ventana de la consola de 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")

Este código se ejecuta y no se dan errores, sin embargo, no selecciona (resalta) ninguna función. Alguna idea de por qué? También corre muy lento.

Resultados

Básicamente estoy tratando de hacer esto:

ingrese la descripción de la imagen aquí

Esto se ejecuta muy rápido casi al instante, pero quiero hacer lo mismo con Python. Solo necesito un valor de la tabla de la entidad seleccionada, no necesito una copia de la capa.

Parte de la solución puede ser usar el espacio de trabajo en memoria que es

Escribir datos en el espacio de trabajo en memoria es a menudo significativamente más rápido que escribir en otros formatos ...

Simplemente no estoy seguro de cómo implementar el espacio de trabajo en memoria


¿Está ejecutando este script desde ArcMap (es decir, en la consola de Python)? ¿O desde fuera de ArcMap (es decir, dentro de IDLE u otro editor de Python)? La única forma en que ArcMap "seleccionará (resaltará) cualquier entidad" es desde ArcMap. Sospecho que está ejecutando el script desde fuera de ArcMap, porque el import arcpycomando tarda un tiempo en ejecutarse.
dmahr

Estoy ejecutando el script desde ArcMap en la ventana de la consola de Python.
Tristan Forward

Si lo está ejecutando desde ArcMap, no necesita la arcpy.MakeFeatureLayer()línea, ya projectque ya es una capa. Solo hazlo arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr

gran formato de pregunta!
Brad Nesom el

Gracias @dmahr, todavía funciona más lento que el Select by Attribute incorporado, pero funciona.
Tristan Forward

Respuestas:


2

¡Buena pregunta!

Dmahr tiene razón, es más rápido simplemente seleccionar la capa en lugar de crear una capa de entidades. También agregaría el resto de las variables, aunque sean opcionales.

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

Otra cosa que encuentro es que ejecutar cosas en la ventana de Python de ArcMap siempre es más lento. Me parece que si escribe el código en un archivo .py, lo agrega como un script a la caja de herramientas y luego lo ejecuta, el procesamiento irá más rápido.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.