Saya memiliki satu set besar data garis (> 140.000 fitur). Apakah ada keunggulan pemrosesan, baik dalam waktu yang diperlukan atau (lebih penting) memori yang digunakan:
- menjalankan Larutkan data sebelum menjalankan Buffer ?
- menjalankan Dissolve pada input ke dua operasi Identity ?
Saya biasanya hanya menunggu sampai semua geoprocessing selesai dan kemudian melakukan satu Dissolve di akhir. Namun, saya sedang men-debug skrip orang lain yang sudah sangat lama, dan saya tidak yakin apakah dia berulang kali membubarkan semuanya karena suatu alasan (kembali di Arc 9.3), atau hanya tidak memikirkan alternatifnya. (Skrip yang sama berulang kali memproyeksikan data antara alat geoprosesing, sehingga logikanya sudah dipertanyakan.)
Jawaban:
Jika penggunaan memori menjadi perhatian utama Anda, maka banyak fitur kecil (jumlah titik rendah) mungkin akan lebih sesuai dengan keinginan Anda daripada beberapa fitur yang sangat besar (jumlah titik tinggi). Tetapi Anda mungkin menemukan bahwa "terlalu banyak fitur" pada akhirnya mungkin membanjiri bahkan "terlalu banyak titik" untuk kecepatan pemrosesan.
Jika Anda berpikir tentang bagaimana algoritma harus disusun untuk memproses semua fitur terhadap semua fitur antara dua kelas fitur, Anda sedang bekerja dengan loop multiply-nested (untuk fitur di FC1 dan FC2, dan untuk simpul di Feature1 dan Feature2). Dalam operasi seperti menggambar, jumlah permintaan menggambar sering kali lebih penting daripada simpul dalam setiap permintaan, tetapi dengan operasi tema-pada-tema, algoritma kunci cenderung didasarkan pada jumlah simpul pada setiap pasangan F1 / F2 , dengan " notasi O besar " dari "O (N * M)" (waktu untuk menyelesaikan operasi terkait dengan faktor jumlah simpul yang terlibat), yang, untuk fitur besar di kedua set data, cukup dekat untuk O (N ^ 2) untuk membuat Anda khawatir tentang pekerjaan yang pernah selesai.
Saya telah sukses dengan melapisi fitur besar (seperti Rusia, Kanada, AS, Australia, Brasil, Norwegia) dengan grid 5 derajat (jala) untuk mengurangi kompleksitas fitur untuk pemrosesan perantara. Saya telah melihat operasi point-in-polygon pada layer COUNTRIES 1: 15m yang dibatasi vertex berjalan 100-1000 kali lebih cepat dari tabel aslinya (dengan hanya peningkatan jumlah fitur 20x). Anda perlu berhati-hati dalam logika pemrosesan Anda untuk menangani hubungan satu-ke-banyak dan banyak-ke-banyak dengan benar, terutama dalam kasus di mana batas palsu ada.
Ada juga aspek "hasil yang semakin berkurang" untuk penghematan bekerja dengan fitur yang lebih kecil - Saya memilih grid 5 derajat dengan menguji kinerja perpotongan dengan 90, 45, 30, 20, 15, 10, 5, 3, 2 dan Kisi 1 derajat, yang menunjukkan peningkatan waktu pemrosesan yang mengkhawatirkan karena jumlah fitur total meningkat.
Ada saat - saat di mana lebih sedikit fitur dengan simpul lebih banyak lebih efisien, sehingga mungkin sepadan dengan upaya untuk melakukan beberapa pengujian atas urutan operasi dengan data nyata (bukan subset pengujian yang disederhanakan) sebelum melakukan satu pendekatan di atas yang lain (menyeimbangkan penggunaan RAM dengan waktu berjalan).
CATATAN: Saya menjalankan kembali latihan gridding dengan perangkat keras modern, dan mendapatkan kinerja optimal dengan overlay 30 derajat, sehingga meningkatkan risiko fitur yang terlalu kecil, dan meningkatkan pentingnya evaluasi dengan data produksi.
sumber
Sebuah Larutkan operasi biasanya akan mengurangi sejumlah fitur, busur dan kelenjar dalam lapisan, terutama untuk lapisan dengan panjang yang signifikan dari batas bersama. Karena waktu yang dihabiskan selama operasi Buffering sangat tergantung pada jumlah node, pra-pemrosesan dengan Dissolve dapat secara signifikan mengurangi waktu berjalan (dan persyaratan memori). Apakah itu bermanfaat atau tidak dalam kasus Anda akan tergantung pada sejauh mana Anda akan dapat mengurangi jumlah node (tergantung pada lapisan data Anda) dan efisiensi operasi Dissolve dibandingkan dengan Buffering . Dalam pengalaman saya, menggunakan Java Topology Suite, operasi Larutkan bisa sangat cepat dibandingkan denganBuffering , meskipun kinerja Dissolve sangat bervariasi menurut perpustakaan. Pertimbangan lainnya adalah bahwa Dissolve sangat dipengaruhi oleh kesalahan topologi. Jika layer Anda mengandung kesalahan, Anda harus melakukan pembersihan vektor sebelum operasi Dissolve, yang akan menambah waktu proses alur kerja.
sumber