Jaki jest najlepszy sposób na uzyskanie nazwy OBJECTID?

13

Jaki jest najlepszy sposób na uzyskanie nazwy OBJECTID klasy obiektów?

Wiem, że możesz użyć „OID @” w kursorze, aby uzyskać pole, ale czy możesz również uzyskać nazwę od tego?

Piszę skrypt i muszę wziąć pod uwagę różne nazwy OBJECTID, takie jak OBJECTID_2, OBJECTID_12, FID itp., Które zostaną użyte w zapytaniu.

Czy użycie Opisz jest jedynym sposobem na uzyskanie nazwy?

Na przykład:

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

Zastanawiam się tylko, czy istnieje inny sposób.

Dzięki.

ianbroad
źródło

Odpowiedzi:

23

Powiedziałbym, że używanie opisywania jest najlepsze

oid_fieldname = arcpy.Describe(fc).OIDFieldName

jest dość proste. W przeciwnym razie możesz bezpośrednio filtrować podczas korzystania z listFields, abyś mógł spróbować

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

ale to zwróci błąd, jeśli nie ma oidField (mało prawdopodobne, ale ...)

radouxju
źródło
1
Zgadzam się, że jest to bardzo proste. Właśnie zauważyłem, że opis może być trochę powolny. Dzięki.
ianbroad,
Czy ListFields jest szybsze niż Describe?
Uczeń
Z mojego doświadczenia wynika, że ​​nie, oba są względnie wolne ... Testowałem na dwóch różnych średnich rozmiarach gdb, a wyniki wynoszą ~ 6,4 dla Describe i ~ 7,4 dla ListFields (od zera). Jeśli fc jest już w pamięci, czas wynosi odpowiednio ~ 1,6 i 2,5.
radouxju