Apakah fitur pelarutan meningkatkan efisiensi proses geoproses?

9

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

Erica
sumber
Saya tidak memiliki data keras untuk mendukung hal ini, tetapi dari pengalaman pribadi saya: selalu buffer sebelum dibubarkan jika mungkin, karena buffer fitur garis yang kompleks membutuhkan keabadian yang menakutkan.
nmpeterson

Jawaban:

9

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.

Vince
sumber
10

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.

WhiteboxDev
sumber
2
Saya tidak begitu yakin tentang bagian "persyaratan memori". Fitur yang lebih besar membutuhkan lebih banyak penyimpanan. Buffering fitur yang sangat kompleks lebih sulit (dan RAM-intensif) daripada buffering fitur sederhana. Lebih mungkin bahwa ada "sweet spot" antara "terlalu banyak fitur" dan "terlalu banyak simpul per fitur" daripada membuat pernyataan selimut bahwa melarutkan dulu akan selalu meningkatkan kinerja buffer.
Vince
@Vince, saya akan setuju bahwa efek Dissolving jauh lebih efektif untuk mengurangi run time daripada memori, tetapi pada akhirnya jika sekelompok fitur memiliki lebih sedikit fitur dengan total node lebih sedikit, itu akan membutuhkan lebih sedikit memori untuk diwakili.
WhiteboxDev
Ini akan mengurangi total memori, tetapi bukan memori per fitur. Melakukan operasi geoproses pada fitur yang besar dan kompleks membutuhkan waktu lebih lama daripada fitur yang lebih sederhana - dan tidak hanya secara linier, dalam pengalaman saya.
nmpeterson
@Vince, Juga Larutkan, tergantung pada layer, menghasilkan lebih sedikit fitur yang lebih besar. Ukuran geografis sebenarnya dari suatu fitur tidak ada hubungannya dengan persyaratan memorinya. Ini sepenuhnya ke kompleksitasnya, yang merupakan fungsi dari jumlah node yang digunakan untuk mewakilinya. Saya akan setuju dengan Anda tentang keseimbangan sweet-spot.
WhiteboxDev
@nmpeterson, Ya, memang benar bahwa ini adalah pada lapisan per dan bukan berdasarkan fitur. Tapi kami buffer layer secara umum dan bukan fitur individual. Anda yakin benar tentang non-linearitas kinerja dalam pemrosesan geospasial! Tampaknya itu selalu terjadi pada kita!
WhiteboxDev