QGIS 3.0 point cluster renderer, apakah mungkin untuk mengontrol urutan rendering (z-order)?

19

Saya telah bermain dengan renderer titik baru di QGIS 3.0.2 dan ini bagus - jauh lebih mudah (dan lebih cepat) daripada harus melakukan pengelompokan sendiri.

Untuk menunjukkan apa yang saya maksud, berikut adalah contoh kecelakaan di jalan di Edinburgh menggunakan data STATS19 dan radius 30m.

masukkan deskripsi gambar di sini

Saya tidak dapat menemukan cara mengatur z-order sehingga cluster terbesar diambil di depan cluster yang lebih kecil.

Saya mengetahui variabel @cluster_size - itulah yang saya gunakan untuk skala dan warna simbol. Untuk ini saya menggunakan asisten ukuran dan warna. Saya menghapus penanda font untuk menghapus teks dari setiap cluster.

Ukuran marker didefinisikan sebagai berikut: -

coalesce(scale_exp(@cluster_size, 0, 50, 1, 200, 0.57), 0)

Warna marker didefinisikan sebagai berikut: -

coalesce(ramp_color('custom ramp',scale_linear( @cluster_size, 0, 50, 0, 1), '#000000')

Apa yang saya coba sejauh ini: -

  • Level Simbol - Tidak beruntung; tidak dapat memilih nama variabel.
  • Render lapisan> Kontrol Rendering Urutan Fitur dan pilih @cluster_size sebagai sortir. Tampaknya tidak berpengaruh.
  • Gaya lulus menggunakan @cluster_size karena ekspresi tidak berfungsi.

Adakah yang tahu apakah ini mungkin, atau apakah ini batasan dengan penyaji tertentu ini?

Saya tahu ada banyak cara lain untuk melakukan ini (buffer / spatial join, plugins), tetapi renderer baru harus jauh lebih cepat. Atau apakah saya mengabaikan sesuatu yang sudah jelas? :)

Steven Kay
sumber
Mungkin berhasil dengan mengambil urutan dalam tabel atribut ke dalam akun. Mungkin Anda mengaturnya dalam urutan menaik sehingga yang terbesar ditampilkan sebagai yang terbaru? Jika tidak ada fungsi 'Urutkan fitur berdasarkan atribut', Anda dapat mencoba plugin MMQGIS (jika tersedia untuk qgis 3)
Revo
terima kasih @Revo. Tampaknya mungkin untuk mengukur & mengurutkannya pada atribut (termasuk dengan renderer Cluster Point), tetapi itu hanya berfungsi pada satu skala. Saya mencoba menggunakan cluster_size karena ukuran cluster berubah secara dinamis saat saya memperbesar / memperkecil menggunakan titik renderer titik. Saya akan lihat MMQGIS (tersedia untuk QGIS 3)
Steven Kay

Jawaban:

2

Tampaknya seolah-olah implementasi cluster point tidak memungkinkan untuk ini secara asli.

Pertimbangkan renderer cluster titik - pada dasarnya menganalisis dan cluster data titik pada waktu render, membuat lapisan pseudo baru. Lapisan ini tidak dapat diakses oleh pengguna. Seseorang tidak dapat meminta titik berkerumun. Seseorang tidak bisa menghitung atribut @cluster_size .

Renderer titik cluster mewarisi urutan render dari sumber menggunakan urutan rendering fitur Kontrol ( QgsFeatureRequest :: OrderByClause) sehingga membuka kemungkinan beberapa solusi cerdas menggunakan atribut dan ekspresi, namun skema pemesanan tertentu tidak dijamin konsisten.

Sebagai contoh, pertimbangkan layer titik dengan rendering yang dipesan dengan atribut "Latitude". Poin yang lebih utara diberikan di atas poin yang lebih selatan. Penyaji gugus titik tidak memiliki atribut "Latitude" untuk fitur-fitur barunya, meskipun akan mewarisi beberapa kemiripan urutan itu dari sumber. Mungkin ada contoh ketika cluster yang lebih selatan merender di atas cluster yang lebih utara, karena urutan poin asli.

CrystallineEntity
sumber
Terima kasih. Itu penjelasan yang sangat jelas, yang juga menjawab pertanyaan saya apakah mungkin untuk menghitung atribut dari titik-titik berkerumun, katakanlah yaitu jumlah populasi yang terkait dengan setiap titik asli. Jelas belum .... belum? Ini akan menjadi fitur yang sangat berguna. Adakah ide tentang bagaimana hal ini dapat dicapai dengan beberapa solusi cerdas (yang tidak memerlukan pengkodean, karena saya tidak (lagi-lagi?) Ahli dalam hal ini), bahkan dengan cara yang statis? Saya berjuang untuk menemukan alat untuk mengelompokkan poin dengan cara yang sama seperti yang dilakukan oleh cluster-renderer
dorakiara
Secara umum, Anda bisa mendekati ini dengan mereplikasi apa yang dilakukan penyaji gugus dalam hubungannya dengan fungsi 'Kontrol rendering fitur' menggunakan atribut. Lulus pertama yang kasar bisa menjadi buffer lapisan titik, menghitung poin dalam poligon buffered sebagai atribut di lapisan poin. Kontrol urutan render dengan atribut ini. Agak rumit dan tidak harus bekerja pada skala yang berbeda.
CrystallineEntity
Saya juga mendorong Anda untuk membuat permintaan fitur, yang akan mengekspos metode @cluster_size ke fungsi 'Kontrol urutan rendering fitur'.
CrystallineEntity