Какой лучший способ получить имя 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"]

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

Благодарю.

Ответы:


23

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

oid_fieldname = arcpy.Describe(fc).OIDFieldName

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

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

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


1
Я согласен, что это очень просто. Я только что заметил, что Describe может быть немного медленным. Благодарю.
ianbroad

Является ли ListFields быстрее, чем Describe?
Учащийся

По моему опыту, нет, они оба относительно медленные ... Я тестировал на двух разных средних размерах) GDB, и результаты составляют ~ 6,4 для Describe и ~ 7,4 для ListFields (с нуля). Если fc уже находится в памяти, время составляет ~ 1.6 и 2.5 соответственно.
Радуксу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.