¿Cuál es la mejor manera de obtener el nombre OBJECTID?

13

¿Cuál es la mejor manera de obtener el nombre OBJECTID de una clase de entidad?

Sé que puede usar "OID @" en un cursor para obtener el campo, pero ¿también puede obtener el nombre de eso?

Estoy escribiendo un script y necesito tener en cuenta diferentes nombres de OBJECTID, como OBJECTID_2, OBJECTID_12, FID, etc., que se utilizarán en una consulta.

¿Usar Describe es la única forma de obtener el nombre?

Por ejemplo:

oid_field = [field.name for field in arcpy.ListFields("FC") if field.type == "OID"]

Me pregunto si hay otra forma.

Gracias.

ianbroad
fuente

Respuestas:

23

Yo diría que usar describe es el mejor

oid_fieldname = arcpy.Describe(fc).OIDFieldName

Es bastante sencillo. De lo contrario, puede filtrar directamente cuando usa listFields, por lo que podría intentar

oid_fieldname = arcpy.ListFields(fc,"","OID")[0].name

pero esto devolverá un error si no hay oidField (poco probable, pero ...)

radouxju
fuente
1
Estoy de acuerdo en que es muy sencillo. Acabo de notar que Describir puede ser un poco lento. Gracias.
ianbroad
¿ListFields es más rápido que Describe?
Estudiante
Desde mi experiencia, no, ambos son relativamente lentos ... He probado en dos gdb de tamaño mediano diferentes y los resultados son ~ 6.4 para Describe y ~ 7.4 para ListFields (desde cero). Si el fc ya está en la memoria, el tiempo es ~ 1.6 y 2.5, respectivamente.
radouxju