Quelle est la meilleure façon d'obtenir le nom OBJECTID?

13

Quelle est la meilleure façon d'obtenir le nom OBJECTID d'une classe d'entités?

Je sais que vous pouvez utiliser "OID @" dans un curseur pour obtenir le champ, mais pouvez-vous également en obtenir le nom?

J'écris un script et je dois prendre en compte différents noms OBJECTID, comme OBJECTID_2, OBJECTID_12, FID, etc. qui seront utilisés dans une requête.

L'utilisation de Describe est-elle le seul moyen d'obtenir le nom?

Par exemple:

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

Je me demande simplement s'il y a une autre façon.

Merci.

ianbroad
la source

Réponses:

23

Je dirais que l'utilisation de décrire est le meilleur

oid_fieldname = arcpy.Describe(fc).OIDFieldName

est assez simple. Sinon, vous pouvez filtrer directement lorsque vous utilisez listFields, vous pouvez donc essayer

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

mais cela retournera une erreur s'il n'y a pas d'oidField (peu probable, mais ...)

radouxju
la source
1
Je suis d'accord, c'est très simple. Je viens de remarquer que la description peut être un peu lente. Merci.
ianbroad
ListFields est-il plus rapide que Describe?
Apprenti
D'après mon expérience, non, ils sont tous deux relativement lents ... J'ai testé sur deux tailles moyennes différentes) gdb et les résultats sont ~ 6,4 pour Describe et ~ 7,4 pour ListFields (à partir de zéro). Si le fc est déjà en mémoire, l'heure est respectivement de ~ 1,6 et 2,5.
radouxju