Lagi

Ekstensi aplikasi python onCreateFeature


Mencoba mengisi atribut tertentu segera setelah fitur dibuat. Saya telah mencoba fungsi ekstensi aplikasi add-in python "onCreateFeature", yang dipicu saat fitur dibuat. Fitur baru tetap dipilih di tampilan dan tabel, tetapi kemudian ketika saya menjalankan "describe" atau Search/UpdateCursor dalam kelas onCreateFeature, fitur itu mengembalikan pilihan yang ada sebelum fitur didigitalkan. (misalnya: fitur OID 12 didigitalkan dan tetap dipilih/disorot, tetapi jelaskan dan kursor melihat OID 11 sebagai pilihan saat ini.) Ada saran tentang apa yang salah di sini?

class UpdateNewFeature(object): """Implementasi untuk listener3cursor_addin.ext3 (Extension)""" def __init__(self): self.enabled = True def onCreateFeature(self): TESTline_Lyr = "TESTlines" TESTline_Fields = ['OBJECTID',' NewAttrib','SHAPE_Length'] # hitung fitur yang dipilih d = arcpy.Describe(TESTline_Lyr) if len(d.FIDSet) == 0: TESTline_Select = 0 else: TESTline_Select = len(d.FIDSet.split(";")) print "OID:", FIDSet dengan arcpy.da.UpdateCursor(TESTline_Lyr,TESTline_Fields) sebagai kursor: untuk baris di kursor: cetak "ROW:", baris # dan perbarui beberapa atribut berdasarkan kondisi saat ini

Jika ada orang lain yang datang mencari jawaban…

Meninjau kembali ini, dan dengan ketekunan atau keberuntungan (tidak, terima kasih untuk dokumentasi apa pun), saya menemukan sesuatu yang berfungsi. Saat mendigitalkan fitur baru dan menyelesaikan sketsa, peristiwa ini dipicu dalam urutan ini:

diMulaiOperasi

diBuatFitur

sebelumBerhentiOperasi

diStopOperation

diEditorSelectionDiubah

Saya secara naif menggunakan onCreateFeature (seluruh dokumentasi ESRI: "Terjadi setiap kali fitur baru dibuat.") Tetapi onCreateFeature dipicu sebelum operasi edit selesai, yang masuk akal sekarang dalam konteks daftar ini. Tentu saja, peristiwa lain selain digitalisasi akan memicu onEditorSelectionChanged, tetapi ketika saya menjalankan UpdateCursor pada fitur yang saat ini dipilih, saya hanya memperbarui atribut ketika pemilihan adalah fitur tunggal dan di mana atribut kunci adalah nol.

(Konteks: Python addin; mengedit geodatabase berversi tanpa opsi untuk "memindahkan hasil edit ke basis")


Saya pikir Anda harus menyimpan hasil edit terlebih dahulu

Saat Anda melakukan pengeditan pada tabel/kelas fitur di ArcGIS, pengeditan tersebut disimpan dalam memori dan tidak dikomit ke kelas tabel/fitur yang sebenarnya hingga Anda menyimpan pengeditan. Inilah sebabnya mengapa Anda dapat "membatalkan" pengeditan saat Anda berada dalam sesi pengeditan. Jadi, jika seseorang mencoba mengeksekusi kursor terhadap kumpulan data sebelum melakukan pengeditan tersebut dengan menyimpannya, kursor tidak mungkin menemukan pengeditan tersebut karena melihat tabel sebelum mengedit. Tampilan hasil edit tersebut di dalam tabel saat Anda mengeditnya hanyalah representasi dari apa yang akan Anda komit saat Anda menyimpan hasil edit


Tonton videonya: How to install Python on Windows 10 (September 2021).