Menyegarkan tabel atribut terbuka di ArcMap menggunakan ArcPy daripada ArcObjects?


11

Saya menjalankan alat Calculate Field GP dari arcpy di ArcMap. Ketika nilai baris diperbarui, itu tidak muncul sampai saya menggunakan alat Muat Ulang Cache (Opsi Tabel> Muat Ulang Cache). Bagaimana cara me-refresh tabel atribut secara otomatis tanpa menggunakan ArcObjects?

Saya telah mencoba memperbarui kueri definisi seperti yang disarankan @ blah238 Menggunakan python, bagaimana Anda "memuat ulang cache" pada Tabel Atribut yang dibuka , tetapi ini tidak membantu. Menyetel ulang sumber data bukan pilihan karena kelas fitur mungkin dalam sesi pengeditan dan saya tidak ingin kehilangan koneksi ke sumber data.


Apakah Anda menggunakan ArcGIS 10.1? Jika demikian, apakah Anda menggunakan Add-in Python atau alat skrip Python untuk menjalankan Calculate Field?
PolyGeo

1
Apakah itu penting? Saya memanggil alat Hitung Field GP dari Add-in Python, tetapi hal yang sama diamati ketika menjalankan alat GP dari jendela Python.
Alex Tereshenkov

1
Saya selalu berpikir bahwa jika saya akan mencoba dan mereproduksi masalah, maka cara yang paling mungkin saya akan melihatnya adalah jika saya melakukan persis (atau sedekat yang saya bisa) langkah-langkah yang sama dalam konfigurasi yang sama seperti yang telah terlihat sebelumnya.
PolyGeo

Jawaban:


4

Anda tampaknya memukul batasan ArcPy, dengan tidak adanya ArcObjects.

Keterbatasan ArcPy.mapping telah dijelaskan secara luas di sini sebagai:

Arcpy.mapping bukan pengganti untuk ArcObjects melainkan alternatif untuk berbagai skenario yang didukungnya. ArcObjects masih diperlukan untuk pengembangan butir yang lebih halus dan kustomisasi aplikasi, sedangkan arcpy.mapping dimaksudkan untuk mengotomatiskan isi dokumen peta yang ada dan file layer.

Jika @ blah238 saran lain untuk menggunakan ArcObjects dari ArcPy bukan pilihan bagi Anda, maka Anda mungkin lebih baik untuk mengirimkan Ide ArcGIS agar fungsi ini terpapar ke ArcPy. Jika Anda memposting tautan ke Ide ArcGIS di sini maka saya akan dengan senang hati memilihnya.


Terima kasih PolyGeo, Sayang sekali kami tidak dapat menemukan cara untuk me-refresh tabel atribut saat menghitung nilai bidang di luar sesi pengeditan.
Alex Tereshenkov

1
Anda dapat mengirimkan permintaan peningkatan ke dukungan teknis ESRI. Saya meminta kemampuan untuk hanya memiliki tombol, opsi menu atau tombol F untuk me-refresh tabel untuk menunjukkan perubahan tanpa secara manual menutup dan membuka. Saya diberitahu bahwa tabel itu harus diperbarui sendiri dan masalahnya ditutup karena tidak dapat diproduksi ulang secara lokal. Biasanya mereka sangat membantu. Saya mendapat kesan mereka bahkan tidak menyadari keterbatasan.
hidung belang

Saya merekomendasikan melakukan kedua hal di atas tetapi Ide ArcGIS memungkinkan Anda memantau popularitas & kemajuan implementasi jauh lebih mudah daripada dukungan lokal di sini.
PolyGeo

1
@johns, tahukah Anda bahwa Anda tidak perlu menutup dan membuka tabel atribut untuk menyegarkannya? Cara saat ini untuk melakukannya adalah dengan mengklik tombol Table Options> Reload Cache. Hal lain yang berfungsi adalah menjalankan operasi Hitung Bidang dalam mode pengeditan, kemudian nilai-nilai dalam tabel atribut diperbarui segera.
Alex Tereshenkov

1
@ Alex, terima kasih atas sarannya; itu membuat saya kembali untuk menguji masalah lebih lanjut. Saya telah menggunakan cache ulang tetapi gagal / gagal ketika saya telah menambahkan poligon dalam mode edit dalam tampilan tata letak menggunakan addin untuk mendapatkan tingkat tata letak. Ketika dalam tampilan data dan saya menggunakan addin yang sama, maka cache reload berfungsi. Jadi entah bagaimana melibatkan tampilan tata letak.
hidung belang

3

Ini mungkin bermanfaat bagi alur kerja spesifik Anda atau tidak. Saya telah menemukan bahwa jika Anda mengubah pilihan pada layer Anda maka pembaruan tabel atribut juga.

Makanya saya sering pakai

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Tentu saja jika Anda benar-benar memiliki sesuatu yang dipilih dan Anda tidak ingin kehilangan jejak maka ini tidak baik. Dalam hal ini Anda dapat memilih dari lapisan di mana OID ada dalam daftar OID dari fitur yang dipilih saat ini (pada dasarnya mengubah pilihan menjadi apa pun yang sudah dipilih saat ini). Ini mungkin butuh waktu lama untuk menjadi praktis, saya belum pernah mencobanya dalam skenario kehidupan nyata.


1

Sudahkah Anda mencoba:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

atau

arcpy.RefreshActiveView() # Refreshes the map

atau

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Saya pikir salah satu dari ini akan berfungsi, tapi kadang-kadang saya tahu di ArcMap saya harus secara manual menutup tabel atribut kemudian membukanya kembali untuk melihat beberapa pengeditan. Saya tidak yakin apakah menutup dan membuka tabel dapat dilakukan dengan ArcPy, tetapi itu juga akan menjadi pilihan.


Thansk, Cody, sayangnya, tidak ada yang berhasil. Menutup dan membuka tabel atribut secara manual melakukan trik, namun saya mencari sesuatu yang akan melakukan itu secara terprogram. Membuka dan menutup tabel atribut juga tidak tersedia dengan Python.
Alex Tereshenkov

Tak satu pun dari ini dirancang untuk me-refresh tabel atribut.
Radar

1

Ini bekerja:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.