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.

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 ...)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.