Какой лучший способ получить имя OBJECTID?

13

Каков наилучший способ получить OBJECTID-имя класса объектов?

Я знаю, что вы можете использовать «OID @» в курсоре, чтобы получить поле, но вы можете также получить имя от этого?

Я пишу сценарий, и мне нужно учитывать различные имена OBJECTID, такие как OBJECTID_2, OBJECTID_12, FID и т. Д., Которые будут использоваться в запросе.

Использование Describe - единственный способ получить имя?

Например:

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

Мне просто интересно, есть ли другой способ.

Благодарю.

ianbroad
источник

Ответы:

23

Я бы сказал, что лучше всего использовать описать

oid_fieldname = arcpy.Describe(fc).OIDFieldName

это довольно просто. В противном случае вы можете напрямую фильтровать при использовании listFields, так что вы можете попробовать

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

но это вернет ошибку, если нет oidField (маловероятно, но ...)

radouxju
источник
1
Я согласен, что это очень просто. Я только что заметил, что Describe может быть немного медленным. Благодарю.
ianbroad
Является ли ListFields быстрее, чем Describe?
Учащийся
По моему опыту, нет, они оба относительно медленные ... Я тестировал на двух разных средних размерах) GDB, и результаты составляют ~ 6,4 для Describe и ~ 7,4 для ListFields (с нуля). Если fc уже находится в памяти, время составляет ~ 1.6 и 2.5 соответственно.
Радуксу