Qual è il modo migliore per ottenere il nome OBJECTID?


13

Qual è il modo migliore per ottenere il nome OBJECTID di una classe caratteristica?

So che puoi usare "OID @" in un cursore per ottenere il campo, ma puoi anche ottenere il nome da quello?

Sto scrivendo uno script e devo prendere in considerazione vari nomi OBJECTID, come OBJECTID_2, OBJECTID_12, FID, ecc. Che verranno utilizzati in una query.

L'uso di Descrivi è l'unico modo per ottenere il nome?

Per esempio:

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

Mi chiedo solo se c'è un altro modo.

Grazie.

Risposte:


23

Direi che usare descrivi è il migliore

oid_fieldname = arcpy.Describe(fc).OIDFieldName

è abbastanza semplice. Altrimenti, puoi filtrare direttamente quando usi listFields, così puoi provare

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

ma questo restituirà un errore se non c'è oidField (improbabile, ma ...)


1
Sono d'accordo che è molto semplice. Ho appena notato che Descrivere può essere un po 'lento. Grazie.
ianbroad,

ListFields è più veloce di Descrivi?
Studente

Dalla mia esperienza, no, sono entrambi relativamente lenti ... Ho testato su due diverse medie dimensioni) gdb e i risultati sono ~ 6.4 per Describe e ~ 7.4 per ListFields (da zero). Se l'fc è già in memoria, il tempo è rispettivamente di ~ 1.6 e 2.5.
Radouxju,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.