Apa cara terbaik untuk mendapatkan nama OBJECTID?

13

Apa cara terbaik untuk mendapatkan nama OBJECTID dari kelas fitur?

Saya tahu Anda bisa menggunakan "OID @" dalam kursor untuk mendapatkan bidang, tetapi bisakah Anda mendapatkan namanya juga?

Saya sedang menulis skrip, dan perlu mempertimbangkan berbagai nama OBJECTID, seperti OBJECTID_2, OBJECTID_12, FID, dll. Yang akan digunakan dalam kueri.

Apakah menggunakan Jelaskan satu-satunya cara untuk mendapatkan nama?

Sebagai contoh:

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

Saya hanya ingin tahu apakah ada cara lain.

Terima kasih.

ianbroad
sumber

Jawaban:

23

Saya akan mengatakan bahwa menggunakan deskripsi adalah yang terbaik

oid_fieldname = arcpy.Describe(fc).OIDFieldName

cukup mudah. Jika tidak, Anda bisa langsung memfilter saat menggunakan listFields, jadi Anda bisa mencoba

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

tapi ini akan mengembalikan kesalahan jika tidak ada oidField (tidak mungkin, tapi ...)

radouxju
sumber
1
Saya setuju itu sangat mudah. Saya baru saja memperhatikan Menggambarkan bisa agak lambat. Terima kasih.
ianbroad
Apakah ListFields lebih cepat daripada Menjelaskan?
Learner
Dari pengalaman saya, tidak, keduanya relatif lambat ... Saya sudah menguji pada dua ukuran medium yang berbeda) gdb dan hasilnya ~ 6,4 untuk Menjelaskan dan ~ 7,4 untuk ListFields (dari awal). Jika fc sudah ada dalam memori, waktunya masing-masing ~ 1.6 dan 2.5.
radouxju