Який найкращий спосіб отримати ім'я OBJECTID?


13

Який найкращий спосіб отримати OBJECTID ім'я класу функцій?

Я знаю, що ви можете використовувати "OID @" в курсорі, щоб отримати поле, але чи можете ви також отримати ім'я від цього?

Я пишу сценарій і потрібно враховувати різні назви OBJECTID, наприклад OBJECTID_2, OBJECTID_12, FID тощо, які будуть використані у запиті.

Чи використання опису - єдиний спосіб отримати ім’я?

Наприклад:

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
Я згоден, це дуже просто. Я щойно помітив, Описувати можна трохи повільно. Дякую.
ianbroad

Чи ListFields швидше, ніж описано?
Учень

З мого досвіду, ні, вони обоє відносно повільно ... Я протестував на двох різних середніх розмірах) gdb, і результати ~ 6,4 для опису та ~ 7,4 для ListFields (з нуля). Якщо fc вже в пам'яті, час становить ~ 1,6 і 2,5 відповідно.
radouxju
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.