Tampaknya ArcMap menyimpan cache untuk setiap lapisan yang berisi data fitur dan setiap kali ingin menyegarkan lapisan atau menerapkan perubahan, gunakan cache ini. Seperti yang saya temukan, ketika ArcMap ingin menggambar lapisan dari awal, mengirimkan kueri ini ke geodatabase:
pilih ObjectId, Shape dari "featureClassName" [di mana "ekspresi kueri definisi layer"]
Dalam mode pengeditan, saat menggunakan snapping, sepertinya fitur data dalam cache ini digunakan untuk menentukan snapping state saat pergerakan mouse. Saya tidak tahu bagaimana ArcMap menyimpan data spasial dalam cache ini, dalam format bentuk ESRI atau sebagai WKB, Tapi saya perlu retrive data fitur ini.
Apakah ada cara untuk mengambil kembali data fitur dari suatu lapisan menggunakan cache (lapisan cache) alih-alih menggunakan IFeatureClass::get_Feature
metode? ..... Mungkin ide saya tidak benar dan layer tidak memiliki cache (maksud saya cache yang opsional untuk layer dan meningkatkan kecepatan layer draw), tapi saya hampir yakin data spasial lapisan (peta) disimpan dalam memori ArcMap di suatu tempat dan ArcMap menggunakannya untuk operasinya seperti gertakan selama operasi edit. Apakah ada cara untuk mengakses bagian data ArcMap ini (jika benar-benar ada)?
Saya tidak ingin mengatur cache, saya ingin mengambil data dari ArcMap cache.ISpatialCacheManager
tidak menawarkan metode apa pun untuk mendapatkan data tertentu dari itu. Biarkan saya membahas apa yang saya maksud dengan lebih detail.
Ketika saya memasukkan kode ini ke dalam program saya
//C#
IFeature ipF=ipMyFeatureClassObject.GetFeature(10);
ArcMap mengeluarkan perintah pilih untuk geodatabase, mari misalkan:
select * from MyFeatureClassTableName Where ObjectId=10
dan memberikan kembali catatan data.
Dalam mode edit, ArcMap tidak dapat menggunakan metode ini untuk mendapatkan data spasial dan menghitung status gertakan untuk fitur-fitur di peta karena penggunaan waktu yang dimiliki metode ini dan perhitungan gertakan memerlukan pengambilan data kecepatan tinggi, juga karena mouse dapat bergerak ke mana saja pada peta dan gertakan diaktifkan untuk zoom apa pun, semua saksi ini menunjukkan bahwa data spasial harus tersedia di suatu tempat di memori dan saya sedang mencari metode untuk mengaksesnya.
Jika semua konsumsi ini tidak menjadi kenyataan, maka harus ada metode sempurna yang ArcMap gunakan untuk mengambil data spasial dari geodatabase dengan cepat (misalnya pengindeksan spasial level 4 atau 6 level berdasarkan luas peta dan gunakan posisi mouse untuk mengambil sebagian saja data spasial sementara pergerakan mouse sangat cepat, dengan cara ini hanya memiliki akses ke geodatabase ketika area pengindeksan terkecil perubahan mouse).
Saya sedang berurusan dengan mengembangkan alat seperti "Sketch Tool dan" Edit tool "untuk sumber data selain dari sumber data ArcObject dan saya tidak ingin mengatur cache paralel dengan ArcMap. Jika memungkinkan saya ingin menggunakan data yang sama dengan ArcMap menyimpan dalam memori untuk sumber data ini.
Sekarang, apakah kalian pikir ini adalah asumsi yang benar dan jika ya apakah ada cara untuk mengakses data spasial ArcMap di memorinya?
sumber
Jawaban:
Pada dasarnya, ekstensi Editor, saat dalam mode edit, mengelola sekumpulan snap agent (lihat ISnapEnvironment ). Setiap agen snap ini mungkin memiliki fitur cache yang terkait ( IFeatureSnapAgent.FeatureCache ) sehingga memotret dapat dilakukan tanpa mengeksekusi kueri spasial setiap kali Anda memindahkan kursor mouse. Jadi tidak ada cache fitur tunggal, tetapi biasanya lebih dari mereka tergantung pada jumlah lapisan yang dapat diedit dan jumlah agen gertakan dihidupkan.
Anda juga dapat menggunakan kelas FeatureCache secara terpisah, tanpa harus bekerja dengan Editor.
sumber
Jika Anda telah membangun cache menggunakan ISpatialCacheManager3 maka IFeatureClass.GetFeature akan bekerja lebih cepat ...
sumber