Mencari manual generator geometri QGIS?

8

Saya ingin membuat beberapa peta aliran seperti yang ditampilkan di pos Underdark: https://anitagraser.com/2016/12/18/details-of-good-flow-maps/

Saya memiliki satu set titik lokasi, katakan 50, dan saya ingin membuat satu peta " semua titik ke satu " untuk setiap titik, dengan demikian 50 peta dalam contoh ini. Dan satu set peta " satu titik ke semua " lainnya untuk setiap titik, jadi 50 peta lebih banyak.

Alih-alih membuat semua lapisan garis tambahan, saya ingin menyelesaikan ini menggunakan kombinasi simbol generator Atlas dan Geometri di QGIS.

Namun, saya tidak menemukan banyak contoh untuk melihat bagaimana atau apakah saya bisa melakukannya.

Jadi, adakah situs di mana saya dapat menemukan serangkaian contoh lengkap generator geometri QGIS?

Ini adalah klip dari output yang difilter yang menunjukkan hanya 10 baris teratas dari setiap titik. Saya membuat semua baris dari csv dengan koordinat titik menggunakan WKT. Simbol panah dan titik dibuat dengan generator geometri. Sisanya dikendalikan oleh Atlas.

masukkan deskripsi gambar di sini

Albert
sumber

Jawaban:

8

Sejauh ini belum ada situs seperti itu. Fiturnya agak baru dan contoh penggunaan baru mulai muncul sekarang.

Untuk kasus penggunaan khusus Anda, saya masih merekomendasikan untuk membuat layer garis dengan semua koneksi. Anda kemudian dapat menyaring lapisan ini menggunakan Atlas dan tidak perlu khawatir tentang hal lain.

underdark
sumber
6

Ini dimungkinkan menggunakan 'generator geometri' yang berbeda dengan yang awalnya Anda maksud saya curigai, Anda dapat menghindari keharusan membuat semua lapisan sambungan dengan menggunakan lapisan virtual:

Beberapa poin:

titik sampel

Tambahkan lapisan virtual menggunakan SQL berikut - GABUNGAN cocok setiap titik satu sama lain, dan garis geometri dihasilkan menggunakan fungsi MakeLine Spatialite :

SELECT s.id 'ID1', c.id 'ID2' , MakeLine(s.geometry,c.geometry) 'geometry'
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id

Hasil:

Poin dengan garis penghubung

Tabel virtual ini kemudian dapat difilter secara dinamis menggunakan fungsionalitas Atlas.

Menghasilkan garis lengkung secara dinamis akan lebih sulit, tetapi harus tetap dimungkinkan. Melengkung mereka dengan cara yang sesuai secara kartografis (mempertimbangkan distribusi jalur lain) mungkin melampaui apa yang dapat dicapai dengan lapisan virtual.

Memperbarui:

Dengan sedikit mengutak-atik dan banyak referensi ke daftar fungsi Spatialite saya telah menghasilkan garis lengkung:

Poin dengan garis penghubung melengkung

SQL layer virtual untuk ini di bawah ini. Perhatikan bahwa semua permutasi ditampilkan, dan membalikkan urutan lokasi awal dan akhir menghasilkan kurva komplementer.

SELECT s.id 'ID1', c.id 'ID2' , 
MakeArc(
    X(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    Y(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    distance(s.geometry,c.geometry) * 1.1180339887,
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),s.geometry) * (180/PI()),
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),c.geometry) * (180/PI()),
    27700,
    2) 'geom' /*line:27700*/
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id
Andy Harfoot
sumber