6 votos

¿Comprobando si la clase de característica tiene selección usando ArcPy?

En una frase, ¿Cómo se comprueba en Arcpy si una clase de característica tiene registros seleccionados o no? ? Más información a continuación para explicarlo:

Estoy haciendo un proceso por lotes en el que se utiliza una capa de muestreo (cuadrículas de 10km) para seleccionar registros de polígonos (de los que hay unos 100.000 en total). Mi script devuelve la lista de IDs de polígonos que intersectan cada cuadrícula de 10km. A continuación, realizo un procesamiento/resumen adicional utilizando esa lista de ID de polígonos.

En los casos en que hay polígonos dentro de la plaza de la muestra, ArcGIS realiza una selección en los polígonos, y es relativamente fácil de iterar a través de esos registros utilizando un searchcursor. Tenga en cuenta que estoy usando v10.0.

Pero en los casos en los que no hay registros seleccionados (es decir, no hay polígonos que intersecten mi cuadrado de muestra de 10 km), el searchcursor devolvería TODOS los registros de la base de datos. Entonces, ¿cuál es la forma más robusta de comprobar programáticamente si una clase de característica tiene una selección o no?

Sé que puedes usar arcpy.GetCount_management para devolver un número que te diga cuántos registros están seleccionados, y si ese número = el número de registros en toda la capa entonces puedes inferir que o bien ninguno, o bien todos están seleccionados.

Pero eso no es lo mismo que determinar si hay una selección o no. ¿Cuál es la mejor manera de hacerlo en Arcpy?

2 votos

No entiendo cómo se procede. Si tu selección no devuelve ningún registro, entonces estará vacía, no incluirá todos los registros. Entonces usar GetCount no es ambiguo. ¿Puedes mostrar tu código?

0 votos

Pero ese es el punto, no hay selección, por lo tanto getcount devuelve todos los registros en lugar de cero. No existe una selección que no devuelva ningún registro, sino que es una consulta (ya sea por atributo o por ubicación) que no devuelve ninguna selección. Por tanto, getcount devuelve todos los registros. En cualquier caso tengo una solución que publicaré en un segundo...

16voto

li.davidm Puntos 136

Después de indagar un poco más, este post responde a mi pregunta: http://blog.technicallyliving.com/2013/08/arcpy-testing-for-selected-features/

desc=arcpy.Describe("layer_name")
desc.FIDSet

u'3; 4; 5; 6'

El autor dice " FIDSet devolverá una cadena delineada con punto y coma de los FIDs seleccionados. Si no se selecciona ninguno, estará en blanco ". Problema resuelto, creo. Cualquier otra solución será bienvenida

1 votos

Esta es una pregunta bastante clásica y, en mi opinión, la solución que has encontrado es la mejor.

1 votos

Como se indica en el enlace proporcionado por @Jason Scheirer, utilizando sel_count = len(desc.fidSet.split(";")) le dará efectivamente el equivalente a un GetSelectionCount lo que facilitaría la validación mediante if sel_count > 0: do something .

0 votos

@RyanDalton sel_count no puede ser 0 ya que la división en una cadena vacía devuelve un array de tamaño 1

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X